C++ 编程,迭代法解方程,急求
用迭代法解方程63x^3-114x^2-95x+42=0在-1.0,0.4和1.2三值附近的三个实根。急求,三小时内完成有大量额外悬赏,求高手,跪谢...
用迭代法解方程 63x^3-114x^2-95x+42=0
在-1.0, 0.4和1.2三值附近的三个实根。
急求,三小时内完成有大量额外悬赏,求高手,跪谢 展开
在-1.0, 0.4和1.2三值附近的三个实根。
急求,三小时内完成有大量额外悬赏,求高手,跪谢 展开
展开全部
第一个办法比较简单,就是利用一元三次方程的求根公式,具体算法请参看关于一元三次方程的卡尔丹方法;
第二个办法是利用高斯-塞德尔迭代法把方程变形为:
x=(63x³-114x²+42)/95
把初始迭代值(即-1.0, 0.4和1.2三值)分别代入上述方程,得到一个近似x值,然后再把这个值回代入这个方程继续求解,重复进行这个运算,直至前后两次运算的差小于规定的误差值,就能得到近似值。
其它办法包括牛顿-拉夫逊法等等,不过我觉得上面的两个方法就足够了。
第二个办法是利用高斯-塞德尔迭代法把方程变形为:
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);
}
我这里没有调试环境,不知道这个程序有没有错,也不知道这个方法是不是收敛,只是给你的参考,其实最可靠的办法还是用牛顿法,编程一定要耐心调试,毕竟知道算法后需要大量的实际运算才能得到正确的结果!
展开全部
我只会牛顿法或者二分法。
不知道你想要的是哪个
不知道你想要的是哪个
追问
牛顿法
追答
#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);
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询