图 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_phi
与 V_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)
那样删除函数头中的 ~
以使其在八度音程中工作。
我有一个问题 - 为什么图中缺少部分数据?请帮助我,我被卡住了,不知道 =(
这是 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;
之后我得到了这样的照片。
所以我的问题是,必须显示从绿色到红色移动的所有数据在哪里?
这很奇怪,因为实际上有一个动态,在下面我包含了我的变量 phi 取决于时间的图片。
感谢你们对我的帮助!
您在 V-theta 和 V_phi 轴上绘制了 theta 和 phi - 初始条件太多,这意味着 matlab 选择显示 theta_0 和 phi_0 的轴是缩小太多而无法显示线图。
尝试简单地注释掉第一个绘图命令
%plot(initial_phi,initial_velocity_phi,'ok','MarkerSize',5,'MarkerFaceColor','g');
获得 V_phi
与 V_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)
那样删除函数头中的 ~
以使其在八度音程中工作。