MATLAB Answers


'Domain error. To compute complex results from real x, use 'acos(complex(x))' error in matlab?

Najmeh Eskandari さんによって質問されました 2018 年 8 月 11 日
最新アクティビティ Moussa LABBADI さんによって コメントされました 2019 年 8 月 7 日 18:20
hi.i want to simulate ur10 inverse kinematic and I did it.while running there is this error:
Domain error. To compute complex results from real x, use 'acos(complex(x))
how can I fix it?
the error is general and I don't know which line should be changed. there are several acos in the code .
X is the endeffector position and it can not be complex.
I have attached the Simulink file.

  2 件のコメント

Change them all.
Unfortunately, "changing them all" wouldn't help in this case.
It actually doesn't have to do with the input being complex, but rather the input being outside the real valued range [-1,1] of the cos function.
Refer to my Answer below.

サインイン to comment.

1 件の回答

回答者: Sebastian Castro
2018 年 8 月 13 日
編集済み: Sebastian Castro
2018 年 8 月 13 日

Hi Najmeh,
If you supply a value greater than 1 or smaller than -1 to the acos function, you get a complex number. Simulink seems to be complaining about that in your code.
Theta5=acos(argumancos5);%negetive or positive answer?
Seems like at the very first time step, argumancos5 is exactly 1, but due to numerical issues, it's actually slightly higher than 1 which leads to your error. Computing the value argumancos5 - 1 gives me 3.1086e-15... so it's just outside the range in which the cosine is real-valued.
I limited the value of this input to the range [-1, 1] and it seems to have fixed the error:
argumancos5 = max(min(argumancos5,1),-1);
Theta5=acos();%negetive or positive answer?
- Sebastian

  5 件のコメント

Right, so we established the error was because passing a value outside the range [-1,1] produces a complex output to acos... so you shouldn't need to pass in complex(x) if you ensure your inputs are bounded.
If the errors are large, my guess is you need to debug your code and make sure it's correct!
Hey Najmeh,
Were you able to resolve this issue?
I'm currently simulating the inverse kinematics of the UR5 and facing the same problem.
Any help would be appreciated.
Thank you.

サインイン to comment.

Translated by