Pomiar linii kodu źródłowego

Ściągnij & Rozpakuj & Uruchom przykład użycia oprogramowania cloc do pomiaru linii kodu źródłowego (metryka SLOC) dla prostego programu stworzonego w języku C.

Rozpatrywany kod źródłowy składa się z jednego pliku źródłowego .c i jednego pliku nagłówkowego .h

Liczba linii kodu źródłowego dla przykładu powyżej.

Skrypty uruchamiające program cloc (run.bat i countCodeLines.bat)

run.bat

countCodeLines.bat

Gotowe do uruchomienia archiwum pomiar liczby linii kodu.

Wartość skuteczna RMS

Wzór ogólny na wartość skuteczną (RMS – root mean square)
F_{RMS} = \sqrt{\frac{1}{T}\int_{0}^{T}{f^{2}(t)\cdot dt}}

Interpretacja tej wielkości na podstawie wartości skutecznej prądu.

u(t) = R \cdot i(t)

W = \int{p \cdot dt}
W = \int{u \cdot i \cdot dt}
W = R\cdot \int{ i^{2} \cdot dt}

gdzie:
W – praca
p – moc chwilowa
p = u \cdot i
u – napięcie chwilowe
i – prąd chwilowy

Jeżeli przebieg jest okresowy to

W_{T} = R\cdot \int_{0}^{T}{ i^{2} \cdot dt}

Wartość skuteczna jest to prąd stały który wydzieli tyle samo ciepła.

R\cdot \int_{0}^{T}{ i^{2} \cdot dt} = R \cdot I^{2} \cdot T
Dzieląc powyższe równanie obustronnie przez R
\int_{0}^{T}{ i^{2} \cdot dt} = I^{2} \cdot T
Następnie zamieniając strony tak aby wyznaczyć prąd stały I
I^{2} \cdot T = \int_{0}^{T}{ i^{2} \cdot dt}
Finalnie uzyskuje się

Wartość skuteczna prądu

I_{RMS} = \sqrt{\frac{1}{T}\cdot \int_{0}^{T}{ i^{2} \cdot dt}}

Wartość skuteczna napięcia

U_{RMS} = \sqrt{\frac{1}{T}\cdot \int_{0}^{T}{ u^{2} \cdot dt}}

GNU Octave – zamiennik programu Mathworks Matlab

Słowem wstępu należy zaznaczyć że istnieje bezpłatna alternatywa dla programu Matlab i jest to GNU Octave. GNU Octave niestety nie posiada w swojej paczce narzędzi zamiennika dla Simulink-a.

GNU Octave

W trakcie studiów na uczelniach wyższych, podczas laboratoriów lub pracowni komputerowych korzysta z się programów Mathworks Matlab lub Mathworks Simulink.

Mathworks Matlab

Niektóre uczelnie w Polsce posiadają/zapewniają dostęp słuchaczom do licencji dla studentów. Ale co zrobić kiedy nie ma takiej możliwości, wtedy pojawia się GNU Octave.

Pomiędzy GNU Octave a Mathworks Matlab występują pewne różnice w składni plików skryptowych tj. m-plików. Często pliki te są kompatybilne w obydwu środowiskach, czasami jednak wymagane będę pewne modyfikacje w kodzie skryptu.

Macierz rotacji

Macierz rotacji opisuje transformację pomiędzy dwoma układami współrzędnych. W przedstawionym przykładzie są dwa układy kartezjańskie {A} i {B}. Wyznaczona zostanie macierz rotacji opisują transformację z układu {B} do układu {A}. Znajomość takiej macierzy pozwala na przetransformowanie współrzędnych dowolnego wektora z układu {B} do układu {A}.

_{B}^{A}\bm{R}\left[ \begin{array}{ccc} \hat X_{B} \cdot \hat X_{A} & \hat X_{B} \cdot \hat Y_{A} & \hat X_{B} \cdot \hat Z_{A}\\ \hat Y_{B} \cdot \hat X_{A} & \hat Y_{B} \cdot \hat Y_{A} & \hat Y_{B} \cdot \hat Y_{A}\\ \hat Z_{B} \cdot \hat X_{A} & \hat Z_{B} \cdot \hat Y_{A} & \hat Z_{B} \cdot \hat Z_{A} \end{array} \right]

Wyrazy \hat X_{B}, \hat X_{A}, \hat Y_{B}, \hat Y_{A} , \hat Z_{B}, \hat Z_{A} są wersorami tj. wektorami jednostkowymi.

Kolejne wyrazy macierzy _{B}^{A}\bm{R} wyznaczane są w następujący sposób:

\hat X_{B} \cdot \hat X_{A} = |\hat X_{B}| \cdot |\hat X_{A}| \cos{\sphericalangle{(\hat X_{B},\hat X_{A})}}

Prąd i napięcie ładowania kondensatora w obwodzie prądu stałego

Wyznaczenie analitycznie równań na prąd i napięcie ładowania kondensatora w obwodzie prądu stałego.

Stan nieustalony podczas ładowania kondensatora - obwód elektryczny
Obwód RC prądu stałego

Równanie napięciowe dla rozpatrywanego obwodu
E - u_{R}(t)- u_{C}(t) = 0

Uwzględniając
u_{R}(t) = R \cdot i(t)
i_{C}(t) = C \cdot \frac{du_{C}(t)}{dt}

Rozpatrywany obwód jest szeregowym obwodem elektrycznym tj. przez każdy element w obwodzie przepływa ten sam prąd.
i(t) = i_{C}(t)

Otrzymuje się następujące równanie różniczkowe
E - R \cdot C \cdot \frac{du_{C}(t)}{dt} - u_{C}(t)

Rozwiązanie równania różniczkowego jest następującej postaci
Otrzymuje się następujące równanie różniczkowe
u_{C}(t) = E - (E - U_{C0})\cdot e^{-\frac{t}{T}}
gdzie stała czasowa T
T = R\cdot C
u_{C}(t) = E - (E - U_{C0})\cdot e^{-\frac{t}{R \cdot C}}

Przyjmując napięcie na kondensatorze dla czasu t = 0
U_{C0} = 0
u_{C}(t) = E \cdot (1 - e^{-\frac{t}{R \cdot C}})

Równanie na prąd ładowania kondensatora otrzymuje się poprzez zróżniczkowanie po czasie równania na napięcie ładowania kondensatora

i_{C}(t) = \frac{E - U_{C0}}{R}\cdot e^{-\frac{t}{R \cdot C}}

Przykładowa charakterystyka napięcia na kondensatorze w funkcji czasu

Stan nieustalony - napięcie kondensatora podczas ładowania
Napięcie ładowania kondensatora

Przykładowa charakterystyka prądu ładowania kondensatora

Stan nieustalony - prąd kondensatora podczas ładowania
Prąd ładowania kondensatora

Wzmacniacz operacyjny w konfiguracji różnicowej

Dla wzmacniacz operacyjnego w konfiguracji odwracającej wyznaczona zostanie funkcja opisujące napięcie wyjściowe wzmacniacza V_{out} względem napięć na wejściach odwracającym V_{1} i nieodwracającym V_{2} . Rozpatrywany układ elektroniczny zostanie rozwiązany analitycznie z zastosowaniem metody superpozycji oraz praw Kirchhoffa dla obwodów elektrycznych.

Wzmacniacz operacyjny w konfiguracji różnicowej

Analizowany układ przedstawiony powyżej zostaje „rozbity” na dwa podukłady:
1) zwarte do masy zostaje napięcie podane na wejście nieodwracające
2) zwarte do masy zostaje napięci podane na wejście odwracające

Poprzez zwarcie do masy sygnału na wejściu nieodwracającym otrzymuje się następujący podukład:

Wzmacniacz operacyjny konfiguracja odwracająca – podukład 1 – zwarty do masy sygnał na wejściu nieodwracającym

Po przeprowadzeniu obliczeń napięcie wyjściowego tego podukładu opisane jest równaniem.

V_{out1} = -\frac{R_{F}}{R_{1}}\cdot V_{1}

Następnym krokiem jest zwarcie do masy sygnału na wejściu odwracającym i usunięciu zwarcia do masy dla sygnału na wejściu nieodwracającym. Otrzymany podukład jest następujący.

Wzmacniacz operacyjny konfiguracja odwracająca – podukład 2 – zwarty do masy sygnał na wejściu odwracającym

Po przeprowadzeniu obliczeń napięcie wyjściowego tego podukładu opisane jest równaniem.

V_{out2} = \frac{R_{F}}{R_{1}}\cdot V_{2}

Równania na napięcia wyjściowego z każdego podukładów są już wyznaczone, wobec tego można wyznaczyć napięcie wyjściowego wzmacniacza operacyjnego w konfiguracji odwracającej na podstawie metody superpozycji.

V_{out} = V_{out1} + V_{out2}

Finalnie

V_{out} =\frac{R_{F}}{R_{1}}\cdot (V_{2} - V_{1})

Obliczenia wykonane krok po kroku dostępne są na stronie – wzmacniacz operacyjny w konfiguracji różnicowej.

Wyznaczanie momentu gnącego i siły tnącej w belce

Belka podparta na dwóch podporach poddana jest obciążeniom statycznym. Na początku, w punkcie A, belka podparta jest na podporze nieruchomej. Na końcu, w punkcie B, belka podparta jest na podporze ruchomej. W przykładzie do belki zostaje przypisany dwuwymiarowy układ współrzędnych.

Belka poddana obciążeniom statycznym

Równania równowagi statycznej dla rozpatrywanego przypadku obciążonej belki.

\sum{F_{ix}} = 0 \rightarrow R_{AX} = 0 \sum{F_{iy}} = 0 \rightarrow R_{AY} - P - 2 \cdot P + R_{BY} = 0 \sum{M_{iA}} = 0 \rightarrow l \cdot P + 2 \cdot l \cdot 2 \cdot P - 3\cdot l \cdot R_{BY} = 0

Dodatkowe obliczenia wyznaczające wartości sił -> belka zdanie 1

Obwód elektroniczny z diodą

W przykładzie rozpatrzony zostanie obwód elektroniczny z diodą krzemową. Rozpatrywany obwód zbudowany jest z dwóch oczek. W celu wyznaczenia prądów w obwodzie wyznaczone zostaną równania dla pierwszego i drugiego prawa Kirchhoffa.

Równanie prądowe Kirchhoffa
i - i_1 - i_2 = 0

Równanie napięciowe Kirchhoffa dla pierwszego oczka
V_1 - i \cdot R_1 - i_2 \cdot R_2 = 0

Równanie napięciowe Kirchhoffa dla drugiegooczka
i_2 \cdot R_2 - U_d - i_1 \cdot R_3 = 0

Pełne rozwiązanie analizowanego przykładu zadanie z diodą.

Równania Lagrange’a dla układu mechanicznego

Dynamika trójmasowego układu mechanicznego w ruchu obrotowym. W rozważanym przykładzie zastosowane zostanie zapis energii w formie wariacyjnej tj. innymi słowy w postaci równań Eulera-Lagrange’a pierwszego rodzaju.

Trójmasowy układ mechaniczny

Ogólna postać równań Lagrange’a
L = E_k - V

Równania Lagrange’a pierwszego rodzaju:

\frac{d}{dt}\frac{\partial{L}}{\partial{{\dot{q_i}}}} - \frac{\partial{L}}{\partial{q_i}} + \frac{\partial{D}}{\partial{{\dot{q_i}}}} = \sum_{k}{Q_{k}}

Znaczenie symboli:

L \rightarrow Lagrangian E_k \rightarrow energia \,kinetyczna V \rightarrow energia \,potencjalna D \rightarrow \,dyssypacja \,energii q_i \rightarrow zmienna \,o \,indeksie \,i \dot{ q_i} \rightarrow pierwsza \,pochodna \,po \,czasie

Zmienne w rozważanym układzie mechanicznym:

q_1 = \varphi_1, \dot q_1 =\dot \varphi_1 q_2 = \varphi_2, \dot q_2 =\dot \varphi_2 q_3 = \varphi_3, \dot q_3 =\dot \varphi_3

Energia kinetyczna:

E_k = \frac{1}{2}\cdot J_1 \cdot \dot{\varphi_1}^2 + \frac{1}{2}\cdot J_2 \cdot \dot{\varphi_2}^2 + \frac{1}{2}\cdot J_3 \cdot \dot{\varphi_3}^2

Energia potencjalna:

V = \frac{1}{2}\cdot c_1 \cdot \varphi_{1}^2 + \frac{1}{2}\cdot c_{12} \cdot (\varphi_{2} - \varphi_{1})^2 + \frac{1}{2}\cdot c_{23} \cdot (\varphi_{2} - \varphi_{3})^2 + \frac{1}{2}\cdot c_3 \cdot \varphi_{3}^2

Dyssypacja energii:

D = \frac{1}{2}\cdot h_{12} \cdot (\dot\varphi_{2} - \dot\varphi_{1})^2 + \frac{1}{2}\cdot h_{23} \cdot (\dot\varphi_{2} - \dot\varphi_{3})^2 + \frac{1}{2}\cdot h_3 \cdot \dot\varphi_{3}^2

Równania dla zmiennej q1:

J_1 \cdot \ddot \varphi_1 - (-c_1 \cdot \varphi_1 - c_{12} \cdot (\varphi_2 - \varphi_1) \cdot (-1)) + (h_{12}\cdot (\dot \varphi_2 - \dot \varphi_1)\cdot (-1)) = 0
J_1 \cdot \ddot \varphi_1 + c_1 \cdot \varphi_1 - c_{12} \cdot (\varphi_2 - \varphi_1) - h_{12}\cdot (\dot \varphi_2 - \dot \varphi_1) = 0
J_1 \cdot \ddot \varphi_1 = - c_1 \cdot \varphi_1 + c_{12} \cdot (\varphi_2 - \varphi_1) + h_{12}\cdot (\dot \varphi_2 - \dot \varphi_1)

Równania dla zmiennej q2:

J_2 \cdot \ddot \varphi_2 - (-c_{12}\cdot (\varphi_2 - \varphi_1) -c_{23}\cdot (\varphi_2 - \varphi_3)) + (h_{12}\cdot (\dot\varphi_2 - \dot\varphi_1) + h_{23}\cdot (\dot\varphi_2 - \dot\varphi_3)) = T
J_2 \cdot \ddot \varphi_2 + c_{12}\cdot (\varphi_2 - \varphi_1) + c_{23}\cdot (\varphi_2 - \varphi_3) + h_{12}\cdot (\dot\varphi_2 - \dot\varphi_1) + h_{23}\cdot (\dot\varphi_2 - \dot\varphi_3) = T
J_2 \cdot \ddot \varphi_2 = - c_{12}\cdot (\varphi_2 - \varphi_1) - c_{23}\cdot (\varphi_2 - \varphi_3) - h_{12}\cdot (\dot\varphi_2 - \dot\varphi_1) - h_{23}\cdot (\dot\varphi_2 - \dot\varphi_3) + T

Równania dla zmiennej q3:

J_3 \cdot \ddot \varphi_3 - (-c_{23}\cdot (\varphi_2 - \varphi_3)\cdot(-1) -c_{3}\cdot \varphi_3) + (h_{23}\cdot (\dot\varphi_2 - \dot\varphi_3)\cdot(-1) + h_{3}\cdot \dot\varphi_3) = 0
J_3 \cdot \ddot \varphi_3 - c_{23}\cdot (\varphi_2 - \varphi_3) + c_{3}\cdot \varphi_3 - h_{23}\cdot (\dot\varphi_2 - \dot\varphi_3) + h_{3}\cdot \dot\varphi_3 = 0
J_3 \cdot \ddot \varphi_3 = c_{23}\cdot (\varphi_2 - \varphi_3) - c_{3}\cdot \varphi_3 + h_{23}\cdot (\dot\varphi_2 - \dot\varphi_3) - h_{3}\cdot \dot\varphi_3