Невозможно построить векторное поле с помощью колчана в Matlab - PullRequest
1 голос
/ 18 июня 2020

Я новичок в Matlab, поэтому прошу прощения, если делаю очевидные ошибки, но у меня есть обыкновенное дифференциальное уравнение второго порядка, для которого я пытаюсь построить векторное поле. Я просмотрел различные ресурсы на этом сайте, документацию MATLAB и форумы MATLAB, но у меня все еще возникают проблемы.

Я попытался решить ODE с помощью функции ode45, это дает мне единственное решение, которое я можно заговорить. Я использую функцию odeToVectorField для преобразования моего ODE в систему ODE первого порядка. У меня такое чувство, что это мешает мне правильно делать то, что я хочу, потому что это дает мне набор символьных c уравнений, которые мне трудно оценить по сетке.

Вот мой код на данный момент :

% 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))

Вот скриншот моего вывода. Я намеренно опустил несколько точек с запятой, чтобы помочь вам визуализировать то, что я пытаюсь сделать.

enter image description here

Большое спасибо за вашу помощь.

...