过滤在MATLAB forloop中绘制的内容
我正试图让这段代码中的一个特定点更优雅一点。我是matlab新手,不知道如何解决这个问题(请参阅嵌套forloop中绘图前的注释) 基本上,我想过滤掉所有初始条件不从绘图边缘开始的数据。(见附图)。它的设置方式将所有内容都图形化。我需要过滤任何不是从绘图边缘的初始条件开始的东西过滤在MATLAB forloop中绘制的内容,matlab,Matlab,我正试图让这段代码中的一个特定点更优雅一点。我是matlab新手,不知道如何解决这个问题(请参阅嵌套forloop中绘图前的注释) 基本上,我想过滤掉所有初始条件不从绘图边缘开始的数据。(见附图)。它的设置方式将所有内容都图形化。我需要过滤任何不是从绘图边缘的初始条件开始的东西 %inital conditions x10 = -0.1:0.02:0.1; x20 = -0.1:0.02:0.1; sig = -1;%needs to be negative for stable syste
%inital conditions
x10 = -0.1:0.02:0.1;
x20 = -0.1:0.02:0.1;
sig = -1;%needs to be negative for stable system
wd = 1;%needs to be non 0 for spiral (sign will give spiral direction)
t_vec = 0:0.1:10;
for i=1:length(x10)
for j=1:length(x20)
X0 = [x10(i);x20(j)];
[t X1]=ode45(@(t,X) ODE_system(t,X,sig,wd),t_vec,X0);%solve ODEs
[t X2]=ode45(@(t,X) ODE_system(t,X,sig,-wd),t_vec,X0);%flip direction of spiral
figure(1)
hold on
%***Add filter that filters out any initial conditions that aren't on the edges of the plot.
plot(X1(:,1),X1(:,2))
plot(X2(:,1),X2(:,2))
end
end
%define function to be used with ode45 solver
function Xdot = ODE_system(t,X,sig,wd)
Xdot = zeros(size(X));
Xdot(1) = sig*X(1)+wd*X(2);
Xdot(2) = -wd*X(1)+sig*X(2);
end
我知道我可以只添加一个长的“If条件”,即40个参数(我想要绘制的每个参数对应一个)。我只是想想出一个更奇特的方法来做这件事。我确实看到了边缘点之间的任何关系,这些关系允许我将这个“如果”条件减少到少于40个唯一参数
只需添加一个检查
X0
是否包含x10
的第一个或最后一个元素,或者是否包含x20
的第一个或最后一个元素。然后在模拟ode之前进行检查,这样就不会进行任何不必要的计算
for i=1:length(x10)
for j=1:length(x20)
X0 = [x10(i);x20(j)];
if any(X0(1) == x10([1,end])) || any(X0(2) == x20([1,end]))
[t X1]=ode45(@(t,X) ODE_system(t,X,sig,wd),t_vec,X0);%solve ODEs
[t X2]=ode45(@(t,X) ODE_system(t,X,sig,-wd),t_vec,X0);%flip direction of spiral
figure(1)
hold on
plot(X1(:,1),X1(:,2))
plot(X2(:,1),X2(:,2))
end
end
end
啊。。。如此简单和明显!为什么我没看到!!!非常感谢。完美的对于i=2:length(x10)-1对于j=2:length(x20)-1,它不等于
?也许我把它搞砸了。。。因为我想到了这一点,但当我尝试它的最终结果不是我所期望的。但我对matlab是新手,所以完全有可能是我把它搞砸了。