Ну, как я уже говорил, я не думаю, что есть способ сделать пошаговое решение, используя функцию ODExy Matlab. Я решаю проблему с помощью RK4, который имеет почти такое же решение, как ODExy, но, поскольку он не адаптивный, есть гораздо больше точек. Я представляю код, чтобы его могли использовать и другие.
Чтобы прояснить проблему, у нас есть система электроснабжения с индуктивной линией передачи без потерь (X = 10 Ом, R = 0 Ом) и нагрузкой. Параллельно этой нагрузке есть несколько конденсаторов, которые можно использовать, замыкая или открывая соответствующие переключатели. Таким образом, если мощность, потребляемая нагрузкой, достаточно высока, чтобы снизить напряжение нагрузки (VL) ниже 95% от напряжения источника (VS), заглушка подключается для увеличения VL путем компенсации реактивной мощности. Если VL> 105% VS, крышка отключается.
Д.Е. что дает поведение нагрузки: dG / dt = P0 / T - G (t) * V ^ 2 / T
clear;
E = 10; % Source Voltage
X = 10; % Line Impedance
Psc = E^2/X; % Short-Circuit Power
P0 = 0.4*Psc; % Power Losses
G = 0:0.001:2; % Load Conductivity
a = 0; % atand(0), load angle
% % Thevenin Theorem before Load Terminals
beta = 0;
Et = E/(1-beta); Xt = X/(1-beta);
betastep = 0.1;
betamat = 0:betastep:4*betastep;
for k = 1 : length(betamat)
Etmat(k) = E/(1-betamat(k));
Xtmat(k) = X/(1-betamat(k));
for j = 1:length(G)
V(k,j) = Etmat(k) ./ sqrt( (1+a*Xtmat(k)*G(j)).^2 ...
+ (Xtmat(k)*G(j)).^2 );
P(k,j) = V(k,j)^2*G(j);
end
end
% % % %
% Runge Kutta Method
% 4th Order
% % % %
tol = 1e-8; tmax = 10;
e = 1; i = 1; h = 0.0001;
T = 5; % Time Constant
Gsol(1) = 0;
t(1) = 0;
Vsol(1) = Et;
Psol(1) = 0;
% % ODE to be solved
dG = @(t,G) (P0 - G*Et^2/((1+a*G*Xt)^2 + (Xt*G)^2));
while e > tol && max(t) < tmax
% % In every cycle, if beta has changed, change the
% % corresponding values
Et = 1/(1-beta)*E; Xt = X/(1-beta);
dG = @(t,G) (P0 - G*Et^2/((1+a*G*Xt)^2 + (Xt*G)^2));
k1 = h*dG(t(i),Gsol(i));
k2 = h*dG(t(i)+h/2, Gsol(i)+k1/2);
k3 = h*dG(t(i)+h/2, Gsol(i)+k2/2);
k4 = h*dG(t(i)+h, Gsol(i)+k3);
Gsol(i+1) = Gsol(i) + 1/6 * (k1 + 2*k2 + 2*k3 + k4);
t (i+1) = t(i) + h;
Vsol(i+1) = Et / sqrt( (1+a*Xt*Gsol(i+1))^2 + (Xt*Gsol(i+1))^2 );
Psol(i+1) = Vsol(i+1)^2 * Gsol(i+1);
% % With Restriction
if Vsol(i+1) <= 0.95*E && beta < .1 && beta >= 0
beta = beta + betastep;
elseif Vsol(i+1) >= 1.05*E && beta < .1 && beta >= 0
beta = beta - betastep;
end
if beta < 0
beta = 0;
end
if beta < 0
beta = 0;
end
e = abs(Gsol(i+1) - Gsol(i));
i = i+1;
end
Vload = linspace(0, max(Vsol), length(Gsol));
figure;
hold on;
for k = 1:length(betamat)
plot(P(k,:)/Psc, V(k,:)/E, 'linewidth', 3);
end
grid on;
plot(Psol/Psc, Vsol/E, 'linewidth', 1.5);
plot(Gsol.*(Vload.^2)/Psc, Vload/E);
plot([P0/Psc P0/Psc], [0 1], 'k')
xlabel('P/Psc'); ylabel('V/E')
figure;
plot(t, Vsol/E, t, Psol/P0, t, Gsol*X)
grid on; legend('V/E', 'P/P0', 'G*X');
Надеюсь, это поможет!