MATLAB Answers

Why does my code think I want to use the Symbolic Math Toolbox when in reality I want to solve a system of ODEs numerically?

조회 수: 3(최근 30일)
Augusto C
Augusto C 10 Dec 2019
Edited: Augusto C 10 Dec 2019
I'm using MATLAB 2016a. I have a function that is called from the code's driver function. The called function has a line to solve a system of ODEs using ode45:
global TIME
global TORQUE I %% TORQUE = [0 0 0]' and I = [1e-31 1e-31 1e-31]' initially.
%% The variables "spin", "axes" and "dt" below are passed from the driver function.
%%create one vector array that has the spin and axes
y = reshape([spin' axes],1,12); %% [spin' axes] is a 3 x 4 matrix
t0 = TIME - dt; %% Initially, TIME = dt = 5.1e-5
%% Compute initial slopes
yp(1) = (TORQUE(1) + y(2)*y(3)*(I(2)-I(3)))/I(1);
yp(2) = (TORQUE(2) + y(3)*y(1)*(I(3)-I(1)))/I(2);
yp(3) = (TORQUE(3) + y(1)*y(2)*(I(1)-I(2)))/I(3);
yp(4:6) = y(3)*y(7:9) - y(2)*y(10:12);
yp(7:9) = y(1)*y(10:12) - y(3)*y(4:6);
yp(10:12) = y(2)*y(4:6) - y(1)*y(7:9);
%% create function handle to euler, which contains ODEs
%% Set integration parameters
tmp={'RelTol' 'AbsTol' 'MinStep' 'MaxStep' 'NextStep' ...
'SafetyFactor' 'GrowthLimit' 'ShrinkLimit' 'FallBack'
1e-5 1e-8 .001*dt dt nan ...
0.9 5 0.1 'on'};
%% Call integrator
[t,y] = ode45(fun,[t0, t0 + dt],yp,params)
When I execute the code, it stops at the ode45 line and produces the following messages:
Screen Shot 2019-12-10 at 7.26.31 AM.png
Any insight into why this is happening would be appreciated.

  댓글 수: 0

로그인 to comment.

채택된 답변

Stephen Cobeldick
Stephen Cobeldick 10 Dec 2019
Stephen Cobeldick 님이 편집함. 10 Dec 2019
Take a look at these two lines:
%% create function handle to euler, which contains ODEs
euler is in the symbolic toolbox:
Based on your comment you seemed to think that you were calling another function.

  댓글 수: 1

Augusto C
Augusto C 10 Dec 2019
That was it! I hadn't realized "euler" was part of the Symbolic Toolbox. Those error messages are now gone. Thank you.

로그인 to comment.

More Answers (0)

이 질문에 답변하려면 로그인을(를) 수행하십시오.

Translated by