Error in ODE 45: MYODE must return a column vector.

조회 수: 2 (최근 30일)
Nancy Rodriguez
Nancy Rodriguez 2019년 10월 11일
편집: Stephan 2019년 10월 11일
I am trying to discretize a system of PDEs with a finite difference scheme and solve the resulting ODE system with ODE45:
PDE Solver code:
global N;global dx;
global a11; global a12; global a22; global a21;
a11=1;a12=1; a22=1;a21=1;
dx = .05;
X = -2:dx:2;
N = length(X);
tspan = [0 2];
u = ones(1,N);
v = 2*ones(1,N);
%Initial Data
%%
y0 = [u,v];
%%
% Solve ODE
[t,y] = ode45(@myODE, tspan, y0);
myODE code:
function dy = myODE(~,y)
global N;
global dx;
global a11; global a12; global a22; global a21;
u=y(1:N);
v = y((N+1):2*N);
du = zeros(size(u));
dv = zeros(size(v));
du(1) = (2*a11*(u(2)-u(1)))/(dx^2)+a12*(u(1)*v(2)-u(2)*v(1)-u(1)*v(1)-u(2)*v(2))/(dx^2);
dv(1) = 2*a22*(v(2)-v(1))/(dx^2)+a21*(v(1)*u(2)-v(2)*u(1)-v(1)*u(1)-v(2)*u(2))/(dx^2);
du(N) = 2*a11*(u(N-1)-u(N))/(dx^2)+a12*(u(N)*v(N-1)-u(N-1)*v(N)-u(N)*v(N)-u(N-1)*v(N-1))/(dx^2);
dv(N) = 2*a22*(v(N-1)-v(N))/(dx^2)+a21*(v(N)*u(N-1)-v(N-1)*u(N)-v(N)*u(N)-v(N-1)*u(N-1))/(dx^2);
for i=2:N-1
du(i) = a11*(u(i+1)-u(i)+u(i-1))/(dx^2)+a12*(u(i)*v(i+1)-u(i-1)*v(i)-u(i)*v(i)-u(i-1)*v(i-1))/(dx^2);
dv(i) = a22*(v(i+1)-v(i)+v(i-1))/(dx^2)+a21*(v(i)*u(i+1)-v(i-1)*u(i)-v(i)*u(i)-v(i-1)*u(i-1))/(dx^2);
end
dy = [du,dv];

채택된 답변

Stephan
Stephan 2019년 10월 11일
편집: Stephan 2019년 10월 11일
To solve this error make sure that dy is column vector.
dy = [du; dv]
could already solve the problem - but only if they are scalar valued ( I did not check) or are column vectors too.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Ordinary Differential Equations에 대해 자세히 알아보기

태그

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by