
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 展开
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 展开
1个回答
展开全部
几个问题
首先,这应该是迭代法求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,
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |