matlab 循环结构设计习题

来源:互联网 发布:淘宝刷好评兼职要会费 编辑:程序博客网 时间:2024/06/04 20:09

考虑以下迭代公式:,其中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('输入错误!');endwhile(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      ends=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。
       这样就解决了我的疑问,利用数组,当序号在改变的同时,相应的,序号所对应的值根据迭代公式的计算也在不停的变化。完成了一一对应。

  

0 0
原创粉丝点击