Plot returning all zeros
3 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Tanner
el 30 de Mzo. de 2015
Comentada: Star Strider
el 30 de Mzo. de 2015
Hi, I'm not the most experienced Matlab user, and I'm trying to plot 2 functions as a function of a variable from 0 to 360 degrees. When I type in a value for t2. Apo4x and Apo4y return values. The problem is when I set t2 to a range of values, Apo4x and Apo4y return 0 for every iteration.
Below is my code.
a=1; b=4; c=8; d=1.3; k=0.3; g=5;
t2dot=10;
t2ddot=0;
t2=(pi/180)*[0:5:360]
t4=atan2(a*sin(t2)+k, a*cos(t2)+d);
f=(a*cos(t2)+d)/cos(t4);
A=[f*sin(t4),-cos(t4);-f*cos(t4),-sin(t4)];
B=[t2dot*a*sin(t2);-t2dot*a*cos(t2)];
C=A\B;
t4dot=C(1);
fdot=C(2);
Q1=-t2dot*a*sin(t2)-t4dot*b*sin(t4)-fdot*cos(t4)+t4dot*f*sin(t4);
Q2=t2dot*a*cos(t2)+t4dot*b*cos(t4)-fdot*sin(t4)-t4dot*f*cos(t4);
t5=asin((g-b*sin(t4))/c);
D=[c*sin(t5),-1;-c*cos(t5),0];
E=[Q1;Q2];
F=D\E;
t5dot=F(1);
hdot=F(2);
Q3=-t2ddot*a*sin(t2)-t2dot^2*a*cos(t2)+t4dot^2*f*cos(t4)+t4dot*fdot*sin(t4);
Q4=t2ddot*a*cos(t2)-t2dot^2*a*sin(t2)+t4dot^2*f*sin(t4)-t4dot*fdot*cos(t4);
G=[-f*sin(t4),-t4dot*sin(t4)+cos(t4);f*cos(t4),t4dot*cos(t4)+sin(t4)];
H=[Q3;Q4];
J=G\H;
t4ddot=J(1);
fddot=J(2);
Q5=-t4ddot*b*sin(t4)-t4dot^2*b*cos(t4)-t5dot^2*c*cos(t5);
Q6=t4ddot*b*cos(t4)-t4dot^2*b*sin(t4)-t5dot^2*c*sin(t5);
K=[c*sin(t5),-1;-c*cos(t5),0];
L=[Q5;Q6];
M=K\L;
t5ddot=M(1);
hddot=M(2);
Apo4x=-t4ddot*b*sin(t4)-t4dot^2*b*cos(t4)-t5ddot*(c/2)*sin(t5)-t5dot^2*(c/2)*cos(t5);
Apo4y=t4ddot*b*cos(t4)-t4dot^2*b*sin(t4)+t5ddot*(c/2)*cos(t5)-t5dot^2*(c/2)*sin(t5);
plot(t2,Apo4x,'-r',t2,Apo4y,'-b')
and here is a similar code I wrote that didn't have said problem. Why does the bottom code work while the top doesn't? How can I fix this? Thanks for your time!
format compact
a=20;
b=55;
c=8;
p=30;
t2=(pi/180)*[0:5:360]
t2dot=10;
t3=asin((a*sin(t2)-c)/b);
t3dot=-t2dot*(a*cos(t2))/(b*cos(t3));
ddot=-t2dot*a*sin(t2)+t3dot*b*sin(t3);
Vpx=-t2dot*a*sin(t2)+t3dot*(b*sin(t3)-28.8*sin(t3+20.95*pi/180))
Vpy=t2dot*a*cos(t2)-t3dot*(b*cos(t3)+28.7*cos(t3+20.95*pi/180));
plot(t2,Vpx,'-r',t2,Vpy,'-b')
0 comentarios
Respuesta aceptada
Star Strider
el 30 de Mzo. de 2015
All the ‘t#dot’ values are zero. I gather that you don’t want them to be, so figure out that problem first. That most likely requires that you examine the matrix calculations that create them.
4 comentarios
Star Strider
el 30 de Mzo. de 2015
If you added (or intend to add) a loop, be sure that you (1) index the ‘t#dot’ values and their friends with the loop index to create an array of them, and (2) put the plot call after the loop.
The loop structure I would use (albeit not understanding what you’re doing), would be something like:
t2=(pi/180)*[0:5:360];
for k1 = 1:length(t2)
t4(k1)=atan2(a*sin(t2(k1))+k, a*cos(t2(k1))+d);
f=(a*cos(t2(k1))+d)/cos(t4(k1));
... CODE [WITH (k1) INDICES EVERYWHERE THEY’RE NEEDED] ...
end
figure(1)
plot(t2,Apo4x,'-r',t2,Apo4y,'-b')
Even with the ‘Search and Replace’ capabilities of the Editor, that’s going to be really tedious, but in the end, likely worthwhile. (Replace ‘t2’ with ‘t2(k1)’ to make this easier.) If you don’t need to keep an array of variables (for instance, ‘f’), you don’t need to subscript them. (Note: I use ‘k1’ for my outer loop counter, ‘k2’ for the first inner loop counter, etc. Just my way of keeping track of them. I don’t see that you’ve used those anywhere in your code, so it’s likely safe as written.)
Más respuestas (0)
Ver también
Categorías
Más información sobre Graphics Object Programming en Help Center y File Exchange.
Productos
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!