matlab 循环结构设计习题
2014-04-13 19:46
519 查看
考虑以下迭代公式:
,其中a、b为正的常数。
(1)编写程序求迭代的结果,迭代的终止条件为
,迭代初值
=1.0,迭代次数不超过500次。
(2)如果迭代过程收敛于r,那么r的准确值是
,当(a,b)的值取(1,1)、(8,3)、(10,0.1)时,分别对迭代结果的准确值进行比较。
题目看完之后,我有一点一直不明白,就是怎么把x0以后每次改变的数值赋给xn,n在变化,数值也在变化,每次都不能迭代完全。
最开始我写的代码如下:
正如上面代码所示,每次都提示错误。如下图所示:
在请教过网上的朋友后,修改后的代码如下:
,其中a、b为正的常数。
(1)编写程序求迭代的结果,迭代的终止条件为
,迭代初值
=1.0,迭代次数不超过500次。
(2)如果迭代过程收敛于r,那么r的准确值是
,当(a,b)的值取(1,1)、(8,3)、(10,0.1)时,分别对迭代结果的准确值进行比较。
题目看完之后,我有一点一直不明白,就是怎么把x0以后每次改变的数值赋给xn,n在变化,数值也在变化,每次都不能迭代完全。
最开始我写的代码如下:
s=1; x0=1; a=input('请输入正数a:'); b=input('请输入正数b:'); r1=(-b+sqrt(b^2+4*a))/2; r2=(-b-sqrt(b^2+4*a))/2; if a<=0||b<=0 disp('输入错误!'); end while(s<=500) for xi=1:500 x(i+1)=a/(b+xi); if abs(x(i+1)-xi)<=0.0001 break; else xi=x(i+1); end end s=s+1; end
正如上面代码所示,每次都提示错误。如下图所示:
在请教过网上的朋友后,修改后的代码如下:
x(1)=1; a=input('请输入正数a:'); b=input('请输入正数b:'); r1=(-b+sqrt(b^2+4*a))/2; r2=(-b-sqrt(b^2+4*a))/2; if a<=0||b<=0 disp('输入错误!'); end for s=1:500 x(s+1)=a/(b+x(s)); if abs(x(s+1)-x(s))<=0.00001 break; end end
得到x是一个数组,第一个数是初值1。最后一个数是满足误差条件的结果,应该和r1或r2的值接近。中间的数是每一步迭代的结果。s最终的结果是迭代的次数,一般在500次以前,数列早就收敛了。而因为有初值,得到的数据x的长度等于s+1。
这样就解决了我的疑问,利用数组,当序号在改变的同时,相应的,序号所对应的值根据迭代公式的计算也在不停的变化。完成了一一对应。
相关文章推荐
- 第二章循环结构程序设计习题
- 9.6 MATLAB while循环结构
- 数据结构基础(12) --双向循环链表的设计与实现
- matlab学习笔记 循环结构详解
- 数据结构基础(7) --循环队列的设计与实现
- 数据结构课程设计_双向循环链表
- 关于C语言循环结构的一些习题
- matlab循环结构
- 数据结构基础(7) --循环队列的设计与实现
- 关于MATLAB入门的简单记录5 程序结构设计与C语言的区别
- 第四章 Matlab的循环结构
- 数据结构基础(7) --循环队列的设计与实现
- 程序设计基本结构----顺序、选择与循环
- [c++实验报告]第四次实验报告:循环结构设计
- 数据结构基础(7) --循环队列的设计与实现
- MATLAB循环结构:while语句P69范数待编
- 数据结构基础(11) --循环链表的设计与实现
- 程序设计基本结构(顺序、选择、循环)
- 数据结构基础(11) --循环链表的设计与实现
- Linux C---程序设计基本结构——顺序、选择与循环