【发布时间】:2019-04-24 17:50:53
【问题描述】:
因此,我正在尝试求解描述电力系统响应和稳定性的 ODE。精确的方程式和理论并不重要。正如标题所示,我希望 ode 求解器根据 IF 条件更改某些参数。代码如下:
clear;
E = 10;
X = 10;
R = 0;
T = 5; % Time Constant
tmax = 100;
G0 = 0; % Initial Value
Psc = E^2/X;
P0 = 1.25*Psc; % Power Losses
G = 0:0.001:2;
a = tand (0);
V = E ./ sqrt( (1+R*G+a*X*G).^2 + (X*G-a*R*G).^2 );
P = E^2*G ./ ( (1+R*G+a*X*G).^2 + (X*G-a*R*G).^2 );
% ODE Numerical Solution
[t23, Gsol23s] = ode23s(@(t, G) P0/T - G* (E ./ sqrt( (1+R*G+a*X*G).^2 ...
+ (X*G-a*R*G)).^2 )^2, [0 tmax], G0);
Vsol23s = E ./ sqrt( (1+R*Gsol23s+a*X*Gsol23s).^2 ...
+ (X*Gsol23s-a*R*Gsol23s).^2 );
Psol23s = E^2*Gsol23s ./ ( (1+R*Gsol23s+a*X*Gsol23s).^2 ...
+ (X*Gsol23s-a*R*Gsol23s).^2 );
figure;
plot(P/Psc, V/E, 'linewidth', 3);
hold on;
grid on;
plot(Psol23s/Psc, Vsol23s/E, 'linewidth', 2);
xlabel('P/Psc'); ylabel('V/E')
figure;
plot(t23, Vsol23s/E, t23, Psol23s/Psc, t23, Gsol23s*X)
legend('V/E', 'P/Psc', 'G*B');
我希望,每次 V 都小于 0.95*E,将 a 减少 5。所以类似于:
if Vsol23s << 0.95*E
a = a - 5;
end
我现在知道,ode 首先求解 Gsol23s,然后计算 Vsol23s。有什么办法吗?
非常感谢任何想法。
编辑 1: 一次给出一个 ode 步骤(而不是 tspan 的整个矩阵)的解决方案可以解决问题,但我不知道这是否可能。
【问题讨论】:
-
使用事件和解决方案延续方法。保持 ODE 函数简单流畅。