C++ 编程,迭代法解方程,急求

用迭代法解方程 63x^3-114x^2-95x+42=0
在-1.0, 0.4和1.2三值附近的三个实根。

急求,三小时内完成有大量额外悬赏,求高手,跪谢

第一个办法比较简单,就是利用一元三次方程的求根公式,具体算法请参看关于一元三次方程的卡尔丹方法;

第二个办法是利用高斯-塞德尔迭代法把方程变形为:
x=(63x³-114x²+42)/95
把初始迭代值(即-1.0, 0.4和1.2三值)分别代入上述方程,得到一个近似x值,然后再把这个值回代入这个方程继续求解,重复进行这个运算,直至前后两次运算的差小于规定的误差值,就能得到近似值。

其它办法包括牛顿-拉夫逊法等等,不过我觉得上面的两个方法就足够了。追问

求程序谢谢

追答

好久没接触C++编程了,我用C来写吧,函数库定义之类的我就省略了,第二个办法编程比较容易,我只写第二个办法的主程序哈!(假设要求误差小于0.0001)

main()
{
float x,k,m,d;
int i;
scanf("%f",&x); /*这一步表示输入要求的x近似值*/
for(i=0;i0.0001) continue;
else break;
}
printf("方程的解为%f\n",k);
}

我这里没有调试环境,不知道这个程序有没有错,也不知道这个方法是不是收敛,只是给你的参考,其实最可靠的办法还是用牛顿法,编程一定要耐心调试,毕竟知道算法后需要大量的实际运算才能得到正确的结果!

温馨提示:内容为网友见解,仅供参考
第1个回答  2012-07-08
我只会牛顿法或者二分法。
不知道你想要的是哪个追问

牛顿法

追答

#include
#include

double f(double x)
{
return ((63*x-114)*x-95)*x+42;
}

double fp(double x)
{
double k = (63*3*x-114*2)*x-95;
double y = f(x);
return x - y/k;
}

int main()
{
int i;
double temp;
double base[3] = {-1, 0.4, 1.2};
for(i=0;i1e-7)
{
temp = fp(temp);
}
printf("%g 附近的根是 %g\n",base[i],temp);
}
}

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

C++编程:用迭代法解方程:X=4-2^X.求x?
从数学分析的方法可以知道这个方程不收敛;所以我们用等价的方程:x=lg(4-x)\/lg2 来乾迭代。代码如下(DEV CPP 4.9.9.2环境)include <cstdlib> include <iostream> include <math.h> using namespace std;int main(int argc, char *argv[]){ double ex=0.00001; \/\/控制精度 double t...

C++编写程序用牛顿迭代法求一元方程5x^3—3x^2+2x—8=0 在x=1.1附近...
_TCHAR* argv[]){double x = 1.1;while(fabs(5*x*x*x-3*x*x+2*x-8)>0.000001)x = x - (5*x*x*x-3*x*x+2*x-8)\/(15*x*x-6*x+2);cout<<"方程的解为"<<x<<endl;system("pause");return

迭代法求平方根,【c++】#include <iostream>
程序前面的定义语句就不解释了,关键是x=(x+a\/x)\/2的迭代部分。这里a应当是被开方数,x的初始值取多少都可以,然后带入这个式子进行运算。定义这个数列 A(n+1)=(A(n)+a\/A(n))\/2.(式子1)显然A(n)就是经过n次迭代后的值。然后可以再设B(n)=a^2-A(n)^2.这样B(n)就表示n次...

C++里面什么叫迭代法 迭代法初值怎么求
a\/2是在迭代法中自定义的x0的初值。用牛顿迭代法解方程,理论上初值可以是任意值。但是如果初值选得好,收敛得就快。当然程序所需要的内存更低,费时更少了。这条方程转换过来就是a=Xn(2Xn+1-Xn),求的就是a的平方根,无限迭代求近似值。这样的话,a的平方根的初值应该去什么?想一下不难得...

迭代法求平方根,【c++】#include <iostream>
x+a\/x)\/2;你可能比较有问题应该是在while里面,fabs的功能:求浮点数((x-a\/x)\/2)的绝对值,计算|((x-a\/x)\/2)|, 当((x-a\/x)\/2)不为负时返回((x-a\/x)\/2),否则返回-((x-a\/x)\/2);1e-7是精确值,循环条件是((x-a\/x)\/2)的绝对值不小于1e-7。算式是牛顿迭代法。

牛顿迭代法C++代码
牛顿迭代法求解一元三次方程在C++中,我们可以编写如下的代码来求解一元三次方程 ax^3 + bx^2 + cx + d = 0 的解。例如,对于方程 x^3 - 27 = 0,可以输入系数 a=1, b=0, c=0, d=-27,程序会输出一个解。cppcpp#include#includeusing namespace std;\/\/ 函数声明double diedai(...

用C++编程简单迭代法和史蒂芬孙迭代法和GAUSS列主消元法
列主元消元法解n元线形方程组:1、先把线形法程组写成增广矩阵的形式。2、应用列主元的方法,把增广矩阵转换成行阶梯矩阵。枚举k从0到equ – 1,当前处理的列为col(初始为0) ,每次找第k行以下(包括第k行),col列中元素绝对值最大的列与第k行交换。如果col列中的元素全为0,那么则处理col ...

利用牛顿迭代法求方程根的函数c++
int n);int main(){double x=0;while(fabs(fun1)>0.0000001)\/\/精度 x=x-(fun1)\/(fun1_);cout<<x<<endl;}double p(double x,int n){double s=1;for(;n>0;n--)s*=x;return s;} 第(2)问define e 2.718281828459#define fun2 x*pow(e,x)+p(x,5)*p(sin(x),3)...

在线急求迭代法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...

相似回答