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

2 visualizzazioni (ultimi 30 giorni)
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];

Risposta accettata

Stephan
Stephan il 11 Ott 2019
Modificato: Stephan il 11 Ott 2019
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.

Più risposte (0)

Tag

Community Treasure Hunt

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

Start Hunting!

Translated by