我对Matlab还是很陌生,所以如果我犯了一些明显的错误,我深表歉意,但是我有一个二阶常微分方程,我正在尝试绘制其矢量场。我已经查看了该站点上的各种资源,MATLAB文档和MATLAB论坛,但是仍然遇到问题。
我尝试使用ode45
函数求解ODE,这给了我一个我可以绘制的解决方案。我正在使用函数odeToVectorField
将ODE转换为一阶ODE系统。我感觉这就是阻止我正确执行自己想要做的事情的原因,因为它给了我一组很难在网状网格上评估的符号方程式。
到目前为止,这是我的代码:
% Setup outside variables
clear
mu = 0.75; % resistance variable
l = 1; % length of pendulum
g = 9.81; % gravity
% Next we setup the domains of the vector space.
xdom = linspace(-pi,pi,51); % define the X axis space
ydom = linspace(-pi,pi,51); % define the Y axis space
[X,Y] = meshgrid(xdom,ydom); % create a meshgrid for the vector field
% Define the system of ODEs
syms y(t)
eqn = diff(y,t,2) == - mu.*diff(y,t,1) - (g/l).*sin(diff(y,t,0));
U = odeToVectorField(eqn) % this is the part where I think I am doing wrong
Uf = matlabFunction(U(1), 'vars',{'t','Y'}) % trying to set a function handle for the first ODE
Vf = matlabFunction(U(2), 'vars',{'t','Y'}) % trying to set a function handle for the second ODE
% Now we plot it
figure
quiver(X,Y,Uf(X,Y), Vf(X,Y))
这是我的输出的屏幕截图。我特意省略了一些半冒号,以帮助您直观地了解我要做什么。
非常感谢您的帮助。