"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 次查看(过去 30 天)
显示 更早的评论
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 个评论
采纳的回答
Walter Roberson
2015-7-9
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 个评论
Walter Roberson
2015-7-16
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.
更多回答(1 个)
shulin hu
2018-10-28
编辑:Walter Roberson
2020-7-7
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 个评论
jose luis huayanay villar
2020-7-7
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
2020-7-7
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.
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Configure Simulation Conditions 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!