[如何使用ode23s在MATLAB中使用FOR循环编写一个程序来调用100个周期的微分方程?

问题描述 投票:0回答:1

我的代码写为:

for i=1:1
[T,Y]=ode23s(@(T,X)sys(T,X,vin),[t0 .00025],X(:,1)) 
vin =-12;
[T1,Y1]=ode23s(@(T,X)sys(T,X,vin),[.00025 .0005],Y(end,:))
vin=12
[T2,Y2]=ode23s(@(T,X)sys(T,X,vin),[.0005 .00075],Y1(end,:))
vin=-12
[T3,Y3]=ode23s(@(T,X)sys(T,X,vin),[.00075 .001],Y2(end,:))
end
Tf=[T;T1;T2;T3];
Xf=[Y;Y1;Y2;Y3];

现在我需要使用for循环执行100个周期,直到Y50和T50我该怎么办?

matlab for-loop ode
1个回答
0
投票

放入另一个循环中

sct = t0:.00025:.001;
len = length(sct)-1;

vin =-12;

for i = 1:1
    % preallocate memory
    T = NaN(1,len);
    Y = NaN(size(X,1),len);
    Y(:,1) = X(:,1);
    for j = 1:len
        [tmpT,tmpY]=ode23s(@(T,X)sys(T,X,vin),sct(j:j+1),Y) 
        T(j) = tmpT;
        Y(:,j) = tmpY;
    end

    %TODO: do something with T & Y otherwise it will get overwritten in the next iteration of i
end
© www.soinside.com 2019 - 2024. All rights reserved.