資源簡介
最小二乘法曲線擬合C語言可執行代碼

代碼片段和文件信息
#include?“stdio.h“
#include?“stdlib.h“
#include?“math.h“
#include?“vector“
using?namespace?std;
struct?point
{
double?x;
double?y;
};
typedef?vector?doubleVector;
vector?getFileInf(char?*File);??//獲取文件數據
doubleVector?getCoeff(vector?sample?int?n);???//矩陣方程
void?main()
{
int?i?n;
char?*File?=?“樣本.txt“;
vector?sample;
doubleVector?Coef;
sample?=?getFileInf(File);
printf(“擬合階數n:“);
scanf(“%d“?&n);
Coef?=?getCoeff(sample?n);
printf(“\n擬合矩陣的系數為:\n“);
for(i=0;?i printf(“a%d?=?%lf\n“?i?Coef[i]);
}
//矩陣方程
doubleVector?getCoeff(vector?sample?int?n)
{
vector?matFunX;??//矩陣方程
vector?matFunY;??//矩陣方程
doubleVector?temp;
double?sum;
int?i?j?k;
//正規方程X
for(i=0;?i<=n;?i++)
{
temp.clear();
for(j=0;?j<=n;?j++)
{
sum?=?0;
for(k=0;?k sum?+=?pow(sample[k].x?j+i);
temp.push_back(sum);
}
matFunX.push_back(temp);
}
//正規方程Y
for(i=0;?i<=n;?i++)
{
temp.clear();
sum?=?0;
for(k=0;?k sum?+=?sample[k].y*pow(sample[k].x?i);
temp.push_back(sum);
matFunY.push_back(temp);
}
//矩陣行列式變換
double?num1?num2?ratio;
for(i=0;?i {
num1?=?matFunX[i][i];
for(j=i+1;?j {
num2?=?matFunX[j][i];
ratio?=?num2/num1;
for(k=0;?k matFunX[j][k]?=?matFunX[j][k]-matFunX[i][k]*ratio;
matFunY[j][0]?=?matFunY[j][0]-matFunY[i][0]*ratio;
}
}
//計算擬合曲線的系數
doubleVector?coeff(matFunX.size()?0);
for(i=matFunX.size()-1;?i>=0;?i--)
{
if(i==matFunX.size()-1)
coeff[i]?=?matFunY[i][0]/matFunX[i][i];
else
{
for(j=i+1;?j matFunY[i][0]?=?matFunY[i][0]-coeff[j]*matFunX[i][j];
coeff[i]?=?matFunY[i][0]/matFunX[i][i];
}
}
return?coeff;
}
//獲取文件數據
vector?getFileInf(char?*File)
{
int?i=1;
vector?dst;
FILE?*fp?=?fopen(File?“r“);
if(fp==NULL)
{
printf(“Open?file?error!!!\n“);
exit(0);
}
point?temp;
double?num;
while(fscanf(fp?“%lf“?&num)!=EOF)
{
if(i%2==0)
{
temp.y?=?num;
dst.push_back(temp);
}
else
temp.x?=?num;
i++;
}
fclose(fp);
return?dst;
}
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2015-07-31?09:16??最小二乘法曲線擬合\
?????目錄???????????0??2015-07-30?22:11??最小二乘法曲線擬合\Debug\
?????文件???????66560??2015-07-31?09:14??最小二乘法曲線擬合\Debug\vc60.idb
?????文件???????86016??2015-07-30?22:11??最小二乘法曲線擬合\Debug\vc60.pdb
?????文件???????79314??2015-07-30?22:11??最小二乘法曲線擬合\Debug\曲線擬合.obj
?????文件??????254032??2015-07-30?22:11??最小二乘法曲線擬合\Debug\最小二乘法曲線擬合.exe
?????文件??????607004??2015-07-30?22:11??最小二乘法曲線擬合\Debug\最小二乘法曲線擬合.ilk
?????文件?????1164960??2015-07-30?20:39??最小二乘法曲線擬合\Debug\最小二乘法曲線擬合.pch
?????文件??????730112??2015-07-30?22:11??最小二乘法曲線擬合\Debug\最小二乘法曲線擬合.pdb
?????文件????????2441??2015-07-30?22:11??最小二乘法曲線擬合\曲線擬合.cpp
?????文件????????4420??2015-07-30?20:39??最小二乘法曲線擬合\最小二乘法曲線擬合.dsp
?????文件?????????544??2015-07-30?20:39??最小二乘法曲線擬合\最小二乘法曲線擬合.dsw
?????文件???????41984??2015-07-31?09:16??最小二乘法曲線擬合\最小二乘法曲線擬合.ncb
?????文件???????48640??2015-07-31?09:16??最小二乘法曲線擬合\最小二乘法曲線擬合.opt
?????文件?????????270??2015-07-31?09:14??最小二乘法曲線擬合\最小二乘法曲線擬合.plg
?????文件??????????61??2015-07-30?20:41??最小二乘法曲線擬合\樣本.txt
?????文件??????????47??2015-07-30?20:57??最小二乘法曲線擬合\樣本1.txt
- 上一篇:DEC6713 GPIO例程
- 下一篇:激光雷達點云地平面校準 地面分割
評論
共有 條評論