Fsurf plot wrong when x coefficient is 0
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
Xinhua
am 21 Apr. 2019
Kommentiert: Star Strider
am 22 Apr. 2019
The script will produce graph like this
syms x y z u v
fsurf(214.90609811873839701574097069388 - 2.032409294075229574399388894873*v,v,u,[-200,+200],'FaceColor','red');
hold on
fsurf(2.5564704196832668259276033495553*y-14.255253156645956380543793784454+0.00000000000*x,[-200,+200],'FaceColor','green')
fsurf(256.06484646683490299896860383123 - 1.2578521595702952545440650237956*x,[-200,+200],'FaceColor','blue')
xlabel('X')
ylabel('Y')
zlabel('Z')
hold off
As you can see the green plane is wrong MatLab is treating y as x, despite the x coefficient is 0
0 Kommentare
Akzeptierte Antwort
Star Strider
am 21 Apr. 2019
The fsurf function cannot guess what you are thinking.
Try this version of your code:
syms x y z u v
f1(v) = 214.90609811873839701574097069388 - 2.032409294075229574399388894873*v;
f2(x,y) = 2.5564704196832668259276033495553*y-14.255253156645956380543793784454+0.00000000000*x;
f3(x) = 256.06484646683490299896860383123 - 1.2578521595702952545440650237956*x;
figure
fsurf(f1,v,u,[-200,+200],'FaceColor','red');
hold on
fsurf(f2,[-200,+200],'FaceColor','green')
fsurf(f3,[-200,+200],'FaceColor','blue')
hold off
xlabel('X')
ylabel('Y')
zlabel('Z')
view(-50,15)
Experiment to get the result you want.
2 Kommentare
Weitere Antworten (1)
Walter Roberson
am 21 Apr. 2019
When you construct an expression A*x + B*y + C with symbolic x and Y, and A is 0, then the symbolic engine does not deliberately hold on to the 0*x "just in case" you wanted to know later that X had been part of the equation at some point. Instead it simplifies it to B*y + C -- an expression with a single symbolic variable.
When you fsurf() an expression with a single symbolic variable, then fsurf() assumes that that symbolic variable is the independent variable, and it always puts the independent variable along the x axes. It does not look at the name of the symbolic variable. There is no difference between
syms x y u
fsurf(5*x + 2)
fsurf(5*y + 2)
fsurf(5*u + 2)
The only context in which it looks at the actual names of the variables is that it uses symvar() on the expression to order the variables, and symvar sorts the variables by name.
syms a b c
fsurf(5*a - 3 * b + 2) %a sorts first, it is the independent variable
fsurf(5*c - 3 * b + 2) %b sorts first, it is the independent variable
0 Kommentare
Siehe auch
Kategorien
Mehr zu Assumptions finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!