3 views (last 30 days)

Show older comments

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(..."

Dave B
on 13 Sep 2021

Edited: Dave B
on 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'

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

Start Hunting!