在线急求迭代法C++求实根 谢谢了!

用牛顿迭代法求计算方程:f(X)=X的四次方+2*X的三次方-X-1=0在区间-2到1之间的所有实根!要求f(X)的绝对值小于10的负六次方
还有其他的解答不 ? 越多越好!各位c++高手们帮帮忙啊!急等要啊!

第1个回答  2009-04-03
1.
Newton法解非线形方程
还有Newton插值和迭代法解非线形方程,不知楼主要不要
#include <stdio.h>
#include <math.h>

#define F(X) X*X-2 //要解的方程
#define DF(X) 2.0*X //该方程的导数

static float VX[51],VY[51],VZ[51],VR[51];
static int MN= 51,RN=1;
static float EPS =1.0e-6;//精度
static float a=1.00,b=2,solution;//[a,b]解区间,

Operation()
{ int K;
float x;
if(F(a)>0) VX[0]=a;
else VX[0]=b;
VY[0]=F(VX[0]);
VZ[0]=DF(VX[0]);
VR[0]=b-a;
for(K=0;K<MN;K++)
{ x=VX[K]-VY[K]/VZ[K];
VX[K+1]=x;
VY[K+1]=F(x);
VZ[K+1]=DF(x);
VR[K+1]=fabs(VX[K+1]-VX[K]);
if(VR[K+1]<EPS) break;
}
RN=K+2;
return;
}
float P22_NTF(float e)
{ int k;
float eps=e;
float x0,x1,y,z;
if(F(a)>0) x0=a;
else x0=b;
for(k=0;k<100;k++)
{ y =F(x0);
z=DF(x0);
x1= x0-y/z;
if(fabs(x1-x0)<eps) break;
x0=x1;
}
return x1;
}

ShawResults()
{ int k;
printf("\n K X[K] Y[K] Z[K] R[K]");
printf("\n==================================================================");
for(k=0;k<RN;k++)
{ printf("\n%2d %15.8f%16.8e%16.8e%16.8e",k,VX[k],VY[k],VZ[k],VR[k]);}
printf("\n------------------------------------------------------------------");
printf("\n The Solution is %15.8f ,The EPS is %14.4e",solution,EPS);
printf("\n===================================================================");
getch();
return;
}

SaveResults()
{ FILE * fp;
int k;
fp=fopen("P22-NTF.htm","w");
if(!fp) return;
fprintf(fp,"<html><head></head>");
fprintf(fp,"<body bgcolor=#006699 text=#EEAA00>");
fprintf(fp,"<font size =\"6\"><pre>");

fprintf(fp,"\n K X[K] Y[K] Z[K] R[K]");
fprintf(fp,"\n==================================================================");
for(k=0;k<RN;k++)
{ fprintf(fp,"\n%2d %15.8f%16.8e%16.8e%16.8e",k,VX[k],VY[k],VZ[k],VR[k]);}
fprintf(fp,"\n------------------------------------------------------------------");
fprintf(fp,"\n The Solution is %15.8f ,The EPS is %14.4e",solution,EPS);
fprintf(fp,"\n===================================================================");

fprintf(fp,"</pre></font></body></html>");
fclose(fp);
return;
}

main()
{ Operation();
solution=P22_NTF(EPS);
ShawResults();
SaveResults();
}

2.
/*计算方法--牛顿切线法--yanfeng*/
/*书上第33页例题*/
/*注意:格式符%f默认输出小数点后6位数据,如果您要求的精度小于0.000001,
为保证数据正确输出,请修改源程序中格式符%m.nf的值*/
#include <stdio.h>
#include <math.h>

/*定义原函数,此函数必须满足使方程x=q(x)具有收敛性---22页定理*/
float f(float x)
{
float y;
y=(float)exp(x)*x-1;
return (y);
}

/*导数函数*/
float g(float x)
{
float y;
y=(float)exp(x)*(1+x);
return (y);
}

/*迭代函数*/
float s(float x)
{
float y;
y=x-(float)f(x)/g(x);
return (y);
}

/*迭代过程函数*/
void course(float X0,float e,int n)
{
float X1;
int k;

printf("迭代过程为:\n");
for(k=1;k<=n;k++)
{
if(g(X0)==0)
{
printf("Sorry,由于导函数的值为0,不能用牛顿切线法求解!\n");
break;
}
else
{
X1=s(X0);
printf("X%d=%f\n",k,X1);
if(fabs(X1-X0)<e)
{
printf("^_^,共迭代了%d次,所求方程的根X=%f\n",k,X1);
break;
}
else
{
if(k==n)
{
printf("Sorry,已达到最大迭代次数N,仍没有求出方程的根,\n可能是初值不合适或精度太高,请调整后再试!\n");
break;
}
else X0=X1;
}
}
}
}

void main()
{
float X0=0.5,e;
int n;
printf("牛顿切线法求方程的根\n\n");
printf("请输入所求实根的精度:e=");
scanf("%f",&e);
printf("请输入您所要求计算时的最大迭代次数N:n=");
scanf("%d",&n);
printf("\n");
course(X0,e,n);
}本回答被提问者采纳

C++ 编程,迭代法解方程,急求
第一个办法比较简单,就是利用一元三次方程的求根公式,具体算法请参看关于一元三次方程的卡尔丹方法;第二个办法是利用高斯-塞德尔迭代法把方程变形为:x=(63x³-114x²+42)\/95 把初始迭代值(即-1.0, 0.4和1.2三值)分别代入上述方程,得到一个近似x值,然后再把这个值回代入...

在线急求迭代法C++求实根 谢谢了!
1.Newton法解非线形方程 还有Newton插值和迭代法解非线形方程,不知楼主要不要 include <stdio.h> include <math.h> define F(X) X*X-2 \/\/要解的方程 define DF(X) 2.0*X \/\/该方程的导数 static float VX[51],VY[51],VZ[51],VR[51];static int...

c++ 迭代法求根号
第一个,你写的int main()最后要求返回一个int 第二个,x没有赋初值,应该是x=a\/2;y其实也应该赋初值,比如0 第三个,进入循环的条件应该是while(fabs(x-y)>1e-5),原程序正好反了,根本没有进入迭代过程 第四个,没有判断输入非负 include <cstdlib>#include <iostream>#include <cmath>...

C++用迭代法求根号下7654321的值
这个就可以了 用牛顿迭代法求根号的 原理很简单 我就不详细说了,输入一个任意数 可以输出其 根号值

想知道用C++怎么用迭代法求根号a,a是输入的
using namespace std;void main(){ float a,x,y;cout<<"please enter a number:";\/\/你居然把这个放到了cin的后面,然后还加了个endl,这些都是输出才可以用的 cin>>a;y=a\/2;do { x=y;y=(x+a\/x)\/2;} while (fabs(y-x)>1e-5);\/\/while后面的条件用括号括起来 cout<<"根号a...

C++用牛顿迭代法求根。方程为ax^3+bx^2+cx+d=0。系数a,b,c,d由主函 ...
牛顿迭代法的基本原理是,给定一个初始x0,做一条垂线与函数f(x)相交,得到的交点为(x0,y0),过该点在f(x)上作一条切线,得到该切线与x轴的交点为(x1, 0)。之后对(x1, 0)重复上述步骤,直到与x轴的交点的横坐标xn逐渐收敛到f(x)=0的根。也就是对于第i+1次迭代(i>=0),有下列等式...

牛顿迭代法求根C++
首先最常见的方法是二分法进行求值,这里主要注意精度,还有就是二分法的求值,但是这种方法有时候不满足题目给的时间复杂度的要求,那么需要一种新的方法来进行求值。所以这里给出牛顿迭代法:这里应该大学都知道,一个函数f(x) = x^3-y 的可以在坐标系上画出它的图。随便找一个曲线上的A点(为什么...

用牛顿迭代法求多项式的根(C\/C++语言)
用牛顿迭代法求多项式的根(C\/C++语言) 求x^3-1.8*x^2+0.15*x+0.65=0的解,有三个解,已知!我的程序是:#include<iostream.h>#include<math.h>#include<conio.h>constintN=200;\/\/带入原函数后所得的值doublef(floatx){ret... 求x^3-1.8*x^2+0.15*x+0.65=0的解,有三个解,已知!我的程序是:...

C++ 用函数 迭代法 求x=根号a
include<iostream.h>#include<math.h>double diedai(double m,double a);static double n;void main(){double a;cin>>a;cout<<diedai(a,a)<<endl;}double diedai(double m,double a){n=1.0\/2*(m+a\/m); \/\/1\/2=0 1.0\/2=0.5if(fabs(m-n)>1e-7)diedai(n,a);return ...

利用牛顿迭代法求方程根的函数c++
第(1)问代码如下 define fun1 5*p(x,9)+7*p(x,8)+10*p(x,7)+156*p(x,4)+89*p(x,3)+90*p(x,2)+101*x+50\/\/函数#define fun1_ 45*p(x,8)+56*p(x,7)+70*p(x,6)+156*4*p(x,3)+89*3*p(x,2)+180*p(x,1)+101\/\/导数#include<iostream>#include<cmath>using name...

相似回答
大家正在搜