Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 为什么我的方程(y';=(3*x^3-y)/(3*x))不能用绘图函数正确替换?_Matlab_Plot_Differential Equations - Fatal编程技术网

Matlab 为什么我的方程(y';=(3*x^3-y)/(3*x))不能用绘图函数正确替换?

Matlab 为什么我的方程(y';=(3*x^3-y)/(3*x))不能用绘图函数正确替换?,matlab,plot,differential-equations,Matlab,Plot,Differential Equations,我试图画出微分方程的解,但用这种方法我无法得到正确的图。根据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.

我试图画出微分方程的解,但用这种方法我无法得到正确的图。根据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:

有人知道我做错了什么吗?先谢谢你

编辑:

来自Desmos的图形具有混合轴,但我的问题并不存在。我不明白为什么我会得到这个图像:

而不是逆时针旋转的Desmos图形(或类似的东西)


也许我需要的是一个不同的绘图函数?

这是一个一阶线性常微分方程,在x=0处有一个奇点,在远离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)
(x^1/3)*y=3/10*x^(10/3)+cy(x)=10/3*x^3+C*x^(-1/3)
某些表达式包含积分常数
C
的大数值。如果打印
dsolve
的结果,这也应该是结果

您包含的图表用于另一个问题

或者图形的轴交换了,这是一个y-x图。对于初始条件
y(1)=5
可以得到
C=5/3
和一个在对角线上镜像的图形



要在初始条件
y(1)=5的两侧绘制解,需要积分并绘制两次。一次用于时间范围
[15]
,一次用于
[10.1]
。解的最大域是(0,无穷大),没有解,因此没有负
x
的图。这将是一个不同的解决方案,例如对于初始条件
y(-1)=-5

我意外地将初始条件写成y(5)==1。它必须是Y(1)==5。现在我看到了,来自Desmos的图形是混合轴的,谢谢你的注意(我在解方程时改变了x和y)。我会在三个小时内检查你的建议。我修正了我的错误,谢谢。但是,它仍然不能消除错误。您现在使用y(-1)=5进行求解。看看ode45的界面,函数Z的参数顺序是错误的。matlab中的标准顺序是先把自变量,
Z=@(X,Y)(3.*X.^3-Y)。/(3.*X)
注意,这定义了一个函数
Z(x,y)
,因为x,y是函数定义的局部参数。“方向”字段也使用相同的约定。结果应该如上面所述,在求解y(-1)=5时。您需要两次积分和绘图,一次用于时间范围[15],一次用于[10.1]。解的域是(0,无穷大),对于负x没有解图。这将是一个不同的解决方案,y(-1)=-5。
(x^1/3)*y = 3/10*x^(10/3) + C  <==> y(x)  =  10/3*x^3 + C*x^(-1/3)