基于差分方程的平方根求解程序异常问题咨询
平方根求解程序的问题与修复
问题说明
基于差分方程初始条件编写的平方根求解程序结果不符合预期,且循环次数超出设定——原本每个数值最多迭代2次(比如5的平方根经2次迭代应得到2.23左右),但实际输出6组结果,还未覆盖全部输入值。
原程序代码
N=4; S=[5 10 15 27 40]; %待求平方根的输入数组 y1=[2 3 4 5 6]; %初始条件 for i=0:1:1 for n=1:1:3 y1(n)=0.5*(y1(i+1)+(S(n)./y1(i+1))) end end
原命令窗口输出
y1 = 2.2500 3.0000 4.0000 5.0000 6.0000 y1 = 2.2500 3.3472 4.0000 5.0000 6.0000 y1 = 2.2500 3.3472 4.4583 5.0000 6.0000 y1 = 2.4205 3.3472 4.4583 5.0000 6.0000 y1 = 2.4205 3.1674 4.4583 5.0000 6.0000 y1 = 2.4205 3.1674 3.9516 5.0000 6.0000
问题根源
- 循环逻辑错误:外层循环
i=0:1:1执行2次,内层循环n=1:1:3执行3次,总计6次迭代,完全不符合“每个数值迭代2次”的要求。 - 迭代变量混乱:计算
y1(n)时依赖y1(i+1),而非当前元素的上一次迭代值,导致迭代流程偏离牛顿法的正确逻辑。 - 输入未全覆盖:内层循环仅处理前3个元素,S数组中的27、40未被迭代处理。
修复后的代码
针对每个输入元素,基于自身初始值独立完成指定次数(2次)的牛顿迭代:
S = [5 10 15 27 40]; %待求平方根的输入数组 y1 = [2 3 4 5 6]; %对应初始条件 iter_count = 2; %设定迭代次数 for k = 1:iter_count y1 = 0.5 * (y1 + S ./ y1); %所有元素同步迭代 disp(y1); %输出每次迭代结果 end
修复后输出
第一次迭代结果:
2.2500 3.1667 4.1250 5.2000 6.3333
第二次迭代结果:
2.2361 3.1623 3.8794 5.1962 6.3246
可见5的平方根经2次迭代后得到2.2361,符合预期,所有输入元素均完成指定次数的迭代。
内容的提问来源于stack exchange,提问作者Lily
相关产品推荐
相关产品推荐

