图 Matlab 上的数据丢失

Data Is Missing On Figure Matlab

我有一个问题 - 为什么图中缺少部分数据?请帮助我,我被卡住了,不知道 =(

这是 ode 的代码:

function xDot = parallelDegreesW4(t,x,~,w_af,g_af,gcurr)
xDot  = [x(2); ... %//= theta'

    sin(x(1)) * cos(x(1)) * ((x(4))^2) + ...
    (w_af^2) * ((sin(x(1)))^3 * cos(x(1)) * (cos(x(3)))^4 + (sin(x(1)))^3 * cos(x(1)) * (sin(x(3)))^4 - (cos(x(1)))^3 * sin(x(1))  ) + ...
    - 2 * g_af * x(2) + ...
    + 2 * gcurr * sin(x(1)) * cos(x(1)) * sin(x(3)) * cos(x(3)); ...

    x(4); ... %//= phi'

    - x(2) * x(4) * cot(x(1)) + ...
    (w_af^2) * (sin(x(1)))^2 * cos(x(3)) * sin(x(3)) *(-(cos(x(3)))^2 + (sin(x(3)))^2) + ...
    - 2 * g_af * x(4) + ...
    + gcurr * ((cos(x(3)))^2 - (sin(x(3)))^2)];

这是我的代码 运行:

function f = ps(phi_vel,gcurr)
    w_af = 0.1;
    g_af = 0.01;
    %initial positions
    initial_theta = pi/2;
    initial_phi = (3*pi/4+pi/2)/2;
    %initial velocities
    initial_velocity_theta = 0;
    initial_velocity_phi = phi_vel;
    %finaly x0
    x0 = [initial_theta,initial_velocity_theta,initial_phi,initial_velocity_phi];

    time = 1000;
    tspan = 0:0.01:time;
    options = odeset('RelTol',1e-8,'AbsTol',[1e-8 1e-8 1e-8 1e-8]);

    [t,x]=ode45('parallelDegreesW4',tspan,x0, options,w_af, g_af, gcurr);
    xx1 = x(:,1);%theta
    xx2 = x(:,3);%phi
    xx3 = x(:,2);%V_theta
    xx4 = x(:,4);%V_phi
    %

    %
    %%
    ini_1=xx1(1);
    ini_2=xx2(1);
    ini_3=xx3(1);
    ini_4=xx4(1);
    last_1 = xx1(length(xx1)-1);
    last_2 = xx2(length(xx2)-1);
    last_3 = xx3(length(xx3)-1);
    last_4 = xx4(length(xx4)-1);


    figure(1)
  plot(initial_phi,initial_velocity_phi,'ok','MarkerSize',5,'MarkerFaceColor','g');
        hold on;
        plot(last_3,last_4,'ok','MarkerSize',5,'MarkerFaceColor', 'r');
        hold on;
        plot(xx3,xx4,'--','LineWidth' ,4);
        hold on;    

之后我得到了这样的照片。 (绿色表示 - 开始,红色 - 阶段 space 中变量 phi 运动的结束)

所以我的问题是,必须显示从绿色到红色移动的所有数据在哪里? 这很奇怪,因为实际上有一个动态,在下面我包含了我的变量 phi 取决于时间的图片。 感谢你们对我的帮助!

您在 V-theta 和 V_phi 轴上绘制了 theta 和 phi - 初始条件太多,这意味着 matlab 选择显示 theta_0 和 phi_0 的轴是缩小太多而无法显示线图。

尝试简单地注释掉第一个绘图命令

%plot(initial_phi,initial_velocity_phi,'ok','MarkerSize',5,'MarkerFaceColor','g');

获得 V_phiV_theta 的图表,运行 宁 ps(2,1) 获得速度的相位 space。或者尝试注释掉 figure(1) 之后的所有内容并替换为

    plot(t,xx2,'--','LineWidth' ,4);

和 运行 宁 ps(.2,.3) 得到像你正在寻找的例子的东西。
同样出于测试目的使其运行更快,我将错误范围增加到

options = odeset('RelTol',1e-3,'AbsTol',[1e-3 1e-3 1e-3 1e-3]);

并将 time 减少到 time = 400; %1000; 并将 tspan 减少到 tspan = 0:0.05:time; %0:0.01:time; - 如果您已经猜到您正在寻找的解决方案呈指数衰减,那么在非常大的时域上继续求解它几乎没有什么可学的,尤其是使用固定时间步长的 ODE 求解器。我还需要像这样 function xDot = parallelDegreesW4(t,x,w_af,g_af,gcurr) 那样删除函数头中的 ~ 以使其在八度音程中工作。