Do transformatora o zwojach doprowadzony jest prąd zmienny o napięciu i częstotliwości . W modelowaniu jego pracy [7, Chapter 6, APP10] wykorzystuje się równanie różniczkowe opisujące zmiany natężenia prądu w czasie:
(6.1) |
Parametry oraz zależą od konkretnego transformatora. Podobne równanie rozwiązuje się, modelując np. zjawisko tzw. ferrorezonansu w dużych sieciach transformatorów wysokiego napięcia, lecz wtedy czasem człon nieliniowy zastępuje się wyższą nieparzystą potęgą , np. [18].
Niech warunek początkowy będzie postaci . Naszym celem jest
narysowanie wykresu dla dla przypadku , , , , ;
zbadanie wpływu niewielkich zmian parametru na przebieg rozwiązania.
Aby rozwiązać (6.1), zastosujemy standardowy solver równań różniczkowych z Octave, lsode
. Po sprowadzeniu równania do układu dwóch równań pierwszego rzędu,
określamy funkcję wyznaczającą wektor prawej strony (przy umowie, że ):
E = 165; omega = 120*pi; N = 600; omega02 = 83; b = 0.14; oEN = (omega*E)/N; transf = @(y,t) [y(2); -y(1)*(omega02 + b*y(1)^2) + oEN*cos(omega*t)];
Numeryczne rozwiązanie i wykres (czyli pierwszej współrzędnej wektora ) wyznaczymy stosując proste komendy:
y0 = [0;0]; % warunek początkowy K = 100; % rozdzielczość wykresu t = linspace(0,5,K); y = lsode(transf, y0, t); plot(t, y(:,1)); % rysujemy tylko pierwszą współrzedną
Uzyskany przez nas na rysunku 6.1 wykres — regularny, ,,optycznie prawie periodyczny” — zdaje się sensowny. Jednak — pamiętając o tym, że niektóre zadania mogą być numerycznie trudne, a ich rozwiązania zwodniczo eleganckie — na wszelki wypadek zastosujemy inżynierski chwyt, polegający na weryfikacji rozwiązania poprzez drastyczne zaostrzenie kryteriów tolerancji błędu.
Aby to osiągnąć, musimy nieco pomanipulować przy parametrach pracy lsode
. Najpierw zapamiętamy bieżące wartości tolerancji błędu14Przypomnijmy na wszelki wypadek, że ustalenie wartości tych parametrów nie spowoduje bynajmniej, że uzyskane rozwiązanie będzie obarczone właśnie takim błędem; faktyczna rola parametrów tolerancji błędu jest opisana specjalistycznej literaturze, np. w [9]. względnego i bezwzględnego:
rtol = lsode_options('relative tolerance'); atol = lsode_options('absolute tolerance');
Następnie ustalimy nowe wartości na poziomie razy(!) mniejszym:
lsode_options('relative tolerance', rtol*1e-4); lsode_options('absolute tolerance', atol*1e-4);
i na nowo uruchomimy tą samą symulację:
y = lsode(transf, y0, t); plot(t, y(:,1)); % na zakończenie przywracamy poprzednie wartości parametrów lsode lsode_options('relative tolerance', rtol); lsode_options('absolute tolerance', atol);
Choć na wyniki przyjdzie nam czekać znacznie dłużej niż poprzednio — wszak utrudniliśmy pracę solverowi! — efekt, który możemy sprawdzić na rysunku 6.2, dość przekonująco potwierdza, że solver nie oszukał nas poprzednim razem i wyznaczone rozwiązanie jest praktycznie identyczne.
Zatem na podstawie uzyskanego wykresu możemy skonkludować, że nasz transformator ma na tyle dużą bezwładność, że — choć w jego pracy pojawiają się oscylacje — przebiegają one łagodnie. W badanym okresie czasu natężenie tylko dwa razy (pięć, jeśli darować sobie drobne różnice) przyjęło maksymalną wartość.
Jednak otrzymany przez nas wykres jest — w potocznym rozumieniu — całkowicie błędny! Zapomnieliśmy bowiem o innym zjawisku: o aliasingu, czyli niebezpieczeństwie wyciągnięcia błędnych wniosków o przebiegu funkcji w przypadku zbyt małej liczby punktów próbkowania jej wartości. Rzeczywiście, powinni byliśmy na wszelki wypadek zbadać, czy zwiększenie rozdzielczości wykresu nie spowoduje jego wyraźnej zmiany….
Zatem zobaczmy. Wybierzemy — zamiast punktów wykresu, jak dotychczas — na początek równoodległych punktów:
K = 300; t = linspace(0,5,K); y = lsode(transf, y0, t); plot(t, y(:,1));
Hmmm… dostaliśmy wykres (zob. rysunek 6.3), w żaden sposób nie przypominający rysunku 6.1, który jeszcze przed chwilą wydawał nam się tak sensowny… A przecież jedynym zmienionym parametrem była liczba punktów próbkowania rozwiązania: zatem diagnoza jest jasna: faktycznie, mamy aliasing.
No dobrze, zatem który z wykresów jest prawidłowy? Możemy powtórzyć nasz chwyt i próbkować w punktach (zob. rysunek 6.4), ale… może lepiej postąpić nieco bardziej metodycznie, zwłaszcza, że za chwilę możemy natknąć się na barierę rozdzielczości… naszego ekranu komputerowego?
Już przekonaliśmy się, że (zapewne) nasz solver, lsode
, nie ma większych kłopotów z aproksymacją rozwiązania. Pozostaje więc przekonać się, kiedy niewielkie zwiększanie (lub, co — w świetle powyższego — na jedno wychodzi, zmniejszenie) rozdzielczości wykresu przestanie powodować istotną zmianę wykresu rozwiązania.
Gdybyśmy bowiem wcześniej choć chwilę zastanowili się nad charakterem naszego równania, zobaczylibyśmy, że jego prawa strona — zewnętrzne wymuszenie — jest postaci , czyli, dla naszych danych, postaci . Nawet intuicyjnie jest jasne, że próbkowanie wartości rozwiązania powinniśmy dopasować do tej częstości. W interesującym nas przedziale czasowym takie wymuszenie będzie miało ekstremów, więc — biorąc skromnie po 10 węzłów pomiędzy jednym a drugim ekstremum — powinniśmy użyć około 7000 węzłów, by ustawić wstępną (minimalną sensowną?) rozdzielczość wizualizacji.
Naturalnie, możemy dodatkowo oprzeć się na naszej wiedzy dla liniowych równań różniczkowych. W przypadku drgania będą miały dwie składowe: wolnozmienną postaci (być może z jakimś przesunięciem fazowym), związaną z rozwiązaniem ogólnym jednorodnego równania oscylatora harmonicznego — oraz składową szybkozmienną, postaci , będącą rozwiązaniem szczególnym równania niejednorodnego. W naszym przypadku, da to coś w stylu — zatem faktycznie musimy dostosować rozdzielczość wizualizacji co najmniej do najszybciej zmieniającego się składnika, .
Aby utwierdzić się w naszych przypuszczeniach, zrealizujemy w pętli wyświetlanie rozwiązania, oryginalnie wypróbkowanego w bardzo wielu punktach (), nie zważając na rozdzielczość monitora, która zapewne nie przekracza 2000 pikseli w poziomie, na coraz rzadszej siatce węzłów:
K = 5000; t = linspace(0,T,K); % highest possible resolution y = lsode(transf, y0, t); % reference solution plot(t,y(:,1)); title('Reference plot'); pause(3); P = 1; for k = [1:10] plot(t(P:k:end),y(P:k:end,1)); title(['Reference plot for K = ',num2str(K),', every ',num2str(k),'th point']); pause(3); end
Ta seria wykresów przekonuje nas jasno, że rozwiązanie zmienia się zbyt szybko, by było czytelnie wizualizowane na odcinku — zob. rysunek 6.5. Ponadto faktycznie wydaje się, że obserwujemy zjawisko nakładania się szybkozmiennej składowej na składową wolnozmienną. Obie te obserwacje skłaniają więc nas do tego, by przyjrzeć się dokładniej wykresowi ograniczonemu do znacznie węższego zakresu : wybieramy ,,na oko” okno o szerokości oryginalnego przedziału, zlokalizowane na jego końcu.
P = floor(0.95*K); % ostatnie 5% wykresu for k = [1:10] plot(t(P:k:end),y(P:k:end,1)); title(['Reference plot for K = ',num2str(K),', every ',num2str(k),'th point']); pause(3); end
Strzał okazał się znakomity (rysunek 6.6) — wydaje się, że przy oryginalnej rozdzielczości (której w zawężonym przedziale długości odpowiadało 250 węzłów) udało się zlokalizować najważniejsze cechy rozwiązania: wszystko bowiem wskazuje na to, że rozwiązanie ma w badanym zawężonym przedziale około 20 równomiernie rozmieszczonych ekstremów.
Możemy teraz potwierdzić swoje przypuszczenie, biorąc (czemu odpowiada 1000 węzłów w zawężonym przedziale) i sprawdzając tam przebieg rozwiązania.
Jak oglądać ostatnie 5% rozwiązania, ale bez idącego w tysiące (dziesiątki tysięcy)?
E = 165; omega = 120*pi; N = 600; omega02 = 83; b = 0.14; oEN = (omega*E)/N; transf = @(y,t) [y(2); -y(1)*(omega02 + b*y(1)^2) + oEN*cos(omega*t)]; y0 = [0;0]; T = 5; % high voltage transformer % E = 0.15*63.5e3; C = 777; R = 48.4e3; % omegaS = 377/(2*pi); omega02 = (53/(2*pi))^2; omega22 = (85/(2*pi))^2; % duff = @(y,t) [y(2); ... % omegaS*E*cos(omegaS*t)-y(1)*omega02-omega22*y(1)^3-y(2)/(R*C) ]; K = 100; t = linspace(0,T,K); rtol = lsode_options('relative tolerance'); atol = lsode_options('absolute tolerance'); y = lsode(transf,y0, t); plot(t,y(:,1)); pause(3); print('-depsc','duffing-aliasing.eps'); lsode_options('relative tolerance', rtol*1e-4); lsode_options('absolute tolerance', atol*1e-4); y = lsode(transf,y0, t); plot(t,y(:,1)); pause(3); print('-depsc','duffing-aliasing-hires.eps'); lsode_options('absolute tolerance', atol); lsode_options('relative tolerance', rtol); K = 300; t = linspace(0,T,K); y = lsode(transf,y0, t); plot(t,y(:,1)); pause(3); print('-depsc','duffing-aliasing-300.eps'); K = 600; t = linspace(0,T,K); y = lsode(transf,y0, t); plot(t,y(:,1)); pause(3); print('-depsc','duffing-aliasing-600.eps'); K = 5000; t = linspace(0,T,K); % highest possible resolution y = lsode(transf, y0, t); % reference solution plot(t,y(:,1)); title('Reference plot'); pause(3); print('-depsc','duffing-reference.eps'); P = 1; for k = [1:10] plot(t(P:k:end),y(P:k:end,1)); title(['Reference plot for K = ',num2str(K),', every ',num2str(k),'th point']); pause(1); end P = floor(0.95*K); % ostatnie 5% wykresu for k = [1:10] plot(t(P:k:end),y(P:k:end,1)); title(['Reference plot for K = ',num2str(K),', every ',num2str(k),'th point']); pause(1); end plot(t(P:end),y(P:end,1)); print('-depsc','duffing-reference-zoom20.eps'); fy = fft(y(:,1)); % fourier transform on phi fy(1) = []; % pierwsza wspolrzedna to suma wartosci y i jest nieistotna nyq = T/2; freq = (1:K/2)/(K/2)*nyq; semilogx(freq,abs(fy(1:K/2))); % verifyduffing;
Naszym drugim celem jest zbadanie wrażliwości rozwiązania na małe zmiany . Otóż korzystając z poprzednio opracowanego kodu i stopniowo zmniejszając aż do widzimy, że rozwiązanie różni się niewiele od dotychczas rozważanego. Możemy więc przypuszczać, że (dla małych wartości ) rozwiązania zależą w sposób ciągły od tego parametru, a linearyzacja modelu jest tu najprawdopodobniej uzasadniona.
Tu kończy się etap obliczeń naukowych — uprawiania ,,matematyki” eksperymentalnej: teraz powinniśmy przejść do dowodzenia twierdzeń. Czy jesteś w stanie udowodnić powyższe własności rozważanego równania?
Warto na zakończenie wspomnieć, że — choć sprawiły nam niejakie kłopoty — rozwiązania naszego równania przy danych wartościach parametrów zachowywały się bardzo przyzwoicie. Tymczasem dla innych zestawów parametrów może być znacznie gorzej. Równanie tej postaci jest znane pod nazwą równania Duffinga (z periodycznym wymuszeniem). Modeluje ono nie tylko pracę transformatora, ale także działanie pewnych układów mechanicznych. W ogólnym przypadku jest ono postaci
i jest znanym przykładem zadania różniczkowego, które dla pewnych wartości i może mieć chaotycznie zachowujące się rozwiązania, a to oznacza, że nieunikniony błąd numerycznej aproksymacji szybko spowoduje przeskok na odległą od rzeczywistej trajektorię i całkowitą utratę jakości rozwiązania.
W modelu sieci energetycznej z transformatorami wysokonapięciowymi pojawia się równanie opisujące wartość natężenia prądu w chwili , postaci [18]
Równanie uzupełnione jest warunkiem początkowym . Dla wartości parametrów: , , , , , , , wyznacz przebieg w ciągu pierwszych 5 minut.
Treść automatycznie generowana z plików źródłowych LaTeXa za pomocą oprogramowania wykorzystującego LaTeXML.
strona główna | webmaster | o portalu | pomoc
© Wydział Matematyki, Informatyki i Mechaniki UW, 2009-2010. Niniejsze materiały są udostępnione bezpłatnie na licencji Creative Commons Uznanie autorstwa-Użycie niekomercyjne-Bez utworów zależnych 3.0 Polska.
Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego.
Projekt współfinansowany przez Ministerstwo Nauki i Szkolnictwa Wyższego i przez Uniwersytet Warszawski.