我想求解我的微分方程并绘制速度矢量,但是我遇到了一些麻烦。我尝试过:
<i class="wi wi-night-sleet"></i>
我得到这个错误:
syms y(x);
ode = (1+exp(x))*y*diff(y,x)-2*exp(x) == 0;
ySol = dsolve(ode)
[X,Y] = meshgrid(-2:.2:2);
Z = 2*exp(X)/((1+exp(X)).*Y);
[DX,DY] = gradient(Z,.2,.2);
figure
contour(X,Y,Z)
hold on
quiver(X,Y,DX,DY)
hold off
我可能看不到这很简单,但是我只是开始使用Matlab,而我却找不到合适的方法来完成任务。请帮助我...
编辑
按照bconrad的建议,我这样更改了Z函数:
Warning: Matrix is singular to working precision.
Warning: Contour not rendered for non-finite ZData
答案 0 :(得分:3)
目前无法检查,但我认为您需要在该行中逐个元素进行划分。您在分区上缺少点,请尝试
Z = 2*exp(X)./((1+exp(X)).*Y);
我一次在车站仔细看了一下。 Pablo在inf
中将Z
强制归零,所以在缩放向量时(可理解的)颤抖变得混乱了,只是没有显示出来。尝试以下操作(移除ode部分):
[X,Y] = meshgrid(-2 : .2 : 2);
Z = 2 * exp(X) ./ ((1 + exp(X)) .* Y);
Z(isinf(Z)) = nan; % To avoid 0-division problems
[DX, DY] = gradient(Z, .2, .2);
figure
contour(X, Y, Z, 30, 'k')
hold on
quiver(X, Y, DX, DY, 6)
hold off
我在这里做了三件事:
Z(isinf(Z)) = nan;
行,迫使quiver
会实质上忽略无限值30, 'k'
,以显示30条线,并使它们变黑(更加可见)6
添加到了quiver函数。这将覆盖向量的自动长度缩放。您将需要使用contour
和quiver
函数中的参数来使图形显示为您想要的样子。
PS:我发现文件交换上有一个方便的arrow
函数,可以在创建矢量场图时更好地控制它。请参见https://www.mathworks.com/matlabcentral/fileexchange/278-arrow-评分确实正确。