C语言迭代程序改错

C语言 码拜 8年前 (2017-04-16) 1355次浏览
题目要求:
利用以下所示的简单迭代方法求方程cos(x)-x=0的一个实根。
迭代公式:
Xn+1=cos(Xn)
迭代步骤如下:
(1)取x1初值为0.0;
(2)令x0=x1;
(3)求指导得到x1=cos(x0),求出一个新的x1;
(4)若x0-x1的绝对值小于给定阈值d,则执行步骤(5),否则执行步骤(2);
(5)所求的x1就是方程cos(x)-x=0的一个实根,作为结果返回。
输入为一个小数,即阈值d,0<d<1。
输出迭代法算出的x值,保留2位小数。
本人的代码:
#include<stdio.h>
#include<math.h>
int main()
{
double x0,x1,d;
scanf(“%f”,&d);
x1=0.0;
do{
x0=x1;
x1=cos(x0);
}
while(fabs(x0-x1)<d);{
printf(“%.2f\n”,x1);
}
return 0;
}
不知该怎么样修改
解决方案

30

scanf(“%f”,&d);
改成
scanf(“%lf”,&d);

10

上面的迭代法到底是出了什么问题?编译错误?运行超时?还是运算结果不对?不知道题主所说的改错到底是指什么
通过简单画图分析可知,上述方程在[0,1]区间确实存在一个实数根,Xn+1-Xn=cos(Xn)-Xn=g(Xn),g(Xn)在区间[0,1]是一个减函数,g(0)>0,g(1)<0。可知假如g(Xn)大于0,则Xn+1>Xn,反之Xn+1<Xn,所以算法应该是能够收敛的。
假如得不到期望的结果,有可能是初始值或delta选取不当

5

迭代求根 cos(x) – x = 0,精确到小数点后6位:0.739085,测试:Mac OS 10.11.6, Xcode 7.3.1, C++
C语言迭代程序改错

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明C语言迭代程序改错
喜欢 (1)
[1034331897@qq.com]
分享 (0)