How to plot a derivative against variable?

Use if statements to select an equation for x based on the inputed value for damping. Plot a graph of x (displacement) against time (this bit works). Then want to differentiate x for velocity, and differentiate velocity for acceleration and then plot all three. I used:
syms t
v = diff(x,1)
plot(t,v)
Get error "Data must be numeric, datetime, duration, categorical, or an array convertible to double."
x is a previously selected equation with t as a variable, also includes Z but this is asked for and inputted at the beginning.

2 件のコメント

John D'Errico
John D'Errico 2023 年 4 月 1 日
What do you expect? Read what you did. You did this:
syms t
v = diff(x,1)
What is x? Should MATLAB know that x is something possibly related to t? Why should it? Possibly x is a variable that already exists, since if it did not exist, you would have gotten a different error.
You claim that x already exists, but we don't see what it is. Is x an "equation", perhaps a function? Is it just a variable of some ilk? Is x something symbolic?
You are not telling us enough information to know what you did, except that you did something that caused an error.
River
River 2023 年 4 月 1 日
編集済み: Walter Roberson 2023 年 4 月 1 日
%% Program to simulate the system by giving graphs for displacement, velocity and acceleration with respect to time.
% Selects equation and calculates displacement based on the given damping
% ratio.
clear variables
% Ask what the damping ratio is
Z = input('What is the damping ratio Z?');
t = (0.0:0.001:5);
% Equation for undamped
if Z == 0
x = (0.01.*cos(595.6.*t)) + (0.1599.*cos((590.*t)-0.3886));
% Equation for underdamped
elseif (0 < Z) && (Z<1)
x =(exp(-595.60.*Z.*t).*((0.01.*cos(595.6.*t.*sqrt(1-(Z^2)))) + (((0.01.*Z)./(sqrt(1-(Z^2)))).*sin(595.6.*t.*sqrt(1-(Z^2)))))) + (0.1599.*cos((590.*t)-0.3886));
% Equation for critically damped
elseif Z == 1
x = ((0.01 + 5.966.*t).*(exp(-595.6.*t))) + (0.1599.*cos((590.*t)-0.3886));
% Equation for overdamped
elseif Z > 1
x = (((0.0017 + Z + sqrt(Z^2 - 1))./(200*sqrt(Z^2 - 1)))*exp((-595.6*Z + 595.6*sqrt(Z^2 - 1))*t)) + ((0.01 - ((0.0017 + Z + sqrt(Z^2 - 1))./(200*sqrt(Z^2 - 1))))*exp((-595.6*Z + 595.6*sqrt(Z^2 - 1))*t)) + (0.1599.*cos((590.*t)-0.3886));
% Ask for a positive number if a negative one is entered
else
disp('Please enter a positive value for Z.')
end
plot(t,x,'b')
grid on
grid minor
xlabel('Time (s)')
ylabel('Displacement (m)')
title('Displacement of mass in micro-energy harvester')
% Differentiate displacement for velocity and display a graph agaist time.
syms t
v = diff(x,1);
plot(t,v)
this is the complete code

サインインしてコメントする。

 採用された回答

Walter Roberson
Walter Roberson 2023 年 4 月 1 日

0 投票

Change
t = (0.0:0.001:5);
to
syms t
Change
plot(t,x,'b')
to
fplot(x, [0 5])
change
plot(t, v)
to
fplot(v, [0 5])

その他の回答 (1 件)

Peter Perkins
Peter Perkins 2023 年 4 月 5 日

0 投票

For extra credit, create a timetable from displacement, add velocity and accel, then use stackedplot to plot all three together.

カテゴリ

製品

リリース

R2023a

タグ

質問済み:

2023 年 4 月 1 日

回答済み:

2023 年 4 月 5 日

Community Treasure Hunt

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

Start Hunting!

Translated by