2017-10-18 7 views
0

暗黙のオイラーに関する質問があります。私は暗黙のオイラー法を計算する方法を知っていますが、私の問題はそれをDAE(差分代数方程式)でどのように使うかです。元のDAEでインデックス縮小を適用した後、正しい解を得たため、ODEを取得してから暗黙のオイラーを適用しました。ただし、DAEに暗黙のオイラーを導入することが課題でした。誰も私のコードを改善するためのヒントを教えてくれますのでDAEでも使えますか?ありがとう、私のコードを添付してください。ここでDAEの暗黙的/逆方向のオイラー

enter image description here

問題のために私のソリューションです:

[t,y]=beul('system','dsystem',[-1,1,-1],0,1,100); 
plot(t,y); 

function yp=system(t,y) 
yp(2)=y(1); % equations 
yp(3)=y(2); 
yp(1)=exp(-t); % after applying index reduction we obtain this 
end 

function y=dsystem(t,x) 
y(1,1)=-1; 
y(1,2)=0; 
y(1,3)=0; 
y(2,1)=0; 
y(2,2)=-1; 
y(2,3)=0; 
y(3,1)=0; 
y(3,2)=0; 
y(3,3)=-1; 


end 

function [t,y]=beul(f,df,y0,t0,tf,n) 
h=(tf-t0)/n; 
t=linspace(t0,tf,n+1); 
y=zeros(n+1,length(y0)); 
y(1,:)=y0; 
for i=1:n 
k0=y(i,:)'; 
k1=k0-inv(eye(length(y0))-h*feval(df,t(i),k0))*(k0-h*feval(f,t(i),k0)'-y(i,:)'); 
while (norm(k1-k0)>0.0001) % Newton evaluation 
k0=k1; 
k1=k0-inv(eye(length(y0))-h*feval(df,t(i),k0))*(k0-h*feval(f,t(i),k0)'-y(i,:)'); 
end 
y(i+1,:)=k1; 
end 
end 
+0

ソルバーはどのように自動的に機能しますか?暗黙的なオイラーの方程式を解くことができますか?つまり、x3 [k + 1] = - u3 [k + 1]、x2 [k + 1] =(x3 [k + 2] -x3 [k])/ (x2 [k + 1] -x2 [k])/ h」と入力方程式から自動的に導出されたものであるか? – LutzL

答えて

関連する問題