如题,该函数是一个公式计算函数,mtatlab代码如下:
c1=1.5935;c2=1.8854e+6;c3=4.1211e+10;
load dark.txt;
load white.txt;
load data.txt;
load wl.txt
wll=wl*10;for i=1:length(wll)
    n_pr(i)=c1+c2/(wll(i)^2)+c3/(wll(i)^4);
end
i=1:2048;
datapp=0*i;
whitepp=0*i;
for i=1:2048
    for j=1:20
        datapp(i)=data(i+2048*(j-1))+datapp(i);
        whitepp(i)=white(i+2048*(j-1))+whitepp(i);
    end
    datapp(i)=datapp(i)/20;
    whitepp(i)=whitepp(i)/20;
end
datap=datapp(222:1968);
darkp=dark(222:1968);
whitep=whitepp(222:1968);
wlp=wl(222:1968);
n_prp=n_pr(222:1968);
kt=(datap-darkp')./(whitep-darkp');
wlp=wlp';
p=polyfit(wlp,kt,12);
k=polyval(p,wlp);
[pks1,locs1]=findpeaks(k);
[pks2,locs2]=findpeaks(-k);x=1:100;
for t1=1:length(x)
    y(t1)=0;
    d=x(t1)*wlp(locs1(1))/n_prp(locs1(1))/2;
    for t2=1:length(locs1)
        kk=2*d*n_prp(locs1(t2))/wlp(locs1(t2));
        t=(round(kk)-kk)^2;
        y(t1)=y(t1)+t;
    end
    for t3=1:length(locs2)
        kk=4*d*n_prp(locs2(t3))/wlp(locs2(t3));
        if mod(ceil(kk),2)==1
            t=(ceil(kk)-kk)^2;
        else
            t=(floor(kk)-kk)^2;
        end
        y(t1)=y(t1)+t;
    end
end
[miny,locy]=min(y);
thickness=x(locy)*wlp(locs1(1))/n_prp(locs1(1))/2

我自己写了一点,但写的不好,权当提示,如下:thinkness(double *spectrum)
{
double ref[2048];
double a[10]; //最小二乘拟合的系数a[10]
double dt[3]; //双精度实型一维数组,长度3,dt[0]返回拟和多项式与数据点误差的平方和
//dt[1]返回拟和多项式与数据点误差的绝对值之和,dt[2]返回拟和多项式与数据点误差绝对值的最大值

double d[9]; //对a[10]求导后得到的系数
for (int i=0;i<2048;i++)
{
ref[i]=(*(spectrum+i)-*(m_pdark+i))/(*(m_pwhite+i)-*(m_pdark+i));
}
hpir1(ref,m_wl,2048,a,10,dt);  //得到最小二乘拟合的系数a[10]

//对最小二乘拟合多项式求导

for (int i0=0;i0<9;i0++)
{
d[i0]=a[i0]*(9-1-i0);
}//************************************************************** double val[901]={0};
int j=0; double s=Polynomial_Root(d,8,200, 1100, 0.00005);  //求多项式的值
val[j]=s;
j++;  while(s!=0)
{
 s=Polynomial_Root(d,8,s+0.001,1100, 0.00005);
 val[j]=s;
 j++;
}  int k=0;  for (int ii=0;ii<901;ii++)
 {
 if (val[ii]!=0)
k++;
 }
 double length=k*val[0]/4;  return length;}

解决方案 »

  1.   

    比较困难,楼主你还是用matlab编译比较合适。
    光是"load dark.txt;"这一句改成c语言的话都要数十行以上的代码。
      

  2.   


    拿到不至于
    不过就怕调用了matlab的函数
    为什么不直接通过工具转一下?
      

  3.   

    好吧,现在比较简单地描述一下。
    dark[2048] white[2048]; data[2048];wl[2048]均为已知变量,要求做一个函数,
    double function(data[2048])
    {
     1. 对data[2048],wl[2048]j进行曲线拟合;
      2.求出曲线的所有峰值,

    就这样两个问题
    }