如何在Matlab中绘制斜率场

4

我正在寻找在Matlab中绘制斜率场的方法。

以下是我要寻找的内容:

我有一个方程

dy/dx = f(x,y)

或者
dx/dt = f(x,y)
dy/dt = g(x,y)

我希望以美观的方式绘制它

因为这里关于此问题的唯一答案没有回答我的问题,我花了一些时间找到如何做到这一点。

而且因为这不是我在matlab中经常做的事情(很可能直到下一次我需要它,我会忘记它),所以我正在为自己创建备忘录以记录如何做到这一点。

如果你觉得有用,随意点赞。

2个回答

10

所以这就是方程式:

dx/dt = x^2-3xy+y
dy/dt = -5x+sin(yx)

那就是代码,它可以帮助完成任务:

[x,y] = meshgrid(-2:0.2:2);
dx = x.^2-3*x.*y+y;
dy = -5*x+sin(x.*y);
r = ( dx.^2 + dy.^2 ).^0.5;
px = dx./r;
py = dy./r;
quiver(x,y,px,py);

也可以使用dfield软件包。您可以在这里阅读有关它的信息。但我自己尚未测试过它。


1

另一个方便的解决方案如下:

[x,y] = meshgrid('start':'step':'end');

dy = 'f(x,y)';

norm = sqrt(dy.^2+1^2);

quiver(x, y, ones(size(x))./norm, dy./norm, 'magnification' )


例如,如果 dy 被定义为 dy = x+y。
[x,y] = meshgrid(-2:0.2:2);

dy = x+y;

norm = sqrt(dy.^2+1^2);

quiver(x, y, ones(size(x))./norm, dy./norm, 0.5 )

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接