新手求教 C++算牛顿二乘法的根出现的问题

qq_41580767 2018-01-03 03:27:18
#include<iostream.h>
void main()
{
float x,x0,f,f1;
x=1;
do
{
x0=x;
f=x*x*x*x*x-3*x*x+1;
f1=5*x*x*x*x-6*x;
x=x0-f/f1;
}while(x-x0<0.000001);
cout<<"x="<<x<<endl;
}
我是这么写的,但是不知道为什么算不出结果,求大佬指教一下
...全文
350 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
cg111 2018-01-10
  • 打赏
  • 举报
回复
牛顿迭代法公式“
X(n+1)=X(n)-F'(Xn)/F"(Xn)
你的代码迭代公式不对
cg111 2018-01-10
  • 打赏
  • 举报
回复
[code=c] [#include<iostream.h> void main() { using namespace std; float x,x0,f,f1f2; x=1; do { x0=x; f=x*x*x*x*x-3*x*x+1; f1=5*x*x*x*x-6*x; f2=5*4*x*x*x-6 x=x0-f1/f2; }while(x-x0<0.000001); cout<<"x="<<x<<endl; }/code]
  • 打赏
  • 举报
回复
稍微改进一下: if (f1 == 0) x = x0 - (f + 0.0000001) / (f1 + 0.0000001); else x = x0 - f / f1; 说到底是你用的这公式造成的,也就这样了。
qq_41580767 2018-01-03
  • 打赏
  • 举报
回复
x = x0 - f / (f1 + 0.0000001); 改成这样后X=1.14286e+006 这是赋值上的问题吗
  • 打赏
  • 举报
回复
引用 3 楼 qq_41580767 的回复:
请问一下应该怎么改呢? 我之前用int定义的话 会出现我的cpp运行的时候会停止运行 但是用float double的话又什么结果都没有输出出来……
这应该是你用的公式导致的,可以把 x=x0-f/f1; 改成 x = x0 - f / (f1 + 0.0000001); 试试
paschen 2018-01-03
  • 打赏
  • 举报
回复
自己要把算法逻辑理清楚,必要时单步跟踪程序运行,观察程序流程及变量变化情况
qq_41580767 2018-01-03
  • 打赏
  • 举报
回复
请问一下应该怎么改呢? 我之前用int定义的话 会出现我的cpp运行的时候会停止运行 但是用float double的话又什么结果都没有输出出来……
  • 打赏
  • 举报
回复
第二次迭代的时候f1就成0了,所以 x=x0-f/f1;这里就出现除以0异常。
幻夢之葉 2018-01-03
  • 打赏
  • 举报
回复
如果没有输出任何东西,就是算法有问题,造成了死循环

69,336

社区成员

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

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