siyanger 发表于 2006-7-14 10:47

问题已解决!

下面是一个迭代求一个数的程序,怎么总是出错呢?帮忙看一下,谢谢了!
function diedai1()
%   1) 给定一个初值A1然后求误差R如果达到精度要求 A1即为所求的解否则转到2)
%   2)由公式求出A2=A1+DA1然后求误差R 如果达到精度要求 A2即为所求的解 否则再迭代即转到1)
A1=;% 给定一个初值
%如果误差很小达到精度要求就不要进行下面的迭代求解了否则进行迭代求解
K=1.5;
C=0.01;
M=1.0;
w=0.3;
F=w^2;
R=(A1+2*C*A1+K*A1-F);% 误差由给定一个初值A1求误差R如果达到精度要求 A1即为所求的解否则 迭代求解A2
%   迭代求解

while abs(R)>0.0001

KK=w^2*M+w*C+K;
RR=(w^2*M+w*C+K)*A1-F;%这里用A1有错吗
DA1=-KK\RR;
A2=A1+DA1   % 由公式求出A2=A1+DA1

R=(A2+2*C*A2+K*A2-F); %求误差R 如果达到精度要求 A2即为所求的解 否则再迭代即转到1)
A1=A2; % 这里有问题吗
end

[ 本帖最后由 siyanger 于 2006-7-15 21:28 编辑 ]

realyyy 发表于 2006-7-14 11:32

问题在于(w^2*M+w*C+K)*A1=F,所以RR=0,所以DA1=0,所以A2=A1,所以循环后R没有任何变化。
你需要修改一下DA1以及RR的修正公式。

siyanger 发表于 2006-7-14 13:59

谢谢你的回复!

问题解决了。我修改了其中的一个公式就行了。
谢谢你!!调程序真是件不容易的事啊!

[ 本帖最后由 mjhzhjg 于 2007-6-11 20:08 编辑 ]
页: [1]
查看完整版本: 问题已解决!