Codegen saying variable is constrained to being non-complex when it's defined as complex
29 views (last 30 days)
Show older comments
Any idea why I'd get this error:
The left-hand side has been constrained to be non-complex, but the right-hand side is complex. To correct this problem, make the right-hand side real using the function REAL, or change the initial assignment to the left-hand side variable to be a complex value using the COMPLEX function
When setting up my fields in coder I specifically put the variable as a complex variable. Do I need to explicitly put that in my code as complex? If so, how do I do that? Here is my line of code tripping the error:
yvec1(:,tic_ct) = DelayProfile .* (Fade1.Ix + 1i * Fade1.Qx);
Any ideas?
Accepted Answer
Fred Smith
on 24 May 2012
MATLAB Coder automatically renames variables. These two lines are actually constraining two separate variables.
yvec1 = complex(zeros(M,N),zeros(M,N));
yvec1 = zeros(Fade1.num_taps,tics);
If you delete the first line and replace the second line with this you should be set.
yvec1 = zeros(Fade1.num_taps,tics) + 0i;
Hope this helps.
Good luck.
3 Comments
Fred Smith
on 25 May 2012
MATLAB Coder treats "complex" as a type whereas MATLAB treats it as an attribute. After all, in generated C code, there is no natural way to make complex behave like an attribute.
More Answers (1)
Prateek Tiwari
on 1 Jun 2020
Hi erveryone, I need to post this question here, because no one responds to the question i have asked in the past. Sorry for that, but would appreciate if you can answer.
Hello everyone, I am having an issue with the interaction of matlab function block in the simulink with my model block. Below you can also find the picture.
I have created a matlab function with three inputs and 1 output. Since in the matlab function block, i have solved an differential equation, it has complex expressions in the form of for example .
(exp(sqrt(-a/b)))
This generates the output of complex data type from the function block. When passing this to the integrator which is the input to my plant, I cannnot run the simulink due to the error
"Cannot pass the complex value to non-complex location"
I tried chaning the data types of integrator, then the same thing happens to other blocks in the simulink.
I also tried using absolute values, which ofcourse gives real number, but turns out to be very large numbr and genrates high magnitude. I really need help in solving this issue.
Can anyone help me in this/
Thanks in advance.

0 Comments
See Also
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!