Plotting Solution Curve on Direction Field

Hello,
I have the second-order differential equation with initial conditions: y'' + 2y' + y = 0, y(-1) = 0, y'(0) = 0
I need to plot the direction field of the solution to the equation and trace the solution curve corresponding to the initial conditions.
I have created the direction field but I'm not sure how to plot the solution curve over the direction field.
Using the plot() function is giving errors and the ezplot() function doesn't seem to represent what the direction field is showing.
Here is what I have so far
% Finds solution to the DE
syms y(x)
Dy = diff(y);
D2y = diff(y,2);
ode = D2y + 2*Dy + y == 0;
ySol1 = dsolve(ode, y(-1)==0); % Solution to DE applying first initial conditions.
ySol2 = dsolve(ode,Dy(0)==0); % Solution to DE applying second initial conditions.
% Sets up directional field
[x,y]=meshgrid(-4:0.5:4,-4:0.5:4);
u = y; % x1' = y'
v = - 2*y - x; % x2' = y'' = - 2*y' - y
u1 = u./sqrt(u.^2+v.^2);
v1 = v./sqrt(u.^2+v.^2);
quiver(x, y, u1, v1, 0.6)
xlabel('x-axis')
ylabel('y-axis')
axis on
axis([-3.5 3.5 -3.5 3.5]);
% Prints the solution curve corresponding to the initial conditions.
hold on
plot(ySol1)
plot(ySol2)
hold off
Any help is greatly appreciated.

 採用された回答

Torsten
Torsten 2022 年 4 月 13 日

0 投票

ySol = dsolve(ode, [y(-1)==0,Dy(0)==0]);
dySol = diff(ySol,x);
instead of
ySol1 = dsolve(ode, y(-1)==0); % Solution to DE applying first initial conditions.
ySol2 = dsolve(ode,Dy(0)==0); % Solution to DE applying second initial conditions.
and
plot(double(subs(ySol,x,-4:0.5:4)),double(subs(dySol,x,-4:0.5:4)))
instead of
plot(ySol1)
plot(ySol2)

16 件のコメント

Jordan Stanley
Jordan Stanley 2022 年 4 月 13 日
Hello @Torsten,
Just to understand what you did.
You solved the DE equation with the conditions and assigned it to ySol then took the derivative of that and assigned it to dySol.
Then plotted both ySol and dySol.
Is that correct?
Torsten
Torsten 2022 年 4 月 13 日
Yes. This was the task, wasn't it ?
Jordan Stanley
Jordan Stanley 2022 年 4 月 13 日
Yes, I just wanted to understand the process.
Also, when I replaced my code with your suggestion I get these errors.
Entries in second argument must be scalar.
[X2,Y2,symX,symY] = normalize(X,Y); %#ok
Error in sym/subs (line 154)
G = mupadsubs(F,X,Y);
Do you see anything in my update code that might be causing these.
% Finds solution to the DE
syms y(x)
Dy = diff(y);
D2y = diff(y,2);
ode = D2y + 2*Dy + y == 0;
ySol = dsolve(ode,[y(-1)==0,Dy(0)==0]);
dySol = diff(ySol,x);
% Sets up directional field
[x,y]=meshgrid(-4:0.5:4,-4:0.5:4);
u = y; % x1' = y'
v = - 2*y - x; % x2' = y'' = - 2*y' - y
u1 = u./sqrt(u.^2+v.^2);
v1 = v./sqrt(u.^2+v.^2);
quiver(x, y, u1, v1, 0.6)
xlabel('x-axis')
ylabel('y-axis')
axis on
axis([-3.5 3.5 -3.5 3.5]);
% Prints the solution curve corresponding to the initial conditions.
hold on
plot(double(subs(ySol,x,-4:0.5:4)),double(subs(dySol,x,-4:0.5:4)))
hold off
Torsten
Torsten 2022 年 4 月 14 日
Then try
syms y(x)
Dy = diff(y);
D2y = diff(y,2);
ode = D2y + 2*Dy + y == 0;
ySol = dsolve(ode,[y(-1)==0,Dy(0)==0]);
dySol = diff(ySol,x);
ySol = matlabFunction(ySol);
dySol = matlabFunction(dySol);
% Sets up directional field
[x,y]=meshgrid(-4:0.5:4,-4:0.5:4);
u = y; % x1' = y'
v = - 2*y - x; % x2' = y'' = - 2*y' - y
u1 = u./sqrt(u.^2+v.^2);
v1 = v./sqrt(u.^2+v.^2);
quiver(x, y, u1, v1, 0.6)
xlabel('x-axis')
ylabel('y-axis')
axis on
axis([-3.5 3.5 -3.5 3.5]);
% Prints the solution curve corresponding to the initial conditions.
hold on
plot(ySol(-4:0.5:4),dySol(-4:0.5:4));
hold off
Jordan Stanley
Jordan Stanley 2022 年 4 月 14 日
Hello again,
There are less errors now but the only error I get now is,
Not enough input arguments.
I have the same code as above.
Torsten
Torsten 2022 年 4 月 14 日
編集済み: Torsten 2022 年 4 月 14 日
I can't run the code, but I'm surprised that ySol should still have a free constant although 2 conditions are given that the solution should fulfill.
What do you get for ySol from the command
ySol = dsolve(ode,[y(-1)==0,Dy(0)==0]);
I solved your equation with paper and pencil and get
ySol(x) = a*exp(-x)*(1+x)
for arbitrary a.
So you can't plot anything here because the solution is not unique.
Jordan Stanley
Jordan Stanley 2022 年 4 月 14 日
I get an error message that says... "Array indices must be positive integers or logical values.".
Jordan Stanley
Jordan Stanley 2022 年 4 月 14 日
Interesting, well thank you for your help.
Torsten
Torsten 2022 年 4 月 14 日
編集済み: Torsten 2022 年 4 月 14 日
What I want to say is: You can't trace a solution curve since the solution is not unique.
What you can do is choose a special solution:
syms y(x)
Dy = diff(y);
D2y = diff(y,2);
ode = D2y + 2*Dy + y == 0;
ySol = dsolve(ode,[y(-1)==0,Dy(0)==0]);
dySol = diff(ySol,x);
ySol = @(x) exp(-x).*(1+x);
dySol = @(x) -exp(-x).*x;
% Sets up directional field
[x,y]=meshgrid(-4:0.5:4,-4:0.5:4);
u = y; % x1' = y'
v = - 2*y - x; % x2' = y'' = - 2*y' - y
u1 = u./sqrt(u.^2+v.^2);
v1 = v./sqrt(u.^2+v.^2);
quiver(x, y, u1, v1, 0.6)
xlabel('x-axis')
ylabel('y-axis')
axis on
axis([-3.5 3.5 -3.5 3.5]);
% Prints the solution curve corresponding to the initial conditions.
hold on
plot(ySol(-4:0.5:4),dySol(-4:0.5:4));
hold off
Jordan Stanley
Jordan Stanley 2022 年 4 月 14 日
Ah okay, I believe that is what I needed.
Thank you very much.
Torsten
Torsten 2022 年 4 月 14 日
And what is ySol you get from MATLAB from the line
ySol = dsolve(ode,[y(-1)==0,Dy(0)==0]);
?
Jordan Stanley
Jordan Stanley 2022 年 4 月 14 日
I still get the error message, "Array indices must be positive integers or logical values."
Torsten
Torsten 2022 年 4 月 14 日
And with
syms y(x)
Dy = diff(y,x);
D2y = diff(y,x,2);
ode = D2y + 2*Dy + y == 0;
ySol(x) = dsolve(ode,[y(-1)==0,Dy(0)==0])
What do you get for ySol ?
Jordan Stanley
Jordan Stanley 2022 年 4 月 14 日
I get...
ySol(x) =
exp(-x)*(C1 + C1*x)
Torsten
Torsten 2022 年 4 月 14 日
Then the following code should work (without prescribing ySol as I did before, but the result should be the same):
syms y(x)
Dy = diff(y,x);
D2y = diff(y,x,2);
ode = D2y + 2*Dy + y == 0;
ySol(x) = dsolve(ode,[y(-1)==0,Dy(0)==0])
ySol = subs(ySol,C1,1);
dySol = diff(ySol,x);
ySol = matlabFunction(ySol);
dySol = matlabFunction(dySol);
% Sets up directional field
[x,y]=meshgrid(-4:0.5:4,-4:0.5:4);
u = y; % x1' = y'
v = - 2*y - x; % x2' = y'' = - 2*y' - y
u1 = u./sqrt(u.^2+v.^2);
v1 = v./sqrt(u.^2+v.^2);
quiver(x, y, u1, v1, 0.6)
xlabel('x-axis')
ylabel('y-axis')
axis on
axis([-3.5 3.5 -3.5 3.5]);
% Prints the solution curve corresponding to the initial conditions.
hold on
plot(ySol(-4:0.5:4),dySol(-4:0.5:4));
hold off
Jordan Stanley
Jordan Stanley 2022 年 4 月 15 日
Thank you very much for the help.

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

その他の回答 (0 件)

製品

Community Treasure Hunt

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

Start Hunting!

Translated by