📄 cpp1.cpp
字号:
#include "stdio.h"
//返回3*3行列式的值
double Determinant(double a11,double a12,double a13,
double a21,double a22,double a23,
double a31,double a32,double a33)
{
return a11*(a22*a33-a23*a32)-a12*(a21*a33-a23*a31)+a13*(a21*a32-a31*a22);
}
//函数将data[]数组中的n个数用最小二乘法拟合成y = a*x*x+b*x+c
//a,b,c分别为二次项,一次项,常数项的系数
//函数调用成功返回 1
int Fitting(double* DataX,double* DataY,int Num,double* a,double* b,double* c)
{
double x1,x2,x3,x4,right1,right2,right3;
double Denominator,aMolecular,bMolecular,cMolecular;
x1 = x2 = x3 = x4 = right1 = right2 = right3 = 0;
int loop;
for(loop = 0 ; loop < Num ; loop++)
{
x1 += DataX[loop];
x2 += DataX[loop]*DataX[loop];
x3 += DataX[loop]*DataX[loop]*DataX[loop];
x4 += DataX[loop]*DataX[loop]*DataX[loop]*DataX[loop];
right1 += DataX[loop]*DataX[loop]*DataY[loop];
right2 += DataX[loop]*DataY[loop];
right3 += DataY[loop];
}
Denominator = Determinant(x4,x3,x2,x3,x2,x1,x2,x1,Num);
if(Denominator==0)
return 0;
aMolecular = Determinant(right1,x3,x2,right2,x2,x1,right3,x1,Num);
bMolecular = Determinant(x4,right1,x2,x3,right2,x1,x2,right3,Num);
cMolecular = Determinant(x4,x3,right1,x3,x2,right2,x2,x1,right3);
*a = aMolecular / Denominator;
*b = bMolecular / Denominator;
*c = cMolecular / Denominator;
return 1;
}
//测试
int main()
{
double x[4] = {3,4,6,9};
double y[4] = {10,20,33,44};
double a,b,c;
Fitting(x,y,4,&a,&b,&c);
printf("%lf %lf %lf",a,b,c);
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -