logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Jak napisać model iteracyjny pojemności w MatLabie?

witek2323 04 Gru 2009 20:58 1267 2
REKLAMA
  • #1 7345738
    witek2323
    Poziom 12  
    Posty: 106
    Pomógł: 4
    Ocena: 3
    Witam,

    Mam za zadanie napisać model iteracyjny indukcyjności, oraz pojemności. Z tą pierwszą jakoś sobie poradziłem, oto dobrze działający skrypt w MatLabie:
    
    f=50;
    R1=100;
    L=2;
    h=1/f/100;
    G1=1/R1;
    G2=h/L;
    R2=1/G2;
    iL=0;
    for i=1:1000
        E=30%*sin(2*pi*h*i*f);
        G=[G1+G2];
        I=[E/R1-iL];
        V=inv(G)*I;
        iL=V(1)/R2+iL;
        x(i)=i;
        y(i)=V(1)*G2+iL;
        v(i)=V(1);
    end
    plot(x, y);
    title('Prąd i');
    figure
    plot(x, v);
    title('Napięcie');
    


    Co do pojemności jest mały problem, napisałem taki skrypt:
    
    f=50;
    R1=100;
    C=0.0002;
    h=1/f/100;
    G1=1/R1;
    G2=C/h;
    R2=1/G2;
    uC=0;
    iC=0;
    for i=1:1000
        E=30;
        G=[G1+G2];
        I=[E/R1+iC];
        V=inv(G)*I;
    
        iC=-uC*G2+G2*V(1);
        
        x(i)=i;
        y(i)=iC;
        z(i)=V(1);
    end
    plot(x, y);
    title('Prąd i');
    figure
    plot(x, z);
    title('Napięcie');
    

    Kondensator pięknie się ładuje, niestety prąd zamiast maleć rośnie wraz z napięciem. Bardzo zależy mi na rozwiązaniu tego zadania. Rozwiązanie nie koniecznie musi być w postaci skryptu MatLab, może być dowolny język lub jako schemat blokowy. Po prostu MatLab wybrałem ze względu na prostą implementację.

    Jeszcze jedno:
    Pisząc model iteracyjny pojemności i indukcyjności mam to na myśli układy szeregowe RL, oraz RC.

    Z góry dziękuje za wszelką pomoc.
    Pozdrawiam.
  • REKLAMA
  • Pomocny post
    #2 7349806
    qrdel
    Poziom 28  
    Posty: 1074
    Pomógł: 100
    Ocena: 71
    Wybacz ale odwracanie macierzy o wymiarze 1 mnie dobiło, nie mam siły się starać rozumieć.

    Moje wzorki:
    Ul=-L*dI/dt >> I(n)=I(n-1) + dI >> I(n)=I(n-1)+(Ul/L)/dt
    Ur+Ul=U

    Uc=Q/C
    Q=∫Idt >> Q(n)=Q(n-1)+I*dt

    
    % RL
    U=10; % for example 10V
    Ur=0;
    I=0;
    Ul=U;
    L=1;
    R=1;
    dt=0.01;  % time step 10 ms
    for j=1:1000
        I=I+Ul*dt/L;
        Ur=I*R;
        Ul=U-Ur;
        x(j)=j;
        y(j)=I;
        z(j)=Ul;
    end
    plot(x, y);
    title('Prąd i');
    figure
    plot(x, z);
    title('Napięcie'); 
    


    
    % RC
    U=10; % for example 10V
    Ur=0;
    Uc=0;
    I=0;
    Q=0;
    R=1;
    C=1;
    dt=0.01;  % time step 10 ms
    for j=1:1000
        Ur=U-Uc;
        I=Ur/R;
        Q=Q+I*dt;
        Uc=Q/C;
        x(j)=j;
        y(j)=I;
        z(j)=Uc;
    end
    plot(x, y);
    title('Prąd i');
    figure
    plot(x, z);
    title('Napięcie'); 
    


    Wyniki wychodzą sensowne.
  • #3 7359195
    witek2323
    Poziom 12  
    Posty: 106
    Pomógł: 4
    Ocena: 3
    Wielkie dzięki za pomoc, rzeczywiście wyniki są sensowne. Co do mojego odwracania macierzy to dlatego, że chciałem stworzyć w miarę uniwersalny algorytm, który liczył by także skomplikowane obwody wielowęzłowe.

    Pozdrawiam i jeszcze raz wielkie dzięki!

    Tak dla potomnych, w bardziej ogólnym przypadku model kondensatora wygląda tak:
    
    f=50;
    R1=1;
    C=0.01;
    h=1/f/100;
    G1=1/R1;
    G2=C/h;
    R2=1/G2;
    uC=0;
    iC=0;
    for i=1:1000
        E=30;
        G=[G1+G2];
        I=[E/R1+G2*uC];
        V=inv(G)*I;
        uC=V(1);
        iC=(E-uC)/(R1);;
        x(i)=i;
        y(i)=iC;
        z(i)=uC;
    end
    plot(x, y);
    title('Prąd i');
    figure
    plot(x, z);
    title('Napięcie');
    
    
REKLAMA