我是一个全新的MATLAB,并已分配给一个小项目,以绘制一些衍生物和轨迹。我给:
f(t,x)= 0.02sin(2πt)(x^2 - 2x)+ x;
dx/dt = -πsin(π*f(t,x))cos(πy);
dy/dt = πcos(πf(t,x))sin(πy)(π f/π x)
现有代码:
f = @(t,x,y) (0.02*sin(2*pi*t)*(x^2 - 2*x) + x);
dfdx = @(t,x,y) (0.02*sin(2*pi*t)*(2*x - 2) + 1);
d = @(t,x,y) [-pi*sin(pi*f(t,x,y))*cos(pi*y); pi*cos(pi*f(t,x,y))*sin(pi*y)*dfdx(t,x,y)];
t = linspace(0,4,100);
figure
[x,y] = meshgrid(0:.1:2,0:0.1:1);
quiver(x,y,d(1),d(2));
字符串
我试着自己做这件事,但由于我对语言的不熟悉,我遇到了很多困难。我的目标(暂时)是使用函数函数在网格上绘制dx/dt和dy/dt,但在我接近这一点之前,我得到了太多的错误。有什么正确的语法建议吗?
谢谢你,谢谢
我试着重写函数,但得到了一些错误;最常见的是我被告知“operation * does not work with function_handle”,“没有足够的输入参数”等等。
2条答案
按热度按时间dphi5xsq1#
首先,注意矩阵乘积
*
和元素乘.*
之间的区别。如果两个操作数是标量(单个值),它们是相同的,但是对于矩阵输入,它们做的事情非常不同。因为你在矩阵t
,x
和y
上操作,你应该更新你的函数:字符串
每次
*
或^
或/
的两个操作数都是向量或矩阵时,您都希望使用逐元素运算符(.*
,.^
,./
)。我还分离出了
dxdt
和dydt
,因为表示整个x和y值数组的向量输出很复杂。接下来,在调用
d
时,必须传入计算的t
、x
和y
。此外,由于我们不想绘制3D矢量图,因此我们将选择单个t
,而不是它们的数组(如果您更喜欢绘制3D图,则应在meshgrid
调用中包含t):型
现在我们应该能够绘制:
型
对于多个
t
值,您可以绘制图形并设置动画:型
(虽然不幸的是,我没有看到
t
的任何变化?)wixjitnu2#
有两件事你应该知道:
1.请使用元素操作,例如
.*
和.^
,而不是矩阵或向量操作,例如*
和^
;1.应将
d
解叠加为两个单独的偏导数,即dxdt
和dydt
代码
字符串