关于C语言while语句的问题。

[复制链接]
查看11 | 回复1 | 2011-7-10 09:59:14 | 显示全部楼层 |阅读模式
用迭代法求方程x=cosx的根,要求误差小于10的负6次方。
此方程没有解析根,只能通过迭代法等方法求数值根。步骤如下:
(1)使x1=0,x2=cosx1
(2)判x2-x1差的绝对值
#include
main()
{double x1,x2;
x1=0.0;
x2=cos(x1);
while(fabs(x2-x1)>1e-6)/*绝对值大于1e-6符合的执行x1=x2;x2=cos(x1);不是相当于在执行(1)吗?那这样不是与题目中要求“若x2-x1的绝对值小于10的负6次方,则执行x1=x2”相互矛盾吗?但结果我运行后确实是正确的x=0.739086 ,怎么回事呢?*/
{x1=x2;
x2=cos(x1);
}
printf("x=%f\n",x2);
}

回复

使用道具 举报

千问 | 2011-7-10 09:59:14 | 显示全部楼层
迭代法所得结果在一定次数之后单调收敛于方程的解,也就是说经过每次迭代,所得结果会更加接近方程的解。if语句条件中的x1,x2分别是最后2次迭代的结果。根据X(n+1)=COS Xn,可以证明当X(n+1)-Xn趋近于0时,Xn就趋近于方程的解。所以当If语句中条件成立时,就认为所得结果不够精确,因而继续迭代,直到条件不成立,就认为所得结果较为精确...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行