我正在寻找一种在Matlab中绘制斜率场的方法。
以下是我要找的内容:
我有一个等式
dy/dx = f(x,y)
或
dx/dt = f(x,y)
dy/dt = g(x,y)
我希望以一种很好的方式绘制它
因为这里唯一关于它的answer没有回答我的问题,我花了一些时间才找到如何做到这一点。
另外因为这不是我在matlab中一直在做的事情(很可能直到下次我需要它,我会忘记它)我正在为我创建一个备忘录如何做到这一点。
如果您觉得它很有用,请随时提出
答案 0 :(得分:9)
所以这是等式:
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。你可以阅读它here。但我没有为自己测试
答案 1 :(得分: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 )