Dimension mismatch in defining a function for use in ode45

1 回表示 (過去 30 日間)
Isktaine
Isktaine 2012 年 8 月 8 日
Hi,
I'm solving a system of ODEs with ode45. I would like to have extra (non integrated) parameters out of the function as in here
However for my problem I need to pass in more information too. If I have:
function [dydx k] = myodesimple(x, y, flag, c)
k = x.^2 + y.^2;
dydx = x + k.*y + c;
I can solve using [x,y]=ode45('myodesimple',[0 0.5 1],[0.3]). Then I can use [dydx k]=myodesimple(x,y) to recover k for any x time steps and y solutions.
If I change the function to take in another scalar parameter, say c. I can still recover k after solving with using [x,y]=ode45('myodesimple',[0 0.5 1],[0.3],flag,0.08) by using [dydx k]=myodesimple(x,y,flag,c). The problem comes when trying to solve two equations in the function. If I introduce another eqn:
function [dydx k] = myodecomplex(x, y, flag, c)
k(1) = x.^2 + y(1).^2;
dydx(1) = x + k.*y(1) + c;
dydx(2) = x + (4.*c).*y(2);
k=k(1);
dydx=dydx';
Then ode45 will run with [x1,y1]=ode45('myodecomplex',[0 0.5 1],[0.3 0.2],[],0.08), so I can obtain solutions. However I can no longer obtain k (which should be a column vector). There seems to be something wrong with the dimensions of the vectors I am using but I cannot work out where! The error I get when trying [dydx k]=myodecomplex(x1,y1,flag,0.08) is
"??? In an assignment A(I) = B, the number of elements in B and I must be the same.
Error in ==> myodecomplex at 2
k(1) = x.^2 + y(1).^2;
Any ideas on how I can obtain k, having gained solutions?

採用された回答

Jan
Jan 2012 年 8 月 19 日
編集済み: Jan 2012 年 8 月 19 日
In your code x is a vector, such that:
x.^2 + y(1).^2;
is a vector also. Therefore it cannot be assigned to the scalar k(1). The expression k(1)' is meaningless, because k(1) is a scalar, which is not affected by a transposition. I guess, that you want k instead of k(1).
To pass parameters to the function, use anonymous functions as explained here: Answers: benefit of anonymous functions when using ODE45.

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeOrdinary Differential Equations についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by