Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

New to MATLAB?

Using 'solve' function in Simulink

Asked by Daniel Bronson

Daniel Bronson (view profile)

on 13 Nov 2013
Latest activity Commented on by Mikkel

Mikkel (view profile)

on 5 Sep 2014

I have a very non-linear equation that I need to solve during run-time of a Simulink simulation. I have been using the 'solve' function in normal scripts to solve for this. Unfortunately, I need this to be solved in run-time of the simulation.

I have tried to use an embedded Matlab function with the 'solve' function in the script. The problem is that it doesn't like 'syms' command used in conjunction with the 'solve' command. I have tried using the coder.extrinsic with the parameter, but it gives the error, "Undefined function or variable 'v'.... It doesn't seem to appreciate that I have declared 'v' as a syms in order for v to be solved for in the 'solve' function.

Has anyone successfully got the 'solve' function to work in a user-defined Matlab block in Simulink? I have raised this issue in front of a few dozen students at my University, and am interested in showing them a solution. Thank you!

For your ease, I have attached the simulation I am attempting to run. You can find the specific problematic block in the 'Velocity' block on the 'Top Level' file.

1 Comment

Walter Roberson

Walter Roberson (view profile)

on 13 Nov 2013

To check: would it be possible for you to do the solve() symbolically in MATLAB, and use matlabFunction() to generate parameterized MATLAB code, that you incorporate into Simulink ?

Daniel Bronson

Daniel Bronson (view profile)

Products

No products are associated with this question.

2 Answers

Answer by Azzi Abdelmalek

Azzi Abdelmalek (view profile)

on 13 Nov 2013
Accepted answer

Try Interpreted Matlab function block, formerly called Matlab function .

5 Comments

Mikkel

Mikkel (view profile)

on 9 Jun 2014

How did you do this? I have a simmelar problem but cannot get it working using the interpreted matlab function.. ? I do not get an error message but it simply wont accept my equation into the block. hence no result

Kaustubha Govind

Kaustubha Govind (view profile)

on 9 Jun 2014

Mikkel: Please specify the line that you are entering on the block.

Mikkel

Mikkel (view profile)

on 5 Sep 2014

Kaustubha: I'm now entering this

eval(solve(u(2)*cos(u(3)-u(4))-u(1)*cos(x-u(4)),x))

and it is being calculated, though extremely slow! is there a way to speed this up?

Azzi Abdelmalek

Azzi Abdelmalek (view profile)

Answer by Walter Roberson

Walter Roberson (view profile)

on 14 Nov 2013

If

P = .5*R*Cd*A*v^3 + Cr*M*g*v*cos(theta) + (M*g*v*sin(theta)

then

R*Cd*A/2 * v^3 + M*g*(Cr*cos(theta) + sin(theta))*v - P = 0

the solution is then

roots([R*Cd*A/2, 0, M*g*(Cr*cos(theta) + sin(theta)), -P])

Two of the roots might be imaginary.

0 Comments

Walter Roberson

Walter Roberson (view profile)

Contact us