How do I construct matrices of multiple variables and plot a graph

I am a beginner to MATLAB.
I tried but I'm getting errors.
Anybody, kindly help. Thank you.
Equations dx/dt=-2x
dy/dt=2x
Initial condition: x(t=0)=100
y(t=0)=0
tspan=[0 3];
x0=100;
y0=0;
dzdt = (dxdt dydt);
Invalid expression. Check for missing multiplication operator, missing or unbalanced delimiters, or other syntax error. To construct matrices, use brackets instead of parentheses.
[tSol, zSol]=ode45(@odefun,tspan,x0);
plot(tSol, zSol);
function dzdt=odefun(t,z)
x = z(1);
y = z(2);
dxdt = -2*x;
dydt = 2*x;
dzdt = [dxdt;dydt];
end

 Accepted Answer

% Define the time span and initial conditions
tspan = [0 3];
z0 = [100; 0]; % Initial conditions for x and y, combined into a single column vector
% Call the ODE solver
[tSol, zSol] = ode45(@odefun, tspan, z0);
% Plot the solutions for x and y over time
figure; % Open a new figure window
hold on; % Keep the plot for adding both x and y
plot(tSol, zSol(:,1), 'b-', 'LineWidth', 2); % Plot x with a thicker blue line
plot(tSol, zSol(:,2), 'r--', 'LineWidth', 2); % Plot y with a thicker red dashed line
xlabel('Time t', 'FontSize', 12, 'FontWeight', 'bold');
ylabel('Solutions x and y', 'FontSize', 12, 'FontWeight', 'bold');
title('Solutions to the differential equations dx/dt = -2x and dy/dt = 2x', 'FontSize', 14, 'FontWeight', 'bold');
legend('x(t)', 'y(t)');
grid on; % Turn on grid
set(gca, 'FontSize', 10); % Set the font size for axes
hold off; % Release the plot hold
% Define the system of differential equations
function dzdt = odefun(t, z)
x = z(1);
y = z(2);
dxdt = -2 * x;
dydt = 2 * x;
dzdt = [dxdt; dydt];
end

8 Comments

Thank you very much @Hassaan. Your answer is helpful.
How do I find the maximum value of x?
How do I find the value of x at y=2?
I saw a code about interpolation, so I just edited it. However, I don't know if it is the right code for the question, and I don't even understand it. Kindly assist me. Thank you.
tspan=[0 3];
x0=100;
y0=0;
z0=[x0;y0];
[tSol, zSol]=ode45(@odefun,tspan,z0);
function dzdt=odefun(t,z)
x = z(1);
y = z(2);
dxdt = -2*x;
dydt = 2*x;
dzdt = [dxdt;dydt];
end
plot(tSol, zSol);
% Finding the time at which the maximum value occured
zmax=max(zSol);
tmaz = interp1(tSol,zSol,zmax);
% Find max value over all elements.
maxz = max(zSol)
maxz = 1x2
100.0000 99.7521
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
% Get first element that is the max.
indexOfFirstMax = find(zSol == maxz, 1, 'first')
indexOfFirstMax = 1
% Get the x and y values at that index.
maxt = tSol(indexOfFirstMax)
maxt = 0
maxX = zSol(indexOfFirstMax)
maxX = 100
tspan=[0 3];
x0=100;
y0=0;
z0=[x0;y0];
[tSol, zSol]=ode45(@odefun,tspan,z0);
function dzdt=odefun(t,z)
x = z(1);
y = z(2);
dxdt = -2*x;
dydt = 2*x;
dzdt = [dxdt;dydt];
end
How do I find the maximum value of x?
xmax = max(zSol(:,1))
xmax = 100
How do I find the value of x at y=2?
t2 = interp1(zSol(:,2),tSol,2); % find time at which y = 2
x2 = interp1(tSol,zSol(:,1),t2) % find x at which time = time at which y = 2
x2 = 98
How do I find the maximum value of x?
xmax = max(zSol(:,1))
What is the meaning of the "1" in the code?
zSol has two columns: the first is x over time, the second is y over time.

Sign in to comment.

More Answers (1)

tspan=[0 3];
x0=100;
y0=0;
z0=[x0;y0];
[tSol, zSol]=ode45(@odefun,tspan,z0);
plot(tSol, zSol);
function dzdt=odefun(t,z)
x = z(1);
y = z(2);
dxdt = -2*x;
dydt = 2*x;
dzdt = [dxdt;dydt];
end

Products

Release

R2024a

Tags

Asked:

on 23 Jul 2024

Commented:

on 25 Jul 2024

Community Treasure Hunt

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

Start Hunting!