Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.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 forloop中绘制的内容_Matlab - Fatal编程技术网

过滤在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

我正试图让这段代码中的一个特定点更优雅一点。我是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 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是新手,所以完全有可能是我把它搞砸了。