注册 登录
编程论坛 VC++/MFC

大侠们帮帮忙,我要达到这样的功效,该怎么办?

chlgk 发布于 2010-10-15 15:15, 460 次点击
#include<iostream>
#include<math.h>
using namespace std;
const int N=5690,M=1000,K=1000;
int main()
{
    double a[N],n[M],m[K];
    int i;
    double a1,a2,a3,a4;
    for( a1=0.01,i=1; a1<1.01;i++)
    {
        a[i]=a1;
        a1=a1+0.01;
    }
    for( a2=1.1,i=101; a2<50.1;i++)
    {
        a[i]=a2;
        a2=a2+0.1;
    }
   for( a3=50.5,i=591; a3<200.5;i++)
    {
        a[i]=a3;
        a3=a3+0.5;
    }
   for( a4=201,i=891; a4<5001;i++)
    {
        a[i]=a4;
        a4=a4+1;
    }
    cout<<a[5690]<<endl;
double n1;
    for( n1=0.05,i=1; n1<50.05;i++)
    {
        n[i]=n1;
        n1=n1+0.05;
    }
   
    cout<<n[1000]<<endl;

double m1;
    for( m1=0.01,i=1; m1<10.01;i++)
    {
        m[i]=m1;
       m1=m1+0.01;
    }
   
    cout<<m[1000]<<endl;

    double x1=0.1,y1=0.4,x2=1,y2=0.399,x3=10,y3=0.38,x4=100,y4=0.24,x5=1000,y5=0.1;
const int L=N*M*K;
double F[L];
for(int l=1;l<L;l++)
for(i=1;i<N;i++)
for(j=1;j<M;j++)
  for(k=1;k<K;k++)
      //F[l]=(1/(ln(e+(x1/a[i])^n[j]))^m[k]-y1)^2/y1+(1/(ln(e+(x2/a[i])^n[j]))^m[k]-y2)^2/y2+....+(1/(ln(e+(x5/a[i])^n[j]))^m[k]-y5)^2/y5;
      //minF[l]
      cout<<F[l]<<endl;
      //return a[i],n[j],m[k];
  cout<<"a="<<a[i]<<";"<<endl;
  cout<<"n="<<n[j]<<";"<<endl;
  cout<<"m="<<m[k]<<";"<<endl;
   return 0;
   
}
黑体之前的,我有试过,是可以运行的,产生3个数组,也就是本例中函数f(x)=1/[ln(e+(x/a)^n]^m 中三个函数的可能值。 现在有5组数据,(x1,y1);(x2,y2),...(x5,y5)
这5组数据不一定在函数曲线上,我现在要做的是,在所有参数组合中,找出标准平方差最小的那对组合,也就是∑(f(xi)-yi)^2/yi ,最小,此时返回参数a[i];n[j];m[k].
小弟最近正为这个搞得焦头烂额,还请大侠们帮帮忙。 万分感谢。
3 回复
#2
hahayezhe2010-10-15 18:18
眼花缭乱中...
#3
chlgk2010-10-16 15:39
急呀,哪位大侠可以帮帮忙呀。
#4
cnfarer2010-10-16 21:17
看看算法方面的资料
1