I am trying to plot kinetic energy as a function of time. I am using fplot inside a foor loop which results in two errors and a warning.
clear; clc
V = 5000;
d = 0.5e-2;
B = 1;
q = 1.6e-19;
m = 1.7e-27;
% T = 2pi/omega
% q V = 0.5 m v^2
% m v^2 = 2 q V
% v = sqrt(2 q V / m)
% q v B = m v^2 / r
% r = 2 V / v B
T(1) = 0;
r(1)= 2*V/(sqrt(2*q*V/m)*B);
n=1;
while r(n)<5e-2
V = n*5000;
r(n+1)= 2*V/(sqrt(2*q*V/m)*B);
T(n+1) = T(n) + (6.67588e-8)/2;
n=n+1;
end
%2*V/(sqrt(2*q*V/m)*B)
n
%plot(T, r, '.-'), legend('Radius')
%xlabel('Time [s]')
%ylabel('Radius [m]')
V=5000;
t=zeros(1,n);
t(1)=1.03077640640442e-08;
for i=1:n
vi=sqrt(2*(i-1)*q*V/m);
vf=sqrt(2*i*q*V/m);
vm=(vf-vi)/2;
t(i+1)=t(i)+d/vm;
ti=t(i);
Ti=T(i);
tf=t(i+1);
Tf=T(i+1);
fplot(@(x) (q.*V./ti).*x,[Ti Ti+tf],'b')
hold on
fplot(@(x) 0.5.*m.*vm.^2,[Ti+tf Tf],'b')
end
hold off
So the errors occurs at the end of the code when I'm trying to plot the functions.
If you have any other suggestions please tell as this code probably looks quite bad.

 採用された回答

Walter Roberson
Walter Roberson 2017 年 2 月 28 日

0 投票

fplot(@(x) 0.5.*m.*vm.^2,[Ti+tf Tf],'b')
is independent of the input, x. If you want to create a constant with that value, then you need to replicate the constant by the size of the input to produce a vectorized form:
fplot(@(x) 0.5.*m.*vm.^2 .* ones(size(x)),[Ti+tf Tf],'b')
That is what the warning is about.
The error occurs because on i = 2, Ti+tf > Tf so the interval [Ti+tf Tf] becomes backwards.
Since you are plotting a constant there anyhow, you could consider sort() around that vector.

その他の回答 (0 件)

カテゴリ

ヘルプ センター および File ExchangeLine Plots についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by