Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法在Matlab中使用quiver绘制向量场_Matlab_Plot_Ode - Fatal编程技术网

无法在Matlab中使用quiver绘制向量场

无法在Matlab中使用quiver绘制向量场,matlab,plot,ode,Matlab,Plot,Ode,我对Matlab很陌生,所以如果我犯了一些明显的错误,我很抱歉,但我有一个二阶常微分方程,我正试图绘制向量场。我已经查看了这个站点上的各种资源、MATLAB文档和MATLAB论坛,但是我仍然有问题 我曾尝试使用ode45函数来解决ODE问题,这给了我一个可以绘制的单一解决方案。我正在使用函数odeToVectorField将我的ODE转换为一阶ODE系统。我有一种感觉,这是阻止我正确地做我想要的事情的原因,因为它给了我一组符号方程,我很难在网格上计算它们 以下是我目前的代码: % Setup o

我对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))
这是我的输出的屏幕截图。我特意省略了一些分号,以帮助您想象我正在尝试做的事情


非常感谢您的帮助。

Uf=Y(2)
,它总是只返回一个数字。1x1矩阵。正如错误所说的,席的大小和XI的大小不太一样,但我认为你错了。输出不是一个向量场,无法用quiver绘制。如果您查看
odeToVectorField
文档,将有一个演示如何将其与
matlabFunction
和plot一起使用
odeToVectorField
应该是“将微分方程的阶数降到一阶”,而不是生成向量场!感谢@AnderBiguri的评论。然后,我应该如何访问一阶ODE系统的每个组件?通过改变ODE
U=Y的声明方式,我成功地获得了我想要的结果
V=-mu.*Y-(g/l)。*sin(X)
是否可以让Matlab使用odeToVectorField为我生成这些方程?
Uf=Y(2)
,它总是只返回一个数字。1x1矩阵。正如错误所说的,席的大小和XI的大小不太一样,但我认为你错了。输出不是一个向量场,无法用quiver绘制。如果您查看
odeToVectorField
文档,将有一个演示如何将其与
matlabFunction
和plot一起使用
odeToVectorField
应该是“将微分方程的阶数降到一阶”,而不是生成向量场!感谢@AnderBiguri的评论。然后,我应该如何访问一阶ODE系统的每个组件?通过改变ODE
U=Y的声明方式,我成功地获得了我想要的结果
V=-mu.*Y-(g/l)。*sin(X)是否可以让Matlab使用odeToVectorField为我生成这些方程?