82a6d74d创建于 2025年4月30日历史提交
% synchronous_boost_converter_example.m

cd(fileparts(which('synchronous_boost_converter_example.m')));

tstart = 0;
n = 2000;
tend = 5e-4;

%% fixed-step synchronous solver test

clear qtr_sync1

% qtr_sync1 = synctrcircuit('m-test-2.net');
qtr_sync1 = synctrcircuit('boostconverter.net');

qtr_sync1.init(tstart);

% get the number of nodes
N = qtr_sync1.getn;

% get the number of voltage sources
M = qtr_sync1.getm;

% choose some time points
T1 = linspace(tstart, tend, n)';

Y1 = zeros(numel(T1), M+N);
Y1(1, 1:(N+M)) = qtr_sync1.getsolution();

for ind = 2:numel(T1)
    
    fprintf(1, 't: %f\n', T1(ind));
    
    qtr_sync1.stepsolve(T1(ind));
    
    Y1(ind, 1:(N+M)) = qtr_sync1.getsolution();

	qtr_sync1.acceptstep(T1(ind));
    
%     qtr_sync.printx()

end

figure; plotyy(T1, Y1(:,1:N), T1, Y1(:,((N+1):(N+M))));

%% ode test

clear qtr_sync2

% dbstop in synctrcircuit.m at 203
% dbstop in synctrcircuit.m at 218
% dbstop in synctrcircuit.m at 220

% qtr_sync2 = synctrcircuit('m-test-2.net');
qtr_sync2 = synctrcircuit('boostconverter.net');

qtr_sync2.init(tstart);

y0 = qtr_sync2.getsolution();

odeopts = odeset( 'OutputFcn', @synctrcircuit.odeoutputfcn, ...
                  'InitialStep', (tend-tstart)/n/2, ...
                  ... 'MaxStep', (tend-tstart)/n, ...
                  'Refine', 1, ...
                  'RelTol', 1e-2);

[T2, Y2] = ode15s( @synctrcircuit.odefcn, [ tstart+(0.001)*tstart, tend ], y0, odeopts, qtr_sync2);

figure; plotyy(T2, Y2(:,1:N), T2, Y2(:,((N+1):(N+M))));


%% comparison


figure; plot(T1, Y1(:,3), 'r', T2, Y2(:,3), 'b');