为什么我的等式 (y'=(3*x^3-y)/(3*x)) 没有用我的绘图函数正确置换?
Why my equation (y'=(3*x^3-y)/(3*x)) is not displaced properly with my plot functions?
我正在尝试绘制我的微分方程的解,但我无法用这种方法得到正确的图形。根据 Desmos 的说法,我的函数应该是这样的:
这是我的代码:
clear
syms Y(X)
ode = diff(Y,X) == (3.*X.^3-Y)./(3.*X);
cond = Y(1) == 5;
YSol(X) = dsolve(ode, cond)
[X,Y] = meshgrid(-5 : .2 : 5);
Z = @(X,Y)(3.*X.^3-Y)./(3.*X);
dirfield(Z,-10:0.5:10,-10:0.5:10)
hold on;
[Xs,Ys] = ode45(Z,[-1,10],5); plot(Xs,Ys)
hold off
这是 dirfield 函数:2
function dirfield(f,tval,yval)
% dirfield(f, t1:dt:t2, y1:dy:y2)
%
% plot direction field for first order ODE y' = f(t,y)
% using t-values from t1 to t2 with spacing of dt
% using y-values from y1 to t2 with spacing of dy
%
% f is an @ function, or an inline function,
% or the name of an m-file with quotes.
%
% Example: y' = -y^2 + t
% Show direction field for t in [-1,3], y in [-2,2], use
% spacing of .2 for both t and y:
%
% f = @(t,y) -y^2+t
% dirfield(f, -1:.2:3, -2:.2:2)
[tm,ym]=meshgrid(tval,yval);
dt = tval(2) - tval(1);
dy = yval(2) - yval(1);
fv = vectorize(f);
if isa(f,'function_handle')
fv = eval(fv);
end
yp=feval(fv,tm,ym);
s = 1./max(1/dt,abs(yp)./dy)*0.35;
h = ishold;
quiver(tval,yval,s,s.*yp,0,'.r'); hold on;
quiver(tval,yval,-s,-s.*yp,0,'.r');
if h
hold on
else
hold off
end
axis([tval(1)-dt/2,tval(end)+dt/2,yval(1)-dy/2,yval(end)+dy/2])
有谁知道我做错了什么?提前谢谢你。
编辑:
Desmos 的图表有混合轴,但我的问题不存在。我不明白为什么我得到这张图片:
而不是 Desmos 图逆时针旋转(或类似的东西)。
也许我需要的是不同的绘图功能?
这是奇点在 x=0 的一次线性 ODE,没有远离 y 轴的折叠点。实际上,解决方案是通过积分
获得的
(x^(1/3)*y)' = x^(7/3)
所以
(x^1/3)*y = 3/10*x^(10/3) + C <==> y(x) = 10/3*x^3 + C*x^(-1/3)
某些表达式包含大量积分常数 C
。如果您打印 dsolve
.
的结果,这也应该是结果
您提供的图表是针对不同问题的。
或者图表交换了轴,它是 y-x 图。对于初始条件 y(1)=5
,得到 C=5/3
和一个看起来像在对角线上镜像的图形。
要在初始条件 y(1)=5
的两边绘制解,您需要积分和绘制两次。一次用于时间范围 [1 5]
,一次用于 [1 0.1]
。解的最大域是 (0, infinity),没有解,因此没有负数 x
的图。那将是一个不同的解决方案,例如对于初始条件 y(-1)=-5
.
我正在尝试绘制我的微分方程的解,但我无法用这种方法得到正确的图形。根据 Desmos 的说法,我的函数应该是这样的:
这是我的代码:
clear
syms Y(X)
ode = diff(Y,X) == (3.*X.^3-Y)./(3.*X);
cond = Y(1) == 5;
YSol(X) = dsolve(ode, cond)
[X,Y] = meshgrid(-5 : .2 : 5);
Z = @(X,Y)(3.*X.^3-Y)./(3.*X);
dirfield(Z,-10:0.5:10,-10:0.5:10)
hold on;
[Xs,Ys] = ode45(Z,[-1,10],5); plot(Xs,Ys)
hold off
这是 dirfield 函数:2
function dirfield(f,tval,yval)
% dirfield(f, t1:dt:t2, y1:dy:y2)
%
% plot direction field for first order ODE y' = f(t,y)
% using t-values from t1 to t2 with spacing of dt
% using y-values from y1 to t2 with spacing of dy
%
% f is an @ function, or an inline function,
% or the name of an m-file with quotes.
%
% Example: y' = -y^2 + t
% Show direction field for t in [-1,3], y in [-2,2], use
% spacing of .2 for both t and y:
%
% f = @(t,y) -y^2+t
% dirfield(f, -1:.2:3, -2:.2:2)
[tm,ym]=meshgrid(tval,yval);
dt = tval(2) - tval(1);
dy = yval(2) - yval(1);
fv = vectorize(f);
if isa(f,'function_handle')
fv = eval(fv);
end
yp=feval(fv,tm,ym);
s = 1./max(1/dt,abs(yp)./dy)*0.35;
h = ishold;
quiver(tval,yval,s,s.*yp,0,'.r'); hold on;
quiver(tval,yval,-s,-s.*yp,0,'.r');
if h
hold on
else
hold off
end
axis([tval(1)-dt/2,tval(end)+dt/2,yval(1)-dy/2,yval(end)+dy/2])
有谁知道我做错了什么?提前谢谢你。
编辑:
Desmos 的图表有混合轴,但我的问题不存在。我不明白为什么我得到这张图片:
而不是 Desmos 图逆时针旋转(或类似的东西)。
也许我需要的是不同的绘图功能?
这是奇点在 x=0 的一次线性 ODE,没有远离 y 轴的折叠点。实际上,解决方案是通过积分
获得的(x^(1/3)*y)' = x^(7/3)
所以
(x^1/3)*y = 3/10*x^(10/3) + C <==> y(x) = 10/3*x^3 + C*x^(-1/3)
某些表达式包含大量积分常数 C
。如果您打印 dsolve
.
您提供的图表是针对不同问题的。
或者图表交换了轴,它是 y-x 图。对于初始条件 y(1)=5
,得到 C=5/3
和一个看起来像在对角线上镜像的图形。
要在初始条件 y(1)=5
的两边绘制解,您需要积分和绘制两次。一次用于时间范围 [1 5]
,一次用于 [1 0.1]
。解的最大域是 (0, infinity),没有解,因此没有负数 x
的图。那将是一个不同的解决方案,例如对于初始条件 y(-1)=-5
.