大家请帮帮我,我在线等待

时间:2022-09-30 19:19:13
某函数y=f(x)的一组对应值如下,试用牛顿插值法求f(0.55)近似值。
K  0        1        2        3        4
X  0.5      0.6      0.7      0.8      0.9
Y  1.6487   1.8221   2.0138   2.2255   2.4596

程序如下:

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define MN 
 int FormProblem(double*X,double*Y,int MN)
 {int TableSize;
  TableSize=5;
  if(TableSize>=MN)return 0;
  X[0]=0.5;Y[0]=1.6487;
  X[1]=0.6;Y[0]=1.8221;
  X[2]=0.7;Y[0]=2.0138;
  X[3]=0.8;Y[0]=2.2255;
  X[4]=0.9;Y[0]=2.4596;
  return TableSize;
  }
 int RN=0;
 double X[MN],Y[MN],F[MN];
 int GetDQT(double*X,double*Y,double*F,int n)
 {int k,j;
 for(k=0;k<n;k++)F[k]=Y[k];
 for(k=1;k<n;k++)
 for(j=0;j<k;j++)
 F[k]=(F[k]-F[j])/(X[k]-X[j]);
 return 0;
 }
 double X[MN],Y[MN],F[MN],NB[MN],NT[MN];
 double X0,Y0;
 int GetDQT(double*X,double*Y,double*F,int N){...}
 double Operation(double x)
 {int k;
 double state=1.0,y=0;
 X0=x;
 or(k=0;k<RN;k++)
 {NB[k]=state;
 NT[k]=F[k]*NB[k];
 y+=NT[k];
 state*=x-X[k];
 }
 Y0=y;
 return Y0;
 }
 ShowTable(){...}
 mian()
 {double x,y;
 x=0.55;
 RN=FormProblem(X,Y,MN);
 if(RN>MN)return;
 GetDQT(X,Y,F,RN);
 y=Operation(x);
 ShowTable();
 getchar();
 return;
 }
出错,好象是定义的毛病,请各位一定尽快回复,帮小弟纠正错误...感谢

27 个解决方案

#1


????没人知道吗??不会吧

#2


mian?
or?
把出错的代码贴出来把

#3


昏啊,大哥们,帮帮我吧

#4


急啊,谁能帮帮我......海啸来了!!!!!!!!!!!

#5


可以重新给你编写吗?

#6


为什么?麻烦大哥运行下,我实在搞不懂了,应该是定义的问题

#7


原代码都不全的.报什么错误啊.

#8


我已经运行过了,错误太多了,我想你是出在算法和定义之中,所以我我想给你重新写一个

#9


谢谢了,重写一个吧,兄弟,谢谢了,我在线等待

#10


#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define MN

int FormProblem(double *X,double *Y,int MN)
{
int TableSize = 5;
if(TableSize > MN) return 0;
// {
// return 0;
// }
// if( TableSize > MN )
// {
// return 0;
// }
X[0]=0.5;
Y[0]=1.6487;
X[1]=0.6;
Y[0]=1.8221;
X[2]=0.7;
Y[0]=2.0138;
X[3]=0.8;
Y[0]=2.2255;
X[4]=0.9;
Y[0]=2.4596;
return TableSize;
}

int RN=0;
double X[MN],Y[MN],F[MN];

int GetDQT(double *X,double *Y,double *F,int n)
{
int k,j;
for(k=0;k<n;k++)
{
F[k]=Y[k];
}
for(k = 1; k < n; k++)
{
for(j = 0; j < k; j++)
{
F[k] = (F[k] - F[j]) / (X[k] - X[j]);
}
}
return 0;
}
double X[MN],Y[MN],F[MN],NB[MN],NT[MN];
double X0,Y0;

// 
//int GetDQT(double*X,double*Y,double*F,int N)
//{
// return 0; // lz&#163;&#172;&#179;&#204;&#208;ò&#214;&#170;&#181;&#192;&#196;&#227;...&#202;&#199;&#202;&#178;&#195;&#180;&#210;&#226;&#203;&#188;°&#161;
//}
double Operation(double x)
{
int k;
double state=1.0,y=0;
X0=x;
for(k=0;k<RN;k++)
{
NB[k] = state;
NT[k] = F[k]*NB[k];
y += NT[k];
state *= (x-X[k]);
}
Y0=y;
return Y0;
}
// &#213;&#226;&#192;&#239;&#181;&#196;&#186;&#175;&#202;&#253;&#202;&#199;&#202;&#178;&#195;&#180;°&#161;&#163;&#191; 
//ShowTable(){...}

int main(int argc, char * argv[])
{
double x,y;
x=0.55;
int RN = FormProblem(X,Y,MN);
if(RN > MN)
return 0;

GetDQT(X,Y,F,RN);
y = Operation(x);
// ShowTable();
// getchar();
system("pause");
return 0;
}

好多伪代码,

#11


????该怎么写啊

#12


你对于问题的叙述还不够清楚,能够说清楚点吗?

#13


能不能把代码全贴出来呀

#14


某函数y=f(x)的一组对应值如下,试用牛顿插值法求f(0.55)近似值。
K  0        1        2        3        4
X  0.5      0.6      0.7      0.8      0.9
Y  1.6487   1.8221   2.0138   2.2255   2.4596

就按照这个要求写啊,我写的是错误的,但我又找不到原因...所以求救啊

#15


晕呀
求问题不要偷赖呀
牛顿插值法我可记不得了

#16


就你贴出来的那个???你写的??
运行不出错才叫怪!

#17


朋友们,来点实际的,帮忙写写吧

#18


#define MN 
 int FormProblem(double*X,double*Y,int MN)
 {int TableSize;
  TableSize=5;
  if(TableSize>=MN)return 0;
  X[0]=0.5;Y[0]=1.6487;
  X[1]=0.6;Y[0]=1.8221;
  X[2]=0.7;Y[0]=2.0138;
  X[3]=0.8;Y[0]=2.2255;
  X[4]=0.9;Y[0]=2.4596;
  return TableSize;
  }

MN 应该有个具体值吧!

#19


按照你所给出问题应该是一个数据拟合问题,一般采用直线插值或抛物线插值法。而牛顿法一般用于已知函数的求解

#20


恩,朋友们,能写的就帮我写出来下吧,能改的就改下,非常感谢了,感谢

#21


mn 21

#22


没人写出来,晕

#23


下面是程序的简单实现:
#include<iostream>
#define N 4
using namespace std;
double NewtonInsert(double* x,double *y,double xx,int n)
{

double a[N][N];

for(int i=0;i<n;i++)
{
a[i][0]=y[i];
cout<<a[i][0]<<endl;
for(int j=1;j<=i;j++)
{
a[i][j]=(a[i][j-1]-a[i-1][j-1])/(x[i]-x[i-j]);
//cout<<"i="<<i<<","<<"j="<<j<<","<<a[i][j]<<endl;
}
}
double sum=y[0],v=1.0;
for(int i=1;i<=n;i++)
{
v*=(xx-x[i-1]);
//cout<<"v="<<v<<endl;
sum+=v*a[i][i];
//cout<<"sum="<<sum<<endl;
}

return sum;
}
void main()
{
double x[]={0.5,0.6,0.7,0.8,0.9};
double y[]={1.6487,1.8221,2.0138,2.2255,2.4596};
cout<<NewtonInsert(x,y,0.55,N)<<endl;
}

#24


#define MN 
 int FormProblem(double*X,double*Y,int MN)
问题就在这里了!MN应该是一个预定义宏吧?MN代表的内容是什么呢?而函数定义里的MN肯定会把MN宏覆盖!
这样的话类相似:
double X[MN],Y[MN],F[MN],NB[MN],NT[MN];
这样的定义,全部都是错误的!数组的成员个数一定是在编译时刻就决定了。而你的数组成员个数直到运行时刻才能确定。
不要依赖别人给你写现成的代码,对你一点好处都没有。如果想来csdn上偷懒,还是放弃这个念头。这里的高手们不是每天吃饱没事干在这里等着别人问问题。他们忙得很。在得到指点之后还使用自己的脑袋好好想想。谁也代替不了你!

#25


我已经给你写好了,你为什么不好好看看;

#26


#define MN 15    //--------------
int FormProblem(double X[MN],double Y[MN],int N) //-----
{ int TableSize;
  TableSize=5;
  if(TableSize>=N)return 0; 
  X[0]=0.5;Y[0]=1.6487;
  X[1]=0.6;Y[1]=1.8221;  //---------
  X[2]=0.7;Y[2]=2.0138;  //---------
  X[3]=0.8;Y[3]=2.2255;  //---------
  X[4]=0.9;Y[4]=2.4596;  //---------
  return TableSize;
  }
int RN=0;
double X[MN],Y[MN],F[MN];
int GetDQT(double X[MN],double Y[MN],double F[MN],int n) //---可不改---
 {int k,j;
 for(k=0;k<n;k++)F[k]=Y[k];
 for(k=1;k<n;k++)
 for(j=0;j<k;j++)
 F[k]=(F[k]-F[j])/(X[k]-X[j]);
 return 0;
 }
double // X[MN],Y[MN],F[MN], //-------
    NB[MN],NT[MN];
double X0,Y0;
//int GetDQT(double*X,double*Y,double*F,int N){...}
double Operation(double x)
 {int k;
 double state=1.0,y=0;
 X0=x;
 for(k=0;k<RN;k++)
 {NB[k]=state;
 NT[k]=F[k]*NB[k];
 y+=NT[k];
 state*=x-X[k];
 }
 Y0=y;
 return Y0;
 }
 ShowTable(){...}
int main() //-----------
 {double x,y;
 x=0.55;
 RN=FormProblem(X,Y,MN);
 if(RN>MN)return 1;
 GetDQT(X,Y,F,RN);
 y=Operation(x);
 ShowTable();
 getchar();
 return 0;
 }

#27


学习

#1


????没人知道吗??不会吧

#2


mian?
or?
把出错的代码贴出来把

#3


昏啊,大哥们,帮帮我吧

#4


急啊,谁能帮帮我......海啸来了!!!!!!!!!!!

#5


可以重新给你编写吗?

#6


为什么?麻烦大哥运行下,我实在搞不懂了,应该是定义的问题

#7


原代码都不全的.报什么错误啊.

#8


我已经运行过了,错误太多了,我想你是出在算法和定义之中,所以我我想给你重新写一个

#9


谢谢了,重写一个吧,兄弟,谢谢了,我在线等待

#10


#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define MN

int FormProblem(double *X,double *Y,int MN)
{
int TableSize = 5;
if(TableSize > MN) return 0;
// {
// return 0;
// }
// if( TableSize > MN )
// {
// return 0;
// }
X[0]=0.5;
Y[0]=1.6487;
X[1]=0.6;
Y[0]=1.8221;
X[2]=0.7;
Y[0]=2.0138;
X[3]=0.8;
Y[0]=2.2255;
X[4]=0.9;
Y[0]=2.4596;
return TableSize;
}

int RN=0;
double X[MN],Y[MN],F[MN];

int GetDQT(double *X,double *Y,double *F,int n)
{
int k,j;
for(k=0;k<n;k++)
{
F[k]=Y[k];
}
for(k = 1; k < n; k++)
{
for(j = 0; j < k; j++)
{
F[k] = (F[k] - F[j]) / (X[k] - X[j]);
}
}
return 0;
}
double X[MN],Y[MN],F[MN],NB[MN],NT[MN];
double X0,Y0;

// 
//int GetDQT(double*X,double*Y,double*F,int N)
//{
// return 0; // lz&#163;&#172;&#179;&#204;&#208;ò&#214;&#170;&#181;&#192;&#196;&#227;...&#202;&#199;&#202;&#178;&#195;&#180;&#210;&#226;&#203;&#188;°&#161;
//}
double Operation(double x)
{
int k;
double state=1.0,y=0;
X0=x;
for(k=0;k<RN;k++)
{
NB[k] = state;
NT[k] = F[k]*NB[k];
y += NT[k];
state *= (x-X[k]);
}
Y0=y;
return Y0;
}
// &#213;&#226;&#192;&#239;&#181;&#196;&#186;&#175;&#202;&#253;&#202;&#199;&#202;&#178;&#195;&#180;°&#161;&#163;&#191; 
//ShowTable(){...}

int main(int argc, char * argv[])
{
double x,y;
x=0.55;
int RN = FormProblem(X,Y,MN);
if(RN > MN)
return 0;

GetDQT(X,Y,F,RN);
y = Operation(x);
// ShowTable();
// getchar();
system("pause");
return 0;
}

好多伪代码,

#11


????该怎么写啊

#12


你对于问题的叙述还不够清楚,能够说清楚点吗?

#13


能不能把代码全贴出来呀

#14


某函数y=f(x)的一组对应值如下,试用牛顿插值法求f(0.55)近似值。
K  0        1        2        3        4
X  0.5      0.6      0.7      0.8      0.9
Y  1.6487   1.8221   2.0138   2.2255   2.4596

就按照这个要求写啊,我写的是错误的,但我又找不到原因...所以求救啊

#15


晕呀
求问题不要偷赖呀
牛顿插值法我可记不得了

#16


就你贴出来的那个???你写的??
运行不出错才叫怪!

#17


朋友们,来点实际的,帮忙写写吧

#18


#define MN 
 int FormProblem(double*X,double*Y,int MN)
 {int TableSize;
  TableSize=5;
  if(TableSize>=MN)return 0;
  X[0]=0.5;Y[0]=1.6487;
  X[1]=0.6;Y[0]=1.8221;
  X[2]=0.7;Y[0]=2.0138;
  X[3]=0.8;Y[0]=2.2255;
  X[4]=0.9;Y[0]=2.4596;
  return TableSize;
  }

MN 应该有个具体值吧!

#19


按照你所给出问题应该是一个数据拟合问题,一般采用直线插值或抛物线插值法。而牛顿法一般用于已知函数的求解

#20


恩,朋友们,能写的就帮我写出来下吧,能改的就改下,非常感谢了,感谢

#21


mn 21

#22


没人写出来,晕

#23


下面是程序的简单实现:
#include<iostream>
#define N 4
using namespace std;
double NewtonInsert(double* x,double *y,double xx,int n)
{

double a[N][N];

for(int i=0;i<n;i++)
{
a[i][0]=y[i];
cout<<a[i][0]<<endl;
for(int j=1;j<=i;j++)
{
a[i][j]=(a[i][j-1]-a[i-1][j-1])/(x[i]-x[i-j]);
//cout<<"i="<<i<<","<<"j="<<j<<","<<a[i][j]<<endl;
}
}
double sum=y[0],v=1.0;
for(int i=1;i<=n;i++)
{
v*=(xx-x[i-1]);
//cout<<"v="<<v<<endl;
sum+=v*a[i][i];
//cout<<"sum="<<sum<<endl;
}

return sum;
}
void main()
{
double x[]={0.5,0.6,0.7,0.8,0.9};
double y[]={1.6487,1.8221,2.0138,2.2255,2.4596};
cout<<NewtonInsert(x,y,0.55,N)<<endl;
}

#24


#define MN 
 int FormProblem(double*X,double*Y,int MN)
问题就在这里了!MN应该是一个预定义宏吧?MN代表的内容是什么呢?而函数定义里的MN肯定会把MN宏覆盖!
这样的话类相似:
double X[MN],Y[MN],F[MN],NB[MN],NT[MN];
这样的定义,全部都是错误的!数组的成员个数一定是在编译时刻就决定了。而你的数组成员个数直到运行时刻才能确定。
不要依赖别人给你写现成的代码,对你一点好处都没有。如果想来csdn上偷懒,还是放弃这个念头。这里的高手们不是每天吃饱没事干在这里等着别人问问题。他们忙得很。在得到指点之后还使用自己的脑袋好好想想。谁也代替不了你!

#25


我已经给你写好了,你为什么不好好看看;

#26


#define MN 15    //--------------
int FormProblem(double X[MN],double Y[MN],int N) //-----
{ int TableSize;
  TableSize=5;
  if(TableSize>=N)return 0; 
  X[0]=0.5;Y[0]=1.6487;
  X[1]=0.6;Y[1]=1.8221;  //---------
  X[2]=0.7;Y[2]=2.0138;  //---------
  X[3]=0.8;Y[3]=2.2255;  //---------
  X[4]=0.9;Y[4]=2.4596;  //---------
  return TableSize;
  }
int RN=0;
double X[MN],Y[MN],F[MN];
int GetDQT(double X[MN],double Y[MN],double F[MN],int n) //---可不改---
 {int k,j;
 for(k=0;k<n;k++)F[k]=Y[k];
 for(k=1;k<n;k++)
 for(j=0;j<k;j++)
 F[k]=(F[k]-F[j])/(X[k]-X[j]);
 return 0;
 }
double // X[MN],Y[MN],F[MN], //-------
    NB[MN],NT[MN];
double X0,Y0;
//int GetDQT(double*X,double*Y,double*F,int N){...}
double Operation(double x)
 {int k;
 double state=1.0,y=0;
 X0=x;
 for(k=0;k<RN;k++)
 {NB[k]=state;
 NT[k]=F[k]*NB[k];
 y+=NT[k];
 state*=x-X[k];
 }
 Y0=y;
 return Y0;
 }
 ShowTable(){...}
int main() //-----------
 {double x,y;
 x=0.55;
 RN=FormProblem(X,Y,MN);
 if(RN>MN)return 1;
 GetDQT(X,Y,F,RN);
 y=Operation(x);
 ShowTable();
 getchar();
 return 0;
 }

#27


学习