📄 程序.txt
字号:
/*(1)子函数原型
void ployfit (double x[],double y[],double Y[],double lamta[],double miu[],double omiga[],int n,int m)
double caclu (double a[],double b[],double omiga[],int n)
double f(double s[],double x,int k)
PRINT(double s[10][100],double a[100],double Y[],double lamta[],double miu[],double E,int m)
子函数 void ployfit() 用地推产生正交多项式系,即求 lamta和miu,并计算拟和多项式;
caclu () 计算点积;
f() 计算各阶正交多项式在x点的值
PRINT() 输出
(2) 形参和变量说明
符号参数n 指定数据点数,(m-1) 指定正交多项式最高阶数,omiga 权重系数;
形参 x[n],y[n],omiga[n] 由数据输入;
Y[m] 存储拟和多项式系数,s[100][100] 存储各阶正交多项式系数,S[100][100]存储正交多项式值。
lamta[100] 存储lamta miu[100] 存储miu E为误差*/
#include<stdio.h>
#include<string.h>
double caclu (double a[],double b[],double omiga[],int n)
{
double z;int i;
z=0;
for(i=0;i<n;i++)
z=z+a[i]*b[i]*omiga[i];
return z;
}
double f(double s[],double x,int k)
{
double y=0;
int i;
for(i=k-1;i>=0;i--)
y=y*x+s[i];
return y;
}
void PRINT(double s[100][100],double a[100],double Y[][100],double lamta[],double miu[],double E[],int m)
{ int ll,l;FILE *fp;
fp=fopen("结果.txt","w+");
fprintf(fp,"The result is:\n");
for(l=0;l<m;l++){
for(ll=0;ll<m;ll++)
fprintf(fp,"Y[%d][%d]=%lf\t",l,ll,Y[l][ll]);
fprintf(fp,"\n");
}
printf("\n");
for(ll=0;ll<m;ll++)
{ fprintf(fp,"The S(%d) is:\n",ll);
for(l=0;l<m;l++)
fprintf(fp,"%lf\n",s[ll][l]);}
fprintf(fp,"lamta\t\tmiu\t\ta\t\tE\n");
for(l=0;l<m;l++)
fprintf(fp,"%lf\t%lf\t%lf\t%lf\n",lamta[l],miu[l],a[l],E[l]);
}
double s[100][100],a[100],E[100];
void ployfit (double x[],double y[],double Y[][100],double lamta[],double miu[],double omiga[],int n,int m)
{
static double s1[100];
static double S[100][100],S1[100];
double d,d1,d2,b;
int k,i,j,l;
for(i=0;i<n;i++)
{
S[0][i]=1;
S1[i]=x[i];
}
s[0][0]=1.0;
d=caclu (S[0],S[0],omiga,n);
d2=caclu (S1,S[0],omiga,n);
E[0]=caclu (y,y,omiga,n);
s[1][0]=(-1)*d2/d;
s[1][1]=1.0;
s1[0]=0;
lamta[0]=0;
lamta[1]=d2/d;
miu[0]=0;
miu[1]=0;
for(k=1;k<=m;k++)
{
for(i=0;i<n;i++)
{
S[k][i]=f(s[k],x[i],k+1);
S1[i]=x[i]*S[k][i];
}
d1=caclu (S[k],S[k],omiga,n);
d2=caclu (S1,S[k],omiga,n);
b=caclu (y,S[k-1],omiga,n);
a[k-1]=b/d;
for(i=1;i<=k+1;i++)
{
s1[i]=s[k][i-1];
}
lamta[k+1]=d2/d1;
miu[k+1]=d1/d;
for(j=0;j<m;j++)
for(l=0;l<k;l++)
Y[k-1][j]+=a[l]*s[l][j];
for(i=0;i<=k+1;i++)
{
s[k+1][i]=s1[i]-lamta[k+1]*s[k][i]-miu[k+1]*s[k-1][i];
}
E[k]=E[k-1]-a[k-1]*a[k-1]*d;
d=d1;
}
PRINT(s,a,Y,lamta,miu,E,m);
}
double Y[100][100];
double lamta[100],miu[100];
void main()
{ static double x[100], y[100],omiga[100];
int i,n, m;
FILE * fp;
fp=fopen("原始数据.txt","r");
if(fp==NULL)
printf("Can not open file !") ;
fscanf(fp,"%d%d",&n,&m);
for(i=0;i<=n-1;i++)
fscanf(fp,"%lf%lf%lf",&x[i],&y[i],&omiga[i]);
fclose(fp);
ployfit(x,y,Y,lamta,miu,omiga,n,m);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -