c语言牛顿迭代法的问题

compassur 2011-10-29 06:30:44
x1 为1
迭代公式 Xn+1=Xn-f(Xn)/f'(Xn)

当|Xn+1-Xn|<=1e-5时输出。

函数方程为

ax^3+bx^2+c^x+d=0

#include<stdio.h>
#include<math.h>

main()
{
double a,b,c,d,x,xi,ln,p,q;

printf("please input four integers : ");
scanf("%lf%lf%lf%lf",&a,&b,&c,&d);

x=1;
ln=log(c);
p=a*pow(x,3)+b*pow(x,2)+pow(c,x)+d;
q=3*a*pow(x,2)+2*b*x+(pow(c,x)*ln);
xi=x-p/q;
while(fabs(xi-x)>=(1e-5))
{
x=xi;
p=a*pow(x,3)+b*pow(x,2)+pow(c,x)+d;
q=3*a*pow(x,2)+2*b*x+(pow(c,x)*ln);
xi=x-p/q;
}
printf("%lf",xi);
system("pause");
}

输入1 3 5 2 的正确结果应该是 -0.546602
而我的程序运行结果是-3.196332
...全文
651 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
compassur 2011-10-30
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 kerbcurb 的回复:]
-5 ~ 5之间的图像
http://hi.csdn.net/space-978000-do-album-picid-961706-goto-down.html
局部放大
http://hi.csdn.net/space-978000-do-album-picid-961705-goto-down.html
[/Quote]

书上的题目错了,应该是c*x,,, 谢谢啦~
波杰克男 2011-10-29
  • 打赏
  • 举报
回复
不了解 围观 坐等高手
kerbcurb 2011-10-29
  • 打赏
  • 举报
回复
-5 ~ 5之间的图像
http://hi.csdn.net/space-978000-do-album-picid-961706-goto-down.html
局部放大
http://hi.csdn.net/space-978000-do-album-picid-961705-goto-down.html
kerbcurb 2011-10-29
  • 打赏
  • 举报
回复
在x = -5 ~ 5之间,|f'(x)| > 2, 牛顿法失效,你还是用二分法吧
kerbcurb 2011-10-29
  • 打赏
  • 举报
回复
x0 = -0.5
compassur 2011-10-29
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 kerbcurb 的回复:]
牛顿迭代法求根,要求在求根区间内|f'(x)|<1,否则迭代序列发散。

你以x0 = -0.9作为初始迭代值可能就对了,你的程序中迭代初始值是1,|f'(x)|>1,迭代序列发散,所以结果不对
[/Quote]

改完之后还是不行啊,,, 而且结果相同。
kerbcurb 2011-10-29
  • 打赏
  • 举报
回复
牛顿迭代法求根,要求在求根区间内|f'(x)|<1,否则迭代序列发散。

你以x0 = -0.9作为初始迭代值可能就对了,你的程序中迭代初始值是1,|f'(x)|>1,迭代序列发散,所以结果不对
编程点滴 2011-10-29
  • 打赏
  • 举报
回复
不懂,还是顶一下算了

70,024

社区成员

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

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