"Runtime Error: Call to MATLAB function aborted: Domain error. To compute complex results, make at least one input complex, e.g. 'power(complex(a),b)'."
27 views (last 30 days)
Show older comments
Lukasz Wieczorek
on 9 Jul 2015
Commented: Walter Roberson
on 7 Jul 2020
Hello, I'm trying to solve the following system in Simulink. I have some coder.extrinsic('intpolyval') into the Embeeded Matlab Function to deal with function handles I need to use while exchanging variables between functions, for instance:
function sol=intpolyval(coeff,minx,maxx)
sol=integral(@(x) polyval(coeff,x),minx,maxx);
end
While i try to run my model I get the error in debugger:
"Runtime Error: Call to MATLAB function aborted: Domain error. To compute complex results, make at least one input complex, e.g. 'power(complex(a),b)'."
This only happens when there is a loop in the Simulink model, while the model is simple- everything goes all right. Did anyone have similiar problems? How have u worked arround it?
0 Comments
Accepted Answer
Walter Roberson
on 9 Jul 2015
When there is a expression that might produce a complex result, the input signals for the calculation must be changed to Complex, or you must use complex() on the real signals that might produce a complex result. For example if you have sqrt() then if the input might go negative then you need to complex() the input before taking the sqrt.
I gather the error shows up at the time the need for a complex result is detected, so if you are not expecting the calculation to produce a complex result you may need to add debugging to see why it does produce such a result.
MATLAB silently transforms values to complex at need, but Simulink does not.
When you have a loop, Simulink has to solve the loop to establish the initial conditions for self-consistency because everything in one step has to be true simultaneously (if that is not needed for you then send your signal through a time delay so the rest of the calculation can be performed in the next step) . The result can include values outside the range you expect.
2 Comments
Walter Roberson
on 16 Jul 2015
You have a loop that probably does not take into account the time required to compute the result. Simulink needs to run the computations in such a way as to make everything for a single step true simultaneously. That can result in your inputs being different than you expect.
More Answers (1)
shulin hu
on 28 Oct 2018
Edited: Walter Roberson
on 7 Jul 2020
hello,have you solve it?I have the similar problem:
Call to matlab function aborted:Domain error,To compute complex results from real x,use 'log(complex(x))'
function y = fcn(u1,u2,t) %#codegen
if t>0.4
y=-2.875*t/log(1-(2.875*u1/u2));
end
2 Comments
jose luis huayanay villar
on 7 Jul 2020
hello,have you solve it?I have the similar problem:
An error occurred while running the simulation and the simulation was terminated
Caused by:
- Domain error. To compute complex results, make at least one input complex, e.g. 'power(complex(a),b)'.
Walter Roberson
on 7 Jul 2020
function y = fcn(u1,u2,t) %#codegen
if t>0.4
y=-2.875*t/log(complex(1-(2.875*u1/u2)));
end
The original code would have had problems when u1 > u2 / 2.875 so that the log() would have been of a negative number.
See Also
Categories
Find more on Configure Simulation Conditions in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!