problem in using MATLAB solve functionality

1 Ansicht (letzte 30 Tage)
MingCheng Zhang
MingCheng Zhang am 22 Okt. 2020
Kommentiert: MingCheng Zhang am 26 Okt. 2020
Hi all,
I have three equations and three unknowns, and I want to use the matlab to solve the eqns for me, however, I realised that the matlab is not giving me a numeric solution. The output I get is just "x","y","z". The code is: (k1, k2, k3 are all known values), the data file is also attached.
syms x y z
path = cell2mat(struct2cell(load("D:\CP\map\MCTS\JPS\after_shortCut")));
k1 = ((path(2,2)-path(1,2))*(path(3,3)-path(1,3)))-((path(3,2)-path(1,2))*(path(2,3)-path(1,3)));
k2 = ((path(2,1)-path(1,1))*(path(3,3)-path(1,3)))-((path(3,1)-path(1,1))*(path(2,3)-path(1,3)));
k3 = ((path(2,1)-path(1,1))*(path(3,2)-path(1,2)))-((path(3,1)-path(1,1))*(path(2,2)-path(1,2)));
eqn1 = ((path(2,1)-path(1,1))*(x-path(1,1)))+((path(2,2)-path(1,2))*(y-path(1,2)))+((path(2,3)-path(1,3))*(z-path(1,3)));
eqn2 = k1*(x-path(1,1))+k2*(y-path(1,2))+k3*(z-path(1,3));
eqn3 = dot((path(2,:)'-path(1,:)'),(path(2,:)'-[x,y,z]'))/norm(path(2,:)'-path(1,:)')*norm(path(2,:)'-[x,y,z]')==dot((path(2,:)'-[x,y,z]'),(path(3,:)'-path(2,:)'))/norm(path(2,:)'-[x,y,z]')*norm(path(3,:)'-path(2,:)');
solve([eqn1 eqn2 eqn3],[x y z])

Akzeptierte Antwort

Walter Roberson
Walter Roberson am 22 Okt. 2020
There are no solutions for that.
You can solve the first two equations for x and y, and substitute that into the third equation. You will get something of the form
C*sqrt(A) = B/sqrt(A)
Multiply both sides by sqrt(A) to get C*A = B .
Then when you look at A you will see that it is the sum of three abs() and so must be real-valued (C is real valued), and that B has z in it that is not squared or abs() . Comparing the imaginary parts of the two sides we see that the imaginary part of the left side must be 0, and therefore the imaginary part of the right side must be zero. The B is linear in z, with no sqrt(), so the only way the imaginary parts can match is if imag(z) == 0.
So now knowing that z is real valued, we can simplify the equations -- the conj() drop out as you are dealing only with real values as their arguments. You end up with the quadratic equation
((196*z^2 - 196*z + 1949)*sqrt(38))/10 = 4*sqrt(14)*(z + 27)
so solve the quadratic equation... getting out two complex values for z. But we established earlier that z must be real-valued, not complex, because the left side must be real-valued.
We have arrived at a contradiction. Therefore no solution exists for the equations.

Weitere Antworten (0)

Produkte


Version

R2019b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by