求:利用迭代法求非线性方程x^3-3x-1=0的三个实数根(∑=10^-8)的C程序 高人进啊~~~救命啊~~~

charlen 2005-05-13 10:33:28
最好能够分别用简单迭代法,牛顿迭代法,和快速弦截法编写
希望高人能够指点 谢谢~~~~
...全文
1982 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhang_jiang 2005-05-15
  • 打赏
  • 举报
回复
弦截法:
同牛顿迭代法一样, 使用x_(k+1)=x_k-f(x_k)/(f'(x_k))
但是求f'(x_k)的时候用差商来求. 即f'(x_k)=(f(x_k)-f(x_(k-1)))/(x_k-x_(k-1))
cuixiping 2005-05-14
  • 打赏
  • 举报
回复
干嘛那么复杂?高中不是有学过一元三次方程的根是有公式的吗?直接用公式可以了。
zhang_jiang 2005-05-14
  • 打赏
  • 举报
回复
加快收敛速度的牛顿下山法:
f(int x0)
{
int r;
int x, x1;

x1=x=x0;
do
{
r=1.0;
x1 = x - (x*x*x-3*x-1)/(3*x*x-3);
while(fabs(x*x*x-3*x-1)>fabs(x1*x1*x1-3*x1-1))
{
r/=2.0;
x1 = x - r*(x*x*x-3*x-1)/(3*x*x-3);
}
}while(fabs(x-x1)<1.0e-8);
}

另: 上面牛顿法中的while(abs(...)<1.0e-8) -> while(fabs(...)<1.0e-8)
zhang_jiang 2005-05-14
  • 打赏
  • 举报
回复
> 这样只能算出一个根来。牛顿迭代要先求出导函数表达式,根据导函数的正负应该可以预估3个初始解。
每次当然只能求一个根了, 要看你给的猜解在哪个范围, 以及它怎么收敛了.
zhang_jiang 2005-05-14
  • 打赏
  • 举报
回复
牛顿迭代法:
f(int x0)
{
int x, x1;

x = x0; // 自己给定猜解
do{
x1 = x - (x*x*x - 3*x -1)/(3*x*x-3);
}while(abs(x-x1)<1.0e-8); // 最后的x1就是解
}
NowCan 2005-05-14
  • 打赏
  • 举报
回复
这样只能算出一个根来。牛顿迭代要先求出导函数表达式,根据导函数的正负应该可以预估3个初始解。
zhang_jiang 2005-05-14
  • 打赏
  • 举报
回复
简单迭代:
x^3-3x-1=0
=> x = (3x + 1)^(1/3)
先假设一个解x0, 每次将x0代入上式右边, 求得左边的x, 然后比较x, x0,
若|x-x0|<10^(-8), 结束, 否则, x0<-x, 继续上面过程.

charlen 2005-05-14
  • 打赏
  • 举报
回复
谢谢各位的指点~
但有没有人能用快速弦截法编写一下啊~
谢谢

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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