matlab中迭代求解,求大神帮助,看看程序哪里错了?老是出现索引超出范围

clc;clear;x(1)=1;n=100fori=2:n;x(i+1)=x(i)/2+3/(2*x(i));ifabs(x(i+1)-x(i))>1e-14break... clc;clear;
x(1)=1;
n=100
for i=2:n;
x(i+1)=x(i)/2+3/(2*x(i));
if abs(x(i+1)-x(i))>1e-14
break;
end
end
展开
 我来答
yanglei5658
推荐于2016-10-31 · TA获得超过4756个赞
知道大有可为答主
回答量:835
采纳率:100%
帮助的人:553万
展开全部

几个问题

首先,这应该是迭代法求2的开方的,但是,判断退出的条件应该是相减小于1e-14,而不是大于。

   if abs(x(i+1)-x(i))>1e-14
        break;
    end

改成

   if abs(x(i+1)-x(i))<1e-14
        break;
    end


其次,x从1开始,但是i却从2开始,这样,计算x(3)会用到x(2),此时并没有计算出来,因此会错误。

for i=2:n;

改为

for i=i:n;


所以,整体程序为:

clc;clear;
x(1)=1;
n=100
for i=1:n;
    x(i+1)=x(i)/2+3/(2*x(i));
    if abs(x(i+1)-x(i))<1e-14
        break;
    end
end
x

结果为:

更多追问追答
追问
,谢啦!还有个问题:索引超出范围是什么情况,我明明输入的都是一个数字啊
追答
你的迭代应该从1开始,而不是2,
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式