0

我有一个 ODE 函数,我试图用不同的参数多次求解。这是功能

function xdot=SB(t,x)
global ps f R0
S=.0725 ; 
rhoL=998; 
vL =1.0e-3;
c = 1481; 
pvtinf=0 ; 
pinf0=1.01e5;
k =7/5; 
xdot(1,1)=x(2);
xdot(2,1)=((-0.5*x(2)^2)*(3-x(2)/(c))+(1+(1-3*k)*x(2)/c)*((pinf0-pvtinf)/rhoL+2*S/(rhoL*R0))*(R0/x(1))^(3*k)-2*S/(rhoL*x(1))-4*vL*x(2)/(rhoL*x(1))-(1+x(2)/c)*(pinf0-pvtinf+ps*sin(2*pi*f*t))/rhoL-ps*x(1)*cos(2*pi*f*t)*2*pi*f/(rhoL*c))/((1-x(2)/c)*x(1)+4*vL/(rhoL*c));

这是我用来通过更改函数中的变量来多次求解的求解器。

clc;clear;
global ps f R0
R=[1 2 3 4 5 6 7].*1e-6;
options= odeset('RelTol',1e-12,'AbsTol',1e-13);
f=2e6;
ps=100e3;

for i=1:length(R)
    R0=R(i);
    [t{i},x{i}]=ode45(@SB,(0:0.01/f:5/f),[R0 0],options);
end

figure()
for i=1:length(R)
    plot(t{i},x{i}(:,1))
hold on
end
hold off 
grid on

在这种情况下,我正在更新 R0。在其他情况下,我正在更新 f 或 ps (全局变量)。我正在尝试使用 PARFOR 来加快速度,但是在使用 PARFOR 时我找不到将这些全局变量传递给函数的方法。

提示 ?

4

0 回答 0