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

5 Ansichten (letzte 30 Tage)
Nancy Rodriguez
Nancy Rodriguez am 11 Okt. 2019
Bearbeitet: Stephan am 11 Okt. 2019
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];

Akzeptierte Antwort

Stephan
Stephan am 11 Okt. 2019
Bearbeitet: Stephan am 11 Okt. 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.

Weitere Antworten (0)

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by