牛顿迭代法求多元方程近似根

夜空Sora 2018-03-03 01:40:34
问题. 牛顿迭代法求ax^3+bx^2+cx+d=0在1附近的根。(系数由用户自己输入)

因为此方法本身是数学问题这里不做讨论也无须讨论。进入我们编程的主题。

记住此法核心的公式:x = x0-f(x0)/f'(x0). 我们令x1=f(x0),x2=f'(x0),这样写起来简洁明了。

步骤: (1 ) 在1附近任意找一个实数作为x0的初始值,如此题,我们取x=1,让x0=x,即x0=1.

(2) 用初始值x0带入方程计算出f(x0)和f'(x0).即求出x1和x2;

(3) 带入上述核心公式计算出x = x0-f(x0)/f'(x0)的值。

(4) 用新产生的x替换原来的x0,为下一次迭代做准备。

(5) 若|x-x0|>=1e-5;则继续上述迭代,否则转(6).

(6) 所得x即为多远方程ax^3+bx^2+cx+d=0的根,输出。

代码如下:(经过VS2008测试无误 测试输入1,2,3,4 输出:-1.65)

#include<stdio.h>

#include<math.h>

double getRes(double a,double b,double c,double d){

doublex=1,x0,x1,x2;

do{

x0=x;

x1=a*x*x*x+b*x*x+c*x+d;

x2=3*a*x*x+2*b*x+c;

x=x0-x1/x2;

}while(fabs(x-x0)>=1e-5);

return x;

}

int main(){

doublea,b,c,d;

scanf("%lf,%lf,%lf,%lf",&a,&b,&c,&d);

printf("x=%.2lf\n",getRes(a,b,c,d));

return 0;

}
...全文
1234 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
flash_king 2020-05-22
  • 打赏
  • 举报
回复
引用 4 楼 <span style="color:#4788C7">JL_Xie</span>的回复:
应该会有四个解吧
<br />三个,说错了
flash_king 2020-05-22
  • 打赏
  • 举报
回复
应该会有四个解吧
赵4老师 2018-03-03
  • 打赏
  • 举报
回复
百度搜相关关键字。

70,035

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧