How do I use output values from a function to plot those values in a script
14 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Nolan Hensley
am 13 Sep. 2021
Kommentiert: Nolan Hensley
am 13 Sep. 2021
I want to call my function (in the script) and plot the vectors from specfic outputs of the function.
Function code: (this seems to be working perfectly as it is meant to output a time, velocity, and mass vector given: delt (step size) and t_end (ending time).
function [t,m,v] = rocket_euler(delt,t_end) %rocket_euler solves for t,v,m vectors using Euler's method
g = 9.81; %gravity (m/s^2)
c = 25000; %thrust constant (m/s)
t = 0:delt:t_end; %time vector from 0 to t_end seconds
t(1) = 0; %initial time set to 0 (s)
m(1) = 1000000; %initial mass of fuel (kg)
v(1) = 0; %initial velocity of rocket (m/s)
for ii=1:length(t)-1
dmdt = -4000; %fuel burn rate (kg/s)
m(ii+1) = m(ii) + (dmdt*delt); %update law for Euler's Method
dvdt = -g - ((c*dmdt)/(m(ii))); %solve given formula for dvdt or acceleration
v(ii+1) = v(ii) + (dvdt*delt); %update law for Euler's Method
end
end
Here is my script: (120s is always the value used for t_end while delt (step size) changes from 60 to 30 to 15 and to 5) I want to plot the different lines it makes (due to changes in step size) on a single plot.
clc; clear; %clears workspace and command window
plot(t = rocket_euler(60,120),v = rocket_euler(60,120),'.-','color',[0 0 1],'Marker','*','markersize',15,'linewidth',1.5) %plot t vs v
legend('Step Size: 60s'); %step size of 60s
hold on %prevent overwrite of plot
plot(t = rocket_euler(30,120),v = rocket_euler(30,120) ,'.-','color',[0 1 0],'Marker','x','markersize',15,'linewidth',1.5) %plot t vs v
legend('Step Size: 30s'); %step size of 30s
hold on %prevent overwrite of plot
plot(t = rocket_euler(15,120),v = rocket_euler(15,120) ,'.-','color',[1 0 0],'Marker','o','markersize',15,'linewidth',1.5) %plot t vs v
legend('Step Size: 15s'); %step size of 15s
hold on %prevent overwrite of plot
plot(t = rocket_euler(5,120),v = rocket_euler(5,120) ,'.-','color',[0 1 1],'Marker','+','markersize',15,'linewidth',1.5) %plot t vs v
legend('Step Size: 5s'); %step size of 5s
xlabel('t (seconds)') %add x-label
ylabel('v (m/s)') %add y-label
t = rocket_euler(60,120),v = rocket_euler(60,120)
The above snippet of code is where I believe I am going wrong. Same for each line that begins with "plot(..."
0 Kommentare
Akzeptierte Antwort
Dave B
am 13 Sep. 2021
Bearbeitet: Dave B
am 13 Sep. 2021
I think what you're looking for is:
[t,~,v] = rocket_euler(30,20)
plot(t, v, '.-','color',[0 1 0],'Marker','x','markersize',15,'linewidth',1.5) %plot t vs v
You can't pass in the positional arguments to plot using = that way, and I guessed that you wanted the first and third outputs from rocket_euler (otherwise you'd be getting the first output twice and plotting it against itself). I'm not sure that you had a use for the second argument, so I used ~ to say 'ignore it'
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Polar Plots finden Sie in Help Center und File Exchange
Produkte
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!