-
大小: 1.26MB文件類型: .rar金幣: 2下載: 0 次發(fā)布日期: 2023-11-13
- 語言: 其他
- 標(biāo)簽: 標(biāo)準(zhǔn)C??
資源簡介
Levenberg-Marquardt非線性最小二乘方法在一個(gè)二維位置參數(shù)擬合問題上的應(yīng)用

代碼片段和文件信息
#include?“l(fā)evernberg.h“
int?main()
{
//擬合數(shù)據(jù)
float?data[9]={0.250.511.523468};
float?obs[9]={19.2118.1515.3614.1012.899.327.455.243.01};
//擬合參數(shù)的初值
float?a0=10;
float?b0=0.5;
//y_init?=?a0*exp(-b0*data_1);
float?a_estb_est;
//a_est=1;b_est=1;
lm(dataobsa0b0&a_est&b_est);
printf(“%f?%f\n“a_estb_est);
return?0;
}
void?lm(float*?datafloat*?obsfloat?a0float?b0float*?a_estfloat*?b_est)//一定要記得函數(shù)的形參設(shè)置成指針,才能改變最終的值!
{
//數(shù)據(jù)維數(shù)?datasize
int?datasize=9;
//未知參數(shù)維數(shù)?parasize
int?parasize=2;
//迭代最大次數(shù)
int?n_iters=50;
//LM算法的阻尼系數(shù)初值
float?lamda=0.01;
//step1:?變量賦值
int?updateJ=1;
*a_est=a0;
*b_est=b0;//給出a0b0的初值
//step2:?迭代
float*?J=new?float[datasize*parasize];
float*?Jt=new?float[parasize*datasize];
float*?y_est=new?float[datasize];
float*?y_est_lm=new?float[datasize];
float*?d=new?float[datasize];
float*?d_lm=new?float[datasize];
float*?H=new?float[parasize*parasize];
float*?H_lm=new?float[parasize*parasize];
float*?H1=new?float[parasize*parasize];
float*?g=new?float[parasize*1];
float*?dp=new?float[parasize*1];
int?itij;
float?ee_lma_lmb_lm;
for(it=1;it<=n_iters;it++)
{
if(updateJ==1)
{
//根據(jù)當(dāng)前估計(jì)值,計(jì)算雅克比矩陣
for(i=0;i {
*(J+i*parasize+0)=exp(-(*b_est)*(*(data+i)));
*(J+i*parasize+1)=-(*a_est)*(*(data+i))*exp(-(*b_est)*(*(data+i)));
}
// J=[exp(-b_est*data_1(i))?-a_est*data_1(i)*exp(-b_est*data_1(i))];
//?根據(jù)當(dāng)前參數(shù),得到函數(shù)值
for(i=0;i {
*(y_est+i)=*a_est*exp(-(*b_est)*(*(data+i)));
}
//計(jì)算誤差
for(i=0;i {
*(d+i)=*(obs+i)-(*(y_est+i));
}
//計(jì)算(擬)海塞矩陣
transpose(JdatasizeparasizeJt);
multiplication(JtparasizedatasizeparasizeJH);
//若是第一次迭代,計(jì)算誤差
if(it==1)
{
e=dot(ddatasized);
}
}
//根據(jù)阻尼系數(shù)lamda混合得到H矩陣
for(i=0;i {
for?(j=0;j {
if?(i!=j)
{
*(H_lm+i*parasize+j)=*(H+i*parasize+j);
}
else
*(H_lm+i*parasize+j)=*(H+i*parasize+j)+lamda;
}
}
inv2(H_lmH1);
multiplication(Jtparasizedatasize1dg);
multiplication(H1parasizeparasize1gdp);
//依據(jù)步長更新ab
a_lm=*a_est+(*dp);
b_lm=*b_est+*(dp+1);
//計(jì)算新的可能估計(jì)值對應(yīng)的y和計(jì)算殘差e
for(i=0;i {
*(y_est_lm+i)=a_lm*exp(-b_lm*(*(data+i)));
}
for(i=0;i {
*(d_lm+i)=*(obs+i)-(*(y_est_lm+i));
}
e_lm=dot(d_lmdatasized_lm);
//根據(jù)誤差,決定如何更新參數(shù)和阻尼系數(shù)
if?(e_lm {
lamda=lamda/10;
*a_est=a_lm;
*b_est=b_lm;
e=e_lm;
updateJ=1;
}
else
{
updateJ=0;
lamda=lamda*10;
}
}
delete?[]?J;
J=NULL;
delete?[]?Jt;
Jt=NULL;
delete?[]?y_est;
y_est=NULL;
delete?[]?y_est_lm;
y_est_lm=NULL;
delete?[]?d;
d=NULL;
delete?[]?d_lm;
d_lm=NULL;
delete?[]?H;
H=NULL;
delete?[]?H_lm;
H_lm=NULL;
delete?[]?H1;
H1=NULL;
delete?[]?g;
g=NULL;
delete?[]?dp;
dp=NULL;
}
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件?????????74??2014-02-12?13:34??MyLM\1.txt
?????文件??????33280??2014-02-13?14:37??MyLM\Debug\MyLM.exe
?????文件?????408264??2014-02-13?14:37??MyLM\Debug\MyLM.ilk
?????文件?????617472??2014-02-13?14:37??MyLM\Debug\MyLM.pdb
?????文件???????1174??2014-02-13?14:37??MyLM\MyLM\Debug\cl.command.1.tlog
?????文件???????8470??2014-02-13?14:37??MyLM\MyLM\Debug\CL.read.1.tlog
?????文件????????460??2014-02-13?14:37??MyLM\MyLM\Debug\CL.write.1.tlog
?????文件??????39309??2014-02-13?14:37??MyLM\MyLM\Debug\levernberg.obj
?????文件??????????2??2014-02-13?14:37??MyLM\MyLM\Debug\li
?????文件??????????2??2014-02-13?14:37??MyLM\MyLM\Debug\li
?????文件??????????2??2014-02-13?14:37??MyLM\MyLM\Debug\li
?????文件??????????2??2014-02-13?14:37??MyLM\MyLM\Debug\li
?????文件??????????2??2014-02-13?14:37??MyLM\MyLM\Debug\li
?????文件??????????2??2014-02-13?14:37??MyLM\MyLM\Debug\li
?????文件??????????2??2014-02-13?14:37??MyLM\MyLM\Debug\li
?????文件??????????2??2014-02-13?14:37??MyLM\MyLM\Debug\li
?????文件??????????2??2014-02-13?14:37??MyLM\MyLM\Debug\li
?????文件??????????2??2014-02-13?14:37??MyLM\MyLM\Debug\li
?????文件??????????2??2014-02-13?14:37??MyLM\MyLM\Debug\li
?????文件??????????2??2014-02-13?14:37??MyLM\MyLM\Debug\li
?????文件??????????2??2014-02-13?14:37??MyLM\MyLM\Debug\li
?????文件??????????2??2014-02-13?14:37??MyLM\MyLM\Debug\li
?????文件??????????2??2014-02-13?14:37??MyLM\MyLM\Debug\li
?????文件??????????2??2014-02-13?14:37??MyLM\MyLM\Debug\li
?????文件??????????2??2014-02-13?14:37??MyLM\MyLM\Debug\li
?????文件??????????2??2014-02-13?14:37??MyLM\MyLM\Debug\li
?????文件??????????2??2014-02-13?14:37??MyLM\MyLM\Debug\li
?????文件??????????2??2014-02-13?14:37??MyLM\MyLM\Debug\li
?????文件??????????2??2014-02-13?14:37??MyLM\MyLM\Debug\li
?????文件??????????2??2014-02-13?14:37??MyLM\MyLM\Debug\li
............此處省略32個(gè)文件信息
評論
共有 條評論