📄 ʵ
字号:
#include <math.h>
#include <iostream.h>
const int N=50;
float x[N];
float y[N];
void input(int m)
{
for(int i=0;i<m;i++)
{
cout<<"x["<<i+1<<"]=";
cin>>x[i];
cout<<"y["<<i+1<<"]=";
cin>>y[i];
}
}
void main()
{
float *Approx(int,int);
int m;
cout<<"请输入节点个数:"<<endl;
cin>>m;
input(m);
float *a=Approx(m,2);
for(int i=0;i<=2;i++)
cout<<"a["<<i<<"]="<<a[i]<<endl;
}
float *Approx(int m,int n)
{
float *c,*a;
float power(int,float);
float *ColPivot(float *,int);
c=new float[(n+1)*(n+2)];
for(int i=0;i<=n;i++)
{
for(int j=0;j<=n;j++)
{
*(c+i*(n+2)+j)=0.0;
for(int t=0;t<m;t++)
*(c+i*(n+2)+j)+=power(i+j,x[t]);
}
*(c+i*(n+2)+n+1)=0.0;
for(j=0;j<m;j++)
*(c+i*(n+2)+n+1)+=y[j]*power(i,x[j]);
}
a=ColPivot((float *)c,n+1);
return a;
}
float *ColPivot(float *a,int n)
{
int i,j,t,k;
float *x,*c,p;
x=new float[n];
c=new float[n*(n+1)];
for(i=0;i<n;i++)
for(j=0;j<=n;j++)
*(c+i*(n+1)+j)=(*(a+i*(n+1)+j));
for(i=0;i<=n-2;i++)
{
k=i;
for(j=i+1;j<n;j++)
if(fabs(*(c+j*(n+1)+i))>(fabs(*(c+k*(n+1)+i))))
k=j;
if(k!=i)
for(j=i;j<=n;j++)
{
p=*(c+i*(n+1)+j);
*(c+i*(n+1)+j)=*(c+k*(n+1)+j);
*(c+k*(n+1)+j)=p;
}
for(j=i+1;j<n;j++)
{
p=(*(c+j*(n+1)+i))/(*(c+i*(n+1)+i));
for(t=i;t<n;t++)
*(c+j*(n+1)+t)=*(c+j*(n+1)+t)-p*(*(c+i*(n+1)+t));
*(c+j*(n+1)+n)-=*(c+i*(n+1)+n)*p;
}
}
for(i=n-1;i>=0;i--)
{
for(j=n-1;j>=i+1;j--)
(*(c+i*(n+1)+n))-=x[j]*(*(c+i*(n+1)+j));
x[i]=*(c+i*(n+1)+n)/(*(c+i*(n+1)+i));
}
delete []c;
return x;
}
float power(int i,float v)
{
float a=1.0;
while(i--)
a*=v;
return a;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -