Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Prostowinik dwupolokowy na mostku Gretza - metoda numeryczna

09 Sty 2008 23:27 2309 6
  • Poziom 10  
    Witam ,
    Problem dotyczy napisania programu napisania programu w Borlad Builder C++ ,ktory bedzie rysowal przebiegi napiec i prodow w tym ukladzie. Metoda Eulera . Jednak prowadzac powiedzial ze samo rysowanie wykresow moze juz sie odbywac w Exelu jednak program musi to obliczyc . Myslalem nad metoda potencjalow wezlowych,zeby to rozwiazac jednak nie moge tego ruszyc
    Bede wdzieczny za okazana pomoc i wszelki jej proby :] Wszelkie wskazowki co do rozwiazania problemu mile widziane
    pozdrawiam

    oto uklad
    https://obrazki.elektroda.pl/33_1199917260.jpg
  • Pomocny post
    Poziom 43  
    Witam,
    snajpersky napisał:
    Witam ,
    Problem dotyczy napisania programu napisania programu w Borlad Builder C++ ,ktory bedzie rysowal przebiegi napiec i prodow w tym ukladzie. Metoda Eulera . Jednak prowadzac powiedzial ze samo rysowanie wykresow moze juz sie odbywac w Exelu jednak program musi to obliczyc . Myslalem nad metoda potencjalow wezlowych,zeby to rozwiazac jednak nie moge tego ruszyc

    Prawa Kirchhoffa dla przebiegów chwilowych są zawsze słuszne... i nic więcej Tobie nie pozostało.
    Metoda Potencjałów Węzłowych i owszem, ale jak wyżej byłem napisałem, dla wartości chwilowych.
    Obwód jest nieliniowy - prostownik - i inaczej nie da się... Transformata Laplace'a z tego powodu odpada... :cry:

    snajpersky napisał:
    Bede wdzieczny za okazana pomoc i wszelki jej proby :] Wszelkie wskazowki co do rozwiazania problemu mile widziane
    pozdrawiam

    oto uklad
    https://obrazki.elektroda.pl/33_1199917260.jpg

    Tyle tylko, że "wyważasz już dawno otware drzwi...". Patrz "kuchnia" np. programu symulacyjnego PSpice... :D

    Pozdrawiam
  • Poziom 10  
    tak wyglada uklad zastepczy wg eulera ,zamiast transformatora dalej tylko zrodlo bo nieporzebnie zwiekszylo by to liczbe potencjalow ,a co w konsekwencji rozmiary macierzy;
    teraz zeby tylko wykresy dobrze program rysowal i bedzie bajka
    Jest jakis dobry sposob na inwesje macierzy w C++ ?

    pozdrawiam Quarz

    Prostowinik dwupolokowy na mostku Gretza - metoda numeryczna
  • Pomocny post
    Pomocny dla użytkowników
    Jeżeli używasz nieliniowych modeli diod to będziesz miał dwie pętle w obliczeniach:

    - zewnętrzna dla kroków czasowych

    - wewnętrzna związana z linearyzacją charakterystyk diod i uzyskaniem
    iteracyjnie rozwiązania układu równań nieliniowych np. metodą Newtona-Raphsona
  • Poziom 10  
    w MATLABie zalwil mi to znajomy w takie sposob

    R=100; % rezystancja
    C=0.00015; % pojemność
    Rw=10; % rezystancja wewnętrzna żródła
    Em=10; % amplituda napięcia
    h=0.001; % krok iteracji
    f = 50; % czestotliwosc
    cmax = 100; % krok zewnętrznej pętli
    dmax = 500; % krok wewnętrznej pętli

    % Obliczenia
    % -------------------------------------------------------------------------
    G=1/R; % konduktancja
    Gw=1/Rw; % konduktancja wewnętrzna żródła
    Gc=C/h; % konduktancja cewki
    t=0; J=Em*Gw*sin(2*pi*f*t); % wartość napięcia


    V = zeros(3,1);
    wek_id1 = zeros(1,cmax);
    wek_id2 = zeros(1,cmax);
    wek_id3 = zeros(1,cmax);
    wek_id4 = zeros(1,cmax);
    wek_V1 = zeros(1,cmax);
    wek_V2 = zeros(1,cmax);
    wek_V3 = zeros(1,cmax);
    prad_zrodla = zeros(1,cmax);

    % Pętle iteracji
    % -----------------------------------------------------------------
    for krokc=1:cmax
    Jc=Gc*(V(2)-V(3));
    for krokd=1:dmax
    id1=0.1*(exp(10*(V(1)-V(2)))); % prąd diody 1
    Gd1=exp(10*(V(1)-V(2))); % konduktancja diody 1
    Jd1=id1-Gd1*(V(1)-V(2));
    id2=0.1*(exp(10*(V(3)-V(1)))); % prąd diody 2
    Gd2=exp(10*(V(3)-V(1))); % konduktancja diody 2
    Jd2=id2-Gd2*(V(3)-V(1));
    id3=0.1*(exp(10*(-V(2)))); % prąd diody 3
    Gd3=exp(10*(-V(2))); % konduktancja diody 3
    Jd3=id3-Gd3*(-V(2));
    id4=0.1*(exp(10*V(3))); % prąd diody 4
    Gd4=exp(10*V(3)); % konduktancja diody 4
    Jd4=id4-Gd4*V(3);

    V=(inv([Gw+Gd1+Gd2 -Gd1 -Gd2; -Gd1 Gd1+G+Gc+Gd3 -G-Gc; -Gd2 -G-Gc Gd2+G+Gc+Gd4]))* [J+Jd2-Jd1; Jd1+Jc+Jd3; -Jd2-Jc-Jd4];
    end
    wek_id1(krokc) = id1;
    wek_id2(krokc) = id2;
    wek_id3(krokc) = id3;
    wek_id4(krokc) = id4;
    wek_V1(krokc) = V(1);
    wek_V2(krokc) = V(2);
    wek_V3(krokc) = V(3);
    t=krokc*h;
    J=Em*Gw*sin(2*pi*f*t);
    prad_zrodla(krokc)=J;
    end


    tyle ze brakuje mi tej inwersji z Matlaba co by znacznie ulatiwlo napisanie programu w C++ , oraz przydanej funkcji exp

    Edit:
    potega zalatwiona tylko
    #include <math.h>

    pow(x,y)

    gdzie x=2,71; :)
  • Pomocny post
    Pomocny dla użytkowników
    Odwracanie macierzy można zastąpić rozwiazywaniem układu równań metoda np. eliminacji Gaussa, a na to są materiały w Internecie (na odwracanie macierzy z resztą też)

    A funkcji Exp = e^x to tam nie ma ? Pow liczy dłużej poza tym nie podawaj zbyt krótkich wartości e, bo możesz mieć problemy ze zbieżnością iteracji NR
  • Poziom 10  
    faktycznie jest exp :) a z macierzami juz cos tam znalazlem
    dzieki pozdrawiam

    teraz pozostaje walka z kodem