help-octave
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Octave ODE solver: inconsistent size for state and derivative vectors


From: Fabcap77
Subject: Octave ODE solver: inconsistent size for state and derivative vectors
Date: Fri, 13 Apr 2018 20:48:10 -0700 (MST)

I have the code to solve a problem of non-stationary heat transfer (no, this
is not homework, but the code is taken from a textbook), which requires
solving a set of ODEs with the Method of Lines, and goes as follows (I added
some diagnostic instructions):

%Problem P6_08A
clear, clc, format short g, format compact
 c_time = clock();
 r_time = r_time =
strjoin({num2str(c_time(4)),num2str(c_time(5)),num2str(c_time(6))}, ':');
 disp('Run starts at'); disp(r_time);
tspan = [0 10]; % Range for the independent variable 
y0 = [100.; 100.; 100.; 100.; 100.; 100.; 100.; 100.; 100.]; % Initial
values for the dependent variables 
%y0 = 100*ones(1000,1);
%- - - - - - - - - - - - - - - - - - - - - -
function dYfuncvecdt = ODEfun(Yfuncvec, t);
 disp('Inside ODEfun');
%Yfuncvec = 100*ones(9,1);
T2 = Yfuncvec(1); 
T3 = Yfuncvec(2); 
T4 = Yfuncvec(3); 
T5 = Yfuncvec(4); 
T6 = Yfuncvec(5); 
T7 = Yfuncvec(6);
T8 = Yfuncvec(7); 
T9 = Yfuncvec(8); 
T10 = Yfuncvec(9); 
 more off; 
 disp('Yfuncvec = '); disp(Yfuncvec);
alpha = .00002; 
deltax = .1;
T1 = 0; 
T11 = (4 * T10 - T9) / 3; 
dT2dt = alpha / (deltax ^ 2) * (T3 - (2 * T2) + T1); 
dT3dt = alpha / (deltax ^ 2) * (T4 - (2 * T3) + T2); 
dT4dt = alpha / (deltax ^ 2) * (T5 - (2 * T4) + T3); 
dT5dt = alpha / (deltax ^ 2) * (T6 - (2 * T5) + T4); 
dT6dt = alpha / (deltax ^ 2) * (T7 - (2 * T6) + T5); 
dT7dt = alpha / (deltax ^ 2) * (T8 - (2 * T7) + T6); 
dT8dt = alpha / (deltax ^ 2) * (T9 - (2 * T8) + T7); 
dT9dt = alpha / (deltax ^ 2) * (T10 - (2 * T9) + T8); 
dT10dt = alpha / (deltax ^ 2) * (T11 - (2 * T10) + T9); 
dYfuncvecdt = [dT2dt; dT3dt; dT4dt; dT5dt; dT6dt; dT7dt; dT8dt; dT9dt;
dT10dt]; 
end
%Solution of ODE set
 y = lsode("ODEfun", y0,tspan);
%
disp([y0 ODEfun(tspan(1),y0)]);
disp(' Variable values at the initial point ');
disp([' t    = ' num2str(tspan(1))]);
disp('           y                  dy/dt         ');
for i=1:size(y,2)
    disp([' Solution for dependent variable y' int2str(i)]);
    disp(['              t                  y' int2str(i)]);
    disp([t y(:,i)]);
    plot(t,y(:,i));
    title([' Plot of dependent variable y' int2str(i)]);
    xlabel(' Independent variable (t)');
    ylabel([' Dependent variable y' int2str(i)]);
    pause
end
%EOF

Trying to run the code returns an error:

error: ODEfun: A(I): index out of bounds; value 2 out of bound 1
error: called from:
error:   ODEfun at line 14, column 4
error: evaluating argument list element number 1
error:  $path/lines01_diff_eq.m at line 42, column 1

I posted this also on other forums, but nobody could help. I hope this is
the right place for asking.



--
Sent from: http://octave.1599824.n4.nabble.com/Octave-General-f1599825.html



reply via email to

[Prev in Thread] Current Thread [Next in Thread]