您的位置:首页 > 编程语言 > MATLAB

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在变化,数值也在变化,每次都不能迭代完全。

      最开始我写的代码如下:

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。
  这样就解决了我的疑问,利用数组,当序号在改变的同时,相应的,序号所对应的值根据迭代公式的计算也在不停的变化。完成了一一对应。


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息