尝试更改参数的值相对于时间,并从sym转换为逻辑是不可能的'错误

1查看(最近30天)
你好,
我想改变两个常量的值,这是一个u和p,在下面的代码中的时间。我试图通过使用if但是从sym转换为逻辑的转换是不可能的。错误。我该如何解决这个问题?
功能redfun.
Syms.TS(t)TGI(T)TGO(T)T_F(T)TR(T)PR(T)TRI(T)TRI(T)COR(T)C(T)ROO(T)RHO(T)RHOI(T)RHOE(T)ROOE(T)TAU_1K_1d tau_2 k_2 tau_3 tau_4 tau_5 beta1 hehe lam_p alfa_f alfa_m rho_0 k_3 u p
eqn1 = diff(ts(t),1)==(--ts(t)/ tau_1)+(tgi(t)/ tau_1)-k_1 * p;
EQN2 = TGO(T)==((2 * D *(Ts(t)/(d + 2))) - ((d-2)* tgi(t))/(d + 2));
eqn3 = diff(t_f(t),1)==(-t_f(t)/ tau_2)+(tr(t)/ tau_2)+ k_2 * pr(t);
eqn4 = diff(tr(t),1)==(-tr(t)/ tau_3)+(t_f(t)/ tau_4)+(tri(t)/ tau_5);
eqn5 = tro(t)== 2 * tr(t)-tri(t);
eqn6 = diff(pr(t),1)==((rho(t)-beta1)* pr(t)/ hehe)+(lam_p * c(t));%pr.
eqn7 = diff(c(t),1)==(beta1 * pr(t)/ hehe) - (lam_p * c(t));%C
eqn8 = tgi(t)== tro(t);
eqn9 = tri(t)== tgo(t);
eqn10 = rho(t)== rhoi(t)+ rhoe(t);
eqn11 = rhoi(t)== alfa_f * t_f(t)+ alfa_m * tr(t);
eqn12 = rhoe(t)== rho_0-k_3 * u;
EQNS = [EQN1 EQN2 EQN3 EQN4 EQN5 EQN6 EQN7 EQN8 EQN9 EQN10 EQN11 EQN12];
vars = [ts(t);TGI(T);TGO(T);t_f(t);tr(t);Pr(t);三(t);小跑);c(t);rho(t); rhoi(t); rhoe(t)];
Origvars =长度(vars)
%m = incidencematrix(eqns,vars)
%m = 9x9
[eqns,vars] = Depositififerensorder(EQN,var)
Islowindexdae(EQNS,VARS)
[daes,daevars] = stedaeIndex(eqns,vars)
[Daes,Daevars] = Reduceedundies(Daes,Daevars)
islowindexdae(daes,daevars)
pdaes = symvar(daes);
pdaevars = symvar(daevars);
extraparams = setdiff(pdaes,pdaevars)
f = Daefunction(daes,daevars,tau_1,k_1,d,tau_2,k_2,tau_3,tau_4,tau_5,beta1,hehe,lam_p,alfa_f,alfa_m,rho_0,k_3,u,p);
tau_1 = 11.3;%S.
tau_2 = 5.58;%S.
tau_3 = 2.03;%S.
tau_4 = 80.5;%S.
tau_5 = 2.08;%S.
d = 1.078;
K_1 = 3.74;%摄氏度/ s
K_2 = 102.7;%摄氏度/ s
K_3 = 2.34 * 10 ^ -5;%deltak / k *步骤
rho_0 = 9.2852 * 10 ^ -2;%deltak / k
beta1 = 6.5 * 10 ^ -3;
Hehe = 3 * 10 ^ -5;%S.
LAM_P = 0.0784;%s ^ -1
Alfa_f = -2 * 10 ^ -5;%deltak / k *摄氏度
Alfa_m = -25 * 10 ^ -5;%deltak / k *摄氏度
%U = 235;%步骤
如果t <= 4.6
u = 420;
p = 0.7;
别的
u = 235;
p = 1;
结尾
%p = 1;%蒸汽流向涡轮机(必须在0到1之间)
f = @(t,y,yp)f(t,y,yp,tau_1,k_1,d,tau_2,k_2,tau_3,tau_4,tau_5,beta1,hehe,lam_p,alfa_f,alfa_m,rho_0,k_3,u,P);
Daevars.
y0est = [277;300;400;600;300;0.5;0;0];%初步猜测
YP0EST =零(8,1);
选择= odeset('Reltol',10.0 ^( - 7),'ABSTOL',10.0 ^( - 7));
[y0,yp0] = decic(f,0,y0est,[],yp0est,[],选择)%初始条件
[TSOL,YSOL] = ODE15i(F,[0 100],Y0,YP0,OPT);
情节(TSOL,YSOL(:,6),'行宽'2)
为了k = 1:8
s {k} = char(daevars(k));
结尾
传奇(S,'地点''最好的事物'
网格
结尾

接受答案

沃尔特罗伯森
沃尔特罗伯森 20月15日
你不能采取你正在服用的方法。相反,您需要将ODE15i调用分解为两个时间范围,通过适当的U和P在时间范围内。第一时间范围的最后一个输出变为第二个范围的Y0。
2评论
沃尔特罗伯森
沃尔特罗伯森 20月15日
目前,我不知道如何获得更新的yp0传递。如果您使用的是ode45或类似的,则只需提取Y输出的最后一个结果并将其传递为y的新边界条件。我之前没有使用ODE15i,所以我不知道等效方法是什么。

登录评论。

更多答案(0)

类别

社区宝藏狩猎

找到Matlab Central中的宝藏,并发现社区如何帮助您!

开始狩猎!