ode45 - nonscalar

1 view (last 30 days)
John Barr
John Barr on 6 Apr 2020
Answered: James Tursa on 6 Apr 2020
Does anyone know what's wrong with this code?
F(1) = @(X, T) -50*(X*(1-0.167*(1-X))^0.5 - 2.2*(1-X)/(exp(-11.02+11570/T))/(exp(-14.96+11070/T)+(exp(-1.331+2331/T))*(1-X))^2);
F(2) = @(X, T) -4.1*(T-673.2)+ 10200*(X(1-0.167*(1-X))^0.5 - 2.2*(1-X)/(exp(-11.02+11570/T))/(exp(-14.96+11070/T)+(exp(-1.331+2331/T))*(1-X))^2);
F = F';
initialconditions = [1, 673.2];
zspan = [0 1];
[X,T] = ode45(F, zspan, initialconditions);
I keep on getting the error "Nonscalar arrays of function handles are not allowed; use cell arrays instead." and I'm not sure what it refers to.
  2 Comments
madhan ravi
madhan ravi on 6 Apr 2020
Edited: madhan ravi on 6 Apr 2020
Isn’t this the same question that you asked previously? https://www.mathworks.com/matlabcentral/answers/515898-column-vector-nonscalar-arrays
John Barr
John Barr on 6 Apr 2020
It is not, no, it builds further on that question however.

Sign in to comment.

Answers (1)

James Tursa
James Tursa on 6 Apr 2020
I suppose you could do something like this instead:
F{1} = etc.
F{2} = etc.
F = F';
f = @(X,T)cell2mat(cellfun(@(c)c(X,T),F,'uni',false));
and then pass f to ode45( ).

Community Treasure Hunt

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

Start Hunting!