How to plot a Vector Field from symbolic Matrix?

5 visualizaciones (últimos 30 días)
DJ Mac Farlane
DJ Mac Farlane el 17 de Abr. de 2017
Comentada: DJ Mac Farlane el 19 de Abr. de 2017
This code will be used to help me study Maxwell's equations using vector fields presented in Cylindrical Coordinates. I am a lowly Electronics Technician reviewing physics, so that I may one day have a shot at completing Electrical Engineering Curriculum when I return back to Engineering School one day. I have consulted with 3 of the best engineers that use MatLab from my work place, and none of them have experience with the symbolic package. I have tinkered more around this code over the Easter weekend, but I haven't presented any of my modified variants.
INPUT: "cyl" - A vector in cylindrical coordinates.
"A Cylindrical-to-Cartesian transformation matrix is specified called "trans".
OUTPUT: "rec" - rectangular coordinate obtained by matrix multiplication.
So far, it LOOKS like the matrix obtained is correct, but something is happening. A 2D plot is made, but the following error message is given:
error: set: invalid number of arguments error: called from _quiver_ at line 301 column 7 quiver3 at line 83 column 10
It seems to me like I am using the correct number of arguments, so I don't understand why there is a problem.
_____________MY CODE:_______________
clear
syms x y z phi(x,y) r(x,y,z) u v w trans cyl rec
phi = atan2(y,x);
r = sqrt(x.^2+y.^2);
trans = [cos(phi), -sin(phi), 0; sin(phi), cos(phi), 0; phi.*0, 0, 1];
cyl = [z ./ r;r; r.^2.*z];
rec = trans * cyl;
u = rec(1,1);
v = rec(2,1);
w = rec(3,1);
[x,y,z] = meshgrid([-1:.2:1]);
figure
quiver3(x,y,z,u,v,w)
  3 comentarios
DJ Mac Farlane
DJ Mac Farlane el 19 de Abr. de 2017
Editada: Andrew Newell el 19 de Abr. de 2017
I have found the answer. It looks like the key to converting a symbolic function to a form that is usable by quiver3 is by using function_handle() or equivalently, matlabFunction(). My corrected code is below:
clear
syms x y z
phi = atan2(y,x);
r = sqrt(x.^2+y.^2);
trans = [cos(phi), -sin(phi), 0; sin(phi), cos(phi), 0; phi.*0, 0, 1];
cyl = [z ./ r;r; r.^2.*z];
#cyl = [1 ./ r;0; 0];
rec = trans * cyl;
u = matlabFunction(rec(1,1));
v = matlabFunction(rec(2,1));
w = matlabFunction(rec(3,1));
[X,Y,Z] = meshgrid([-1:.5:1]);
figure
quiver3(X,Y,Z,u(X,Y,Z),v(X,Y,Z),w(X,Y,Z))
Andrew Newell
Andrew Newell el 19 de Abr. de 2017
Nicely done! Just for curiosity, what's with the hash marks? Is that the comment symbol on your machine? Normally it's a percent sign.

Iniciar sesión para comentar.

Respuestas (1)

Walter Roberson
Walter Roberson el 19 de Abr. de 2017
"pkg load" and use of # for comments tells us that you are using Octave rather than MATLAB.
  2 comentarios
Andrew Newell
Andrew Newell el 19 de Abr. de 2017
I guess there isn't an Octave Answers!
DJ Mac Farlane
DJ Mac Farlane el 19 de Abr. de 2017
I chose Octave as my weapon of choice for the high compatibility with MatLab, and having a better chance of finding documentation and help in the event that I get utterly stuck. If you guys like I can edit my code to reflect a MatLab compatible Script. I also have a Spherical Coordinate version, that takes in a spherical Vector Field, and then plots a Vector Field. I figure such an operation would be useful to allot of Physics and Engineering students. Would you guys like me to post this as well?

Iniciar sesión para comentar.

Categorías

Más información sobre Code Generation en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by