最小二乗法に関する課題がわかりません
Posted: 2007年1月28日(日) 16:51
どうもお世話になっております。
以前、学校で最小二乗法による一次式近似のプログラムを教わりました。
(↓こんな感じになりました)
#include <stdio.h>
#include <math.h>
#define NMAX 20
void main(void)
{
int i=0,n;
double xi=0,fi=0,xi2=0,xifi=0;
double data_x[NMAX],data_f[NMAX];
double a=0,b=0;
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%lf %lf",&data_x,&data_f);
}
for(i=0;i<n;i++){
xi+=data_x;
fi+=data_f;
xi2+=data_x*data_x;
xifi+=data_x*data_f;
}
a=(xi*fi-n*xifi)/(xi*xi-n*xi2);
b=(xi*xifi-fi*xi2)/(xi*xi-n*xi2);
printf("F(x)=%fx+(%f)\n",a,b);
}
さて、課題として、
入力されるデータ点を二次式で近似するための最小二乗法のプログラムを作成することになりました。
ある程度はわかるのですが、近似式をF(x)=a*x^2+b*x+cとしたときの係数a,b,cをどう求めるのか…。
どうぞよろしくお願いします。
以前、学校で最小二乗法による一次式近似のプログラムを教わりました。
(↓こんな感じになりました)
#include <stdio.h>
#include <math.h>
#define NMAX 20
void main(void)
{
int i=0,n;
double xi=0,fi=0,xi2=0,xifi=0;
double data_x[NMAX],data_f[NMAX];
double a=0,b=0;
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%lf %lf",&data_x,&data_f);
}
for(i=0;i<n;i++){
xi+=data_x;
fi+=data_f;
xi2+=data_x*data_x;
xifi+=data_x*data_f;
}
a=(xi*fi-n*xifi)/(xi*xi-n*xi2);
b=(xi*xifi-fi*xi2)/(xi*xi-n*xi2);
printf("F(x)=%fx+(%f)\n",a,b);
}
さて、課題として、
入力されるデータ点を二次式で近似するための最小二乗法のプログラムを作成することになりました。
ある程度はわかるのですが、近似式をF(x)=a*x^2+b*x+cとしたときの係数a,b,cをどう求めるのか…。
どうぞよろしくお願いします。