Filter löschen
Filter löschen

Plotting from a for loop?

3 Ansichten (letzte 30 Tage)
Conor McCan
Conor McCan am 26 Jan. 2016
Beantwortet: dpb am 26 Jan. 2016
I'm trying to plot the solution to these equations from a for loop with different values of t, but Matlab is ignoring all the previous solutions to these three equations and only returning with the final value. Any help? This is what I have so far.
c0=input('c0=..... ');
c1=input('c1=..... ');
c2=input('c2=..... ');
c3=input('c3=..... ');
c4=input('c4=..... ');
c5=input('c5=..... ');
for t=0:0.1:3
a=c0+(c1*t)+(c2*t^2)+(c3+t^3)+(c4*t^4)+(c5*t^5); %angle
v=c1+(2*c2*t)+(3*c3*t^2)+(4*c4*t^3)+(5*c5*t^4); %velocity
acc=(2*c2)+(6*c3*t)+(12*c4*t^2)+(20*c5*t^3); %acceleration
end
plot(t,a,t,v,t,acc)

Antworten (3)

Star Strider
Star Strider am 26 Jan. 2016
You can probably vectorise your equations easily:
t=0:0.1:3;
a=c0+(c1*t)+(c2*t.^2)+(c3+t.^3)+(c4*t.^4)+(c5*t.^5); %angle
v=c1+(2*c2*t)+(3*c3*t.^2)+(4*c4*t.^3)+(5*c5*t.^4); %velocity
acc=(2*c2)+(6*c3*t)+(12*c4*t.^2)+(20*c5*t.^3); %acceleration
plot(t,a,t,v,t,acc)
I plugged in random values for the constants to verify that this works.

Image Analyst
Image Analyst am 26 Jan. 2016
You need to index those values:
all_t = 0:0.1:3
for k = 1 : length(all_t)
t = all_t(k);
a(k) = c0+(c1*t)+(c2*t^2)+(c3+t^3)+(c4*t^4)+(c5*t^5); %angle
v(k) = c1+(2*c2*t)+(3*c3*t^2)+(4*c4*t^3)+(5*c5*t^4); %velocity
acc(k) = (2*c2)+(6*c3*t)+(12*c4*t^2)+(20*c5*t^3); %acceleration
end
plot(all_t, a, 'r*-', 'LineWidth', 2, 'MarkerSize', 9);
hold on;
plot(all_t, v, 'bo-', 'LineWidth', 2, 'MarkerSize', 9);
plot(all_t, acc, 'md-', 'LineWidth', 2, 'MarkerSize', 9);

dpb
dpb am 26 Jan. 2016
Use the vectors, Luke... :)
You're overwriting each pass thru the loop; you can make an array and populate it, but "the Matlab way" is to use the vectorized solution...
t=0:0.1:3;
a=c0 + c1*t + c2*t.^2 + c3*t.^3 + c4*t.^4 + c5*t.^5;
Similarly for the remaining. NB: the "dot operator" for the exponential terms to use the element-by-element computation rather than matrix power.
And, you can simplify further if, instead of separate named variables you use an array of coefficients...
c=[c5 c4 c3 c2 c1 c0]; % coefficients in an array in descending power order
a=polyval(c,t); % evaluate for t vector locations
Will leave as "exercise for the student" but also investigate
doc polyder
for computing the derivatives analytically from the original poly coefficient vector to get the remaining values.

Kategorien

Mehr zu Mathematics finden Sie in Help Center und File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by