关于‘迭代法’?

overmars 2000-08-06 01:37:00
请问迭代法的迭代公式如何确定?初值如何确定?
最好能举个解方程的例子。
谢谢大家了。
...全文
182 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhou_hua_0911 2001-10-05
  • 打赏
  • 举报
回复
迭代法有很多公式,看具体条件而定.初值选取也不是固定的,是随意的.只要在区间[a,b]之间就行了.
Arter 2001-09-15
  • 打赏
  • 举报
回复
例如:
求a(a>=0)的平方根.g(x)=x^2-a
1.牛顿迭代法:
迭代函数:
f(x)=x-g(x)/(dg(x)/dx);
f(x)=(x+a/x)/2;
x[i+1]=f(x[i]);
2.Aitkin加速法:
f(x)=(x+a/x)/2;
x[n]=x[n-1]-(f(x[n-1])-x[n-1])^2/(f(f(x[n-1]))-2*f(x[n-1])+x[n-1])
比牛顿迭代法收敛速度更快!

选初值时应使:|df(x)/dx|<1,|df(x)/dx|越小收敛速度越快!
rwq_ 2001-09-14
  • 打赏
  • 举报
回复
在高程教材有一个例子,我转化过来了:
//求方程x*x*x*x-x*x*x-17x-25的近似根
#include <iostream.h>
#include <math.h>
double calculate(double x)
{

return (x*x*x*x-3*x*x-25)/17;
}
void main()
{
double x0,x1=0;
do
{
x0=x1;
x1=calculate(x0);
}while(fabs(x0-x1)>0.000000001);
cout<<"方程x*x*x*x-x*x*x-17x-25:的近似根:"<<x0<<endl;
//cout<<x0*x0*x0*x0-3*x0*x0-17*x0-25<<endl;
}
Larky 2000-08-10
  • 打赏
  • 举报
回复
迭代发!是一大类算法的实现方法!
更本没有什么初始值和公式确定方法!
就好像你要问我有道数学题怎么解一样!?
hoyle 2000-08-07
  • 打赏
  • 举报
回复
INITIALIZE
while (CONDITION)
{
FUNCTION
}

没有太多时间,临时写了一个示例:
下面是一个极简单的用二分法迭代求方程在某个区间上的根的例子
只对本方程及本求根区间适用。其他可做适当修改

double function(double x)
{
return x * x - 5 * x + 6.0;
}

int main(int argc, char* argv[])
{
double x1 = 1.5;
double x2 = 2.5;
double x;
double error = 0.0001;

if (function(x1) * function(x2) > 0)
printf("no root.");
else
do
{
x = (x1 + x2) / 2.0;

if (x2 - x1 < error)
break;
if (function(x) < 0.0)
x2 = x;
else
x1 = x;

} while(1);

printf("x^2 -5x + 6, root = %lf\n", x);
return 0;
}

输出结果:
x^2 - 5x + 6, root = 2.000031

33,006

社区成员

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

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