關於VC的最小二乘法曲線擬合演算法問題

時間 2022-09-10 12:35:03

1樓:匿名使用者

給你2個作參考:

第一個:

//最小二乘法曲線擬合

typedef carraycdoublearray;

bool calculatecurveparameter(cdoublearray *x,cdoublearray *y,long m,long n,cdoublearray *a)

s[0]=-p*t[0]-q*b[0];

d2=0;

c=0;

g=0;

for(i=0;i=0;k--)

q=q*((*x)[i]-z)+s[k];

d2=d2+q*q;

c=(*y)[i]*q+c;

g=((*x)[i]-z)*q*q+g;

} c=c/d2;

p=g/d2;

q=d2/d1;

d1=d2;

(*a)[j]=c*s[j];

t[j]=s[j];

for(k=j-1;k>=0;k--) }

return true;

}第二個(這個比較全面)

#ifndef z_min2mul_h_

#define z_min2mul_h_

//defination

#include "stdlib.h"

#include "memory.h"

typedef void (* min2mul_fun)(long percent/* 當前任務完成的百分比*/);

class cmin2mul

cmin2mul()

//destruction

virtual ~cmin2mul()

private:

long m_m;

long m_n;

double* m_a,*m_b,*m_x,*m_normal/*法方程矩陣*/,*m_bnormal;

double m_error;

long m_iternum;

double * m_temp;

//min2mul_fun m_callback;

//opration

public:

void seta(long i,long j,double dvalue)

void setb(long i,double dvalue)

double getx(long i)

double* getxp()

void seterror(double error)

double geterror()

long getiternum()

void setab(long m,long n,double*a,double*b)

//解求 ax=b

long doaxb()

//解求 ax=b的最小二乘解

long domin2mul()

//construct normal metrix

//m_normal[i,j]=at[i,k]*a[k,j]=a[k,i]*a[k,j]

for(i=0;i*(m_normal+i*m_n+j)=t;

}}// bnormal[i]=at[i,k]*b[k]=a[k,i]*b[k]

for(i=0;i*(m_bnormal+i)=t;

}seidel(m_normal,m_x,m_bnormal);

free(m_normal);

free(m_bnormal);

m_bnormal=null;

m_normal=null;

return 1;

}//output

/* void print()

*/private:

void seidel(double *a,double*x,double*b)

else

}*(b+i)/=*(a+i*m_n+i);

*(a+i*m_n+i)=0.0;

}//do*(x+i)=t+*(b+i);

}++m_iternum;

}while(needmore(x));

}bool needmore(double* x)

return false;

}long allocallmemory()

void freeallmemory()

};#endif

2樓:魔高丈

以前寫過一個類似的軟體,你要嗎?

也不留個聯 系方法

呵呵,發給你了!

vc 最小二乘法曲線擬合,如何繪製出曲線?

看你的資料,50那個點可能測量不準如果用二次擬合是y 2305一次擬合是y 誤差自己算一下吧不好意思,有急事。開啟excel,先將來資料繪成線性圖,源然後在圖表中新增bai趨勢線,然後勾選du 顯zhi示公式,就可以dao擬合出資料的公式了。最小二乘法 又稱最小平方法 是一種數學優化技術。它通過最小...

怎樣使用excel計算最小二乘法

擊掌慶賀 設yi a bxi 將已知yi,xi列於excel表a,b列中例如yi位於a1 a10,xi位於b1 b10則可利用函式計算 斜率 slope a1 a10,b1 b10 截距 intercept a1 a10,b1 b10 怎樣用excel進行多元最小二乘法的計算? 1 將方程組輸入ex...

matlab用最小二乘法求一形如y t at b (a和b為待定係數)的多項式,使之與下列資料相擬合

宇逸 1.使用非線性最小二乘擬合函式lsqcurvefit擬合t 1 2 3 4 5 6 7 8 y 4.00 6.40 8.00 8.80 9.22 9.50 9.70 9.68 fun b,x x.b 1 x b 2 x0 0.1 0.1 b lsqcurvefit fun,x0,t,y 結果為...