牛顿的插值法用C语言怎么编写怎么编啊?
答案:5 悬赏:60
解决时间 2021-02-11 20:49
- 提问者网友:刀枪不入
- 2021-02-11 08:40
牛顿的插值法用C语言怎么编写怎么编啊?
最佳答案
- 二级知识专家网友:你好陌生人
- 2021-02-11 10:10
#include <iostream.h>
#include <math.h>
void main()
{
char L;
do
{
double M[100][100];
double x[100],y[100];
double X=1,xx=0,w=1,N=0,P,R=1;
int n;
cout<<"请输入所求均差阶数:";
cin>>n;
for(int i=0;i<=n;i++)
{
cout<<"请输入x"<<i<<"的值:"<<endl;
cin>>x[i];
cout<<"请输入y"<<i<<"的值:"<<endl;
cin>>y[i];
M[i][0]=x[i];
M[i][1]=y[i];
}
for( int j=2;j<=n+1;j++)
{
for( i=1;i<=n;i++)
{
M[i][j]=(M[i][j-1]-M[i-1][j-1])/(M[i][0]-M[i-j+1][0]);
}
}
for(i=1;i<=n;i++)
{
cout<<"其"<<i<<"阶均差为:"<<M[i][i+1]<<endl;
}
cout<<"请输入x的值:x=";
cin>>xx;
for(i=0;i<n;i++)
{
X*=xx-x[i];
N+=M[i+1][i+2]*X;
P=M[0][1]+N;
}
cout<<"其函数值:y="<<P<<endl;
for(i=0;i<n;i++)
{
w*=xx-x[i];
R=fabs(M[n][n+1]*w);
}
cout<<"其截断误差:R="<<R<<endl;
cout<<endl<<"还想算其它插值吗?是请按'y'否则按'n'"<<endl;
cin>>L;
}while(L=='y');
}
#include <math.h>
void main()
{
char L;
do
{
double M[100][100];
double x[100],y[100];
double X=1,xx=0,w=1,N=0,P,R=1;
int n;
cout<<"请输入所求均差阶数:";
cin>>n;
for(int i=0;i<=n;i++)
{
cout<<"请输入x"<<i<<"的值:"<<endl;
cin>>x[i];
cout<<"请输入y"<<i<<"的值:"<<endl;
cin>>y[i];
M[i][0]=x[i];
M[i][1]=y[i];
}
for( int j=2;j<=n+1;j++)
{
for( i=1;i<=n;i++)
{
M[i][j]=(M[i][j-1]-M[i-1][j-1])/(M[i][0]-M[i-j+1][0]);
}
}
for(i=1;i<=n;i++)
{
cout<<"其"<<i<<"阶均差为:"<<M[i][i+1]<<endl;
}
cout<<"请输入x的值:x=";
cin>>xx;
for(i=0;i<n;i++)
{
X*=xx-x[i];
N+=M[i+1][i+2]*X;
P=M[0][1]+N;
}
cout<<"其函数值:y="<<P<<endl;
for(i=0;i<n;i++)
{
w*=xx-x[i];
R=fabs(M[n][n+1]*w);
}
cout<<"其截断误差:R="<<R<<endl;
cout<<endl<<"还想算其它插值吗?是请按'y'否则按'n'"<<endl;
cin>>L;
}while(L=='y');
}
全部回答
- 1楼网友:滚出爷的世界
- 2021-02-11 12:00
C++
我要学!
QQ523041704!!!!!
- 2楼网友:花一样艳美的陌生人
- 2021-02-11 11:54
#include<iostream.h>
main()
{
double e=0.000001;
int N=6;
int k=1;
double f(double d);
double ff(double d);
double a;
double x=1.5;
double y;
cout<<"Newton法迭代:"<<endl;
for(;k<=N;)
{
y=x-(f(x)/ff(x));
if((y-x)>0)
a=(y-x);
else
a=-(y-x);
if(a<e)
cout<<"X"<<k<<"="<<y<<endl;
k++;x=y;
}
return 0;
}
double f(double d)
{
return d*d*d+2*d*d+10*d-20;
}
double ff(double d)
{
return 3*d*d+4*d+10;
}
- 3楼网友:山鬼偶尔也合群
- 2021-02-11 11:35
楼上的不是用c语言吧,
我本来想帮你(当然我的C语言不是很差),不过我是个医生,我不懂牛顿的插值法是什么东东,无能为力。
- 4楼网友:无字情书
- 2021-02-11 11:20
程序代码如下。
希望能帮助到你!
牛顿插值法
#include<stdio.h>
#include<math.h>
#define n 4
void difference(float *x,float *y,int n)
{
float *f;
int k,i;
f=(float *)malloc(n*sizeof(float));
for(k=1;k<=n;k )
{
f[0]=y[k];
for(i=0;i<k;i )
f[i 1]=(f[i]-y[i])/(x[k]-x[i]);
y[k]=f[k];
}
return;
}
main()
{
int i;
float varx=0.895,b;
float x[n 1]={0.4,0.55,0.65,0.8,0.9};
float y[n 1]={0.41075,0.57815,0.69675,0.88811,1.02652};
difference(x,(float *
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯
• 手机登qq时,显示手机磁盘不足,清理后重新登 |
• 刺客的套装怎么选啊? |