0
我有一個關於隱式歐拉的問題。我知道如何計算隱式歐拉方法,但我的問題是如何在DAE(微分代數方程)上使用它。在我的原始DAE上應用索引減少後,我獲得了正確的解決方案,因此我獲得了ODE,然後我應用了我的隱式Euler。然而,任務是在DAE上部署隱式Euler。任何人都可以給我一個關於如何提高我的代碼,以便它也適用於DAE的提示?非常感謝,請看我的代碼。隱式/反向歐拉DAE
這裏是我的問題的解決方案:
[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
求解器如何自動工作?你能否手動求解隱式歐拉方程,即'x3 [k + 1] = - u3 [k + 1],x2 [k + 1] =(x3 [k + 2] -x3 [k])/ h,x1 [k + 1] =(x2 [k + 1] -x2 [k])/ h'或者從輸入方程自動導出? – LutzL