📄 nihe.c
字号:
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#define N 20
void input(double a[N],int n)
{
int i;
for(i=0;i<=n;i++)
{
scanf("%lf",&a[i]);
}
}
void gauss(double a[N][N+1],int p)
{
int i,j,k,m=0,n;
double t,s=0.0,ep;
n=p-1;
for(k=1;k<n;k++) //大循环
{
ep=a[k][k];
for(i=k;i<=n;i++)
{
if(fabs(a[i][k])>ep)
{
ep=fabs(a[i][k]);
m=i;
}
}
for(j=k;j<=n+1;j++)
{
t=a[m][j]; a[m][j]=a[k][j];a[k][j]=t;
} //换行
for(i=k+1;i<=n;i++)
{
a[i][k]=a[i][k]/a[k][k];
for(j=k+1;j<=n+1;j++)
{
a[i][j]=a[i][j]-a[i][k]*a[k][j];
}
a[i][k]=0;
}
}
printf("拟合后的多项式为: \n");
printf("f(x)= ");
a[n][n+1]=a[n][n+1]/a[n][n];
for(i=n-1;i>0;i--) //求根
{
for(j=i+1;j<=n;j++)
{
s=s+a[i][j]*a[j][n+1];
}
a[i][n+1]=(a[i][n+1]-s)/a[i][i];
s=0;
}
for(i=1;i<=n;i++)
{ k=i-1;
if(a[i][n+1]>0)
{
printf("%fX^%d+",a[i][n+1],k);
}
else if(a[i][n+1]<0)
{
printf("\b");
printf("%fX^%d+",a[i][n+1],k);
}
}
printf("\b");
printf("\n\n");
}
void nihe(double a[N],double b[N],int m,int n)
{
int i,j,k=0;
double A[N][N+1],S[N]={0},T[N]={0};
for(i=0;i<=n;i++)
{
for(k=0;k<=2*m;k++)
{
S[k]=S[k]+pow(a[i],k);
T[k]=T[k]+b[i]*(pow(a[i],k));
}
}
for(i=1;i<=m+1;i++)
{
for(j=1;j<=m+1;j++)
{
A[i][j]=S[i+j-2];
}
}
for(i=0;i<=m+2;i++)
{
A[0][i]=0;
A[i][0]=0;
A[i+1][m+2]=T[i];
}
gauss(A,m+2);
}
void main()
{
int n,type;
double x[N],y[N];
printf("请输入阶数:\n");
scanf("%d",&n);
printf("请输入x[N]:\n");
input(x,n);
printf("请输入y[N]:\n");
input(y,n);
AAA:printf("请选择拟和多项式的最高次数:(次数小于 0 时退出\n");
scanf("%d",&type);
if(type>=0)
{
nihe(x,y,type,n);
goto AAA;
}
else
exit(0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -