2011-02-25 126 views
1

我试图使用牛顿拉夫逊迭代实现后向欧拉方案。我明白每次迭代都会进行初步猜测,计算残差并解决变化。在我的情况下,更改是德尔瓦。之后,我知道将值添加到w^m并在接下来的m次迭代中获得w的更新值。我知道在迭代继续时检查解决方案的收敛性。我遇到的问题是如何将时间步长dt实现为t = 0:Tmax/dt,其中Tmax是10.我对时间步进是如何进来感到困惑。我一直在试图找出一个尽管如此,任何帮助将不胜感激。谢谢!实现牛顿 - 拉夫逊迭代法

while Rw(m)>10^-6  % Convergence condition 
    drdw(m)=(1-2*dt+2*t(n+1)^2*w(m)*dt); 
    Dw(m)=Rw(m)\drdw(m); %Inverse 
    w(m+1)=w(m)+Dw(m); %Newton method 
    Rw(m+1)=(-(w(m)-v(1)-2*w(m)*dt+t(n+1)^2*w(m)^2*dt)); %New Residual value 
    if Rw(m+1)>10^-6 %Check on the level of convergence 
     m=m+1; 
    else 
     Rw=1; % I was thinking I should make the Residual 1 for the next time step. 
     break 

    end 

回答

0

东西是在有奇怪,一个第一顺序ODE是形式DY/DT = F(T,Y)的又你有W,V,T,m和n。

您正在计算在时间间隔(0,T)的溶液与恒定步长h的分区:

t0 = 0;  tk = hk;  tn = T 

对于本

Backward Euler

尝试执行牛顿法(如上所述使用while条件)来解决上述问题作为单独的函数,然后通过步骤

将其集成到您的欧拉3210

1至n其中n = Tmax/h。

+0

我应该提到,我试图通过首先线性化它来解决二阶ODE。这就是为什么我在等式中有R,W和m的原因。 v,t,n来自原始设置。 – ykmizu 2011-02-25 01:36:28