How to pass values from one ode to another ode?

1 次查看(过去 30 天)
I av to use the results of one ode(ode45) inside another ode... here is my code:
1st ode function
function dw=sd(t,w)
va=10;
vb=0;vc=0;
%MOMENT OF INERTIA IN PRINCIPAL AXIS
I1=27;
I2=17;
I3=25;
%DIFFERENTIAL EQUATIONS
dw(1,1)= ((I2-I3)/I1)*w(2)*w(3)+(va/I1);
dw(2,1)=((I3-I1)/I2)*w(1)*w(3)+(vb/I2);
dw(3,1)=((I1-I2)/I3)*w(1)*w(2)+(vc/I3);
function cal
[t,W]=ode45('sd',[tinit tfinal],[0;0;0]);
i av use the results of these in another ode function below
function dq=sk(t,q,w1,w2,w3)
dq(1,1)=0.5*(w3*q(2)-w2*q(3)+w1*q(4));
dq(2,1)=0.5*(-w3*q(1)+w1*q(3)+w2*q(4));
dq(3,1)=0.5*(w2*q(1)-w1*q(2)+w3*q(4));
dq(4,1)=0.5*(-w1*q(1)-w2*q(2)+w3*q(3));
end
function cal
[t,Q]=ode45('sk',[tinit tfinal],[0;1;0;0],W(:,1),W(:,2),W(:,3))
there s some error in passing as shown aabove
any suggestion pl?

回答(2 个)

ChristianW
ChristianW 2013-2-10
Write all equations in 1 function and make your state vector like this: 'x = [w;q]'. Tell me, if you need more details.

the cyclist
the cyclist 2013-2-10
When you call ode45() the second time, with the function 'sk', you are calling it with 4 input arguments, but I don't think you've got the input structure correct.
If you run your code after first having done
>> dbstop if error
you will see that your W(:,1) vector is being interpreted by ode45() as the options input.

类别

Help CenterFile Exchange 中查找有关 Programming 的更多信息

标签

Community Treasure Hunt

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

Start Hunting!

Translated by