19. 11. 2014 KTE / PPEL Počítačová podpora v elektrotechnice Ing. Lenka Šroubová, Ph.D. email: lsroubov@kte.zcu.cz http://home.zcu.cz/~lsroubov Příklad řešení soustavy rovnic s komplexními čísly Stanovení časových průběhů větvových proudů v elektrickém obvodu na obrázku pomocí přímé aplikace Kirchhoffových zákonů s využitím symbolicko-komplexního zobrazení harmonických veličin, tj. u 0 (t) = U m sin(ωt + φ) odpovídá U 0 = U m e jφ. R 1 A i (t) 1 i7 2 (t) R 2 i (t) 3 u (t) 0 + - s1 L s2 C R 3 B Kirchhoffovy zákony pro daný obvod: 1. Kirchhoffův z. pro uzel A: I 1 I 2 I 3 = 0 2. Kirchhoffův z. pro smyčku s1: R 1 I 1 + R 2 I 2 + jωl I 2 + R 3 I 1 U 0 = 0 1 2. Kirchhoffův z. pro smyčku s2: R 2 I 2 jωl I 2 + jωc I 3 = 0 Dáno: R 1 = 40Ω; R 2 = 30Ω; R 3 = 10Ω; L =0, 1mH; C = 200µF; u 0 (t) = 10 sin(ωt + 30 ), ω = 2πf ; f = 50 Hz; U 0 = 10 e j 30
R1=40; R2=30; R3=10; L=0.1e-3; % převod na z milihenry na Henry C=200e-6; % převod na z mikrofaradu na Farad f = 50; w = 2*pi*f; Uo=10*exp(j*30*pi/180); % převod stupňů na radiány nezbytný A=[ 1, -1, -1;... (R1+R3),(R2+j*w*L),0;... 0,-R2-j*w*L,(1./(j*w*C))]; b=[0;uo;0]; x=a\b; % výpočet fázorů maximálních hodnot proudů Im=abs(x); % maximální hodnoty proudů fi=angle(x)*180/pi; % fázové posuny proudů převedné na stupně for n=1:length(x) fprintf('\n i%d = %5.2f sin(wt + (%6.2f)) A',n,Im(n),fi(n)); % výpis časového průběhu proudů (znak w odpovídá úhlové frekvenci ω) end Vstup a tisk znaků (textového řetězce) zadany_znak = input('zadejte pismeno: ', 's'); Zadejte pismeno: n fprintf('bylo zadano: %c\n', zadany_znak); Bylo zadano: n zadany_text = input('zadejte text: ', 's'); Zadejte text: Ahoj, jak je? fprintf('bylo zadano: %s\n', zadany_text); Bylo zadano: Ahoj, jak je? Pozn.: k zadávání znaků Pokud uživatel zadá více znaků, lze se přebytečných zbavit např. takto: zadany_znak = input('zadejte pismeno: ', 's'); Zadejte pismeno: Ahoj, jak je?
if (length(zadany_znak) > 1) zadany_znak=zadany_znak(1,1); end; fprintf('bylo zadano: %c\n', zadany_znak); Bylo zadano: A Pozn.: ke vstup dat Mimo input lze použít i menu. Tento příkaz obsahuje kromě výzvy pro uživatele i několik možných voleb (počet volíme podle potřeby). Uživatel si zvolí volbu, jejíž pořadové číslo bude pak přiřazeno proměnné. Např.: b = menu('vyber si barvu','cervena','modra','zelena') b = 1 - uživatel vybírá červenou Stejný výsledek lze dosáhnout i příkazem input (a např. if, příp. switch). Funkce menu celý postup pouze může usnadnit. Tisk do řetězce vysledny_retezec = sprintf(parametry jako u obyčejného fprintf na obrazovku) Příklady: zadany_text = input('zadejte text: ', 's');
Zadejte text: Ahoj, jak to de? hlaska = sprintf('bylo zadano: %s\n', zadany_text); figure % prázdné grafické okno title(hlaska) % titulek grafu z retezce hlaska msgbox(hlaska,'problem','error'); Pozn.: další okna jsou v helpu pod heslem Predefined Dialog Boxes Základy práce se soubory soubor = fopen('c:\\cesta_k_souboru\\soubor.txt', 'rezim'); kde režim může být: 'r' číst (read)
'w' zápis, přepis, vytvoření nového souboru (write) 'a' připsat na konec existujícího (append) 'r+' čtení nebo zápis 'w+' čtení nebo zápis, přepis, vytvoření nového souboru 'a+' čtení nebo zápis, přepis, vytvoření nového souboru a přidávat na konec souboru další data - binární soubory nebudeme řešit (viz help) Zápis do textového souboru: fprintf jako na obrazovku, jediný rozdíl je, že je nutné uvést proměnnou, do které je otevřen soubor. muj_soubor=fopen('c:\\cesta\\soubor.txt','w'); fprintf(muj_soubor, 'zde pokračujeme jako na obrazovce') Použitý soubor je třeba nakonec zavřít: fclose(muj_soubor); Např.: muj_soubor = fopen('soubor.txt', 'w'); fprintf(muj_soubor, 'Bylo zadano: %s\n', zadany_text); fprintf(muj_soubor, 'Bylo zadano: %c\n', zadany_znak); fprintf(muj_soubor, 'V pevne rad. carce: %g\n', x); fclose(muj_soubor) Test konce souboru: feof(muj_soubor) pokud je konec souboru, vrátí 1 Čtení z textového souboru na disku fscanf soubor musí nejprve být otevřen pomocí fopen Např. % načtení všech čísel ze souboru soubor = fopen('d:\\data.txt', 'r');
cisla = fscanf(soubor, '%g'); fclose(soubor); % načtení jednoho čísla ze souboru (1 řádek, 1 sloupec) soubor = fopen('d:\\data.txt', 'r'); cisla = fscanf(soubor, '%g', [1,1]); fclose(soubor); Velikost je tedy nepovinná, ale pomocí ní lze omezit počet prvků, které je možné číst ze souboru, je-li zadán rozměr matice, vyplní se matice o dané velikosti, např. Čtení z textového souboru (soubor v aktuálním adresáři): muj_soubor = fopen('soubor.txt', 'r'); cisla = fscanf(muj_soubor, '%g', [2,inf]); % fscanf má přečíst reálná čísla, organizovaná ve 2 řádcích a % neznámém počtu sloupců (chci číst až do konce souboru), na % pozici řádek nesmí být inf. fclose(muj_soubor) Příklad Řešení soustavy lineárních algebraických rovnic vypocet.m a související funkce, volané v této funkci: soustava.m soust_vstup.m soust_vstup_soubor.m soustava_vystup.m soustava_vystup_soubor.m viz http://home.zcu.cz/~lsroubov/ppel nebo http://portal.zcu.cz
Pozn.: funkce upper a lower: upper('a') vrátí 'A', tj. z malých písmen dělá velká lower('a') vrátí 'a', tj. z velkých písmen dělá malá pause čekání na stisk klávesy pause(1.45) čeká 1,45 sec. a pak pokračuje Trojdimenzionální grafy křivkové grafy např. plot3(x,y,z) vyjadřuje obvykle závislost y a z na x plošné grafy např. mesh(x,y,z), surf(x,y,z) atp. vyjadřují obvykle závislost z na x a y 3D graf křivkový plot3(x,y,z) - lze použít podobné příkazy a parametry jako ve 2D (plot) Příklad: Graf křivky popsané parametrickými rovnicemi: x = t, y = t sin(t), z = t cos(t) pro t od 0 do 20π. t=[0:0.1:20*pi] plot3(t,t.*sin(t),t.*cos(t))
3D "plošné" grafy 3D plochy a sítě mesh(x,y,z) vykreslí do souřadnic x, y síť (drátěný model) tvarovanou podle z (lze též uvést mesh(z) nemám potom regulérní hodnoty x,y) surf(x,y,z) - vykreslí do souřadnic x, y plochu (vystínovanou, vybarvenou) tvarovanou podle z (lze též uvést surf(z) nemám potom regulérní hodnoty x,y) Příklad: Graf funkce: z + 2 2 ( x, y) = x y pro x, y od -20 do 20. x=linspace(-20,20,50); y=linspace(-20,20,50); [X,Y]=meshgrid(x,y); Z=sqrt(X.^2+Y.^2); mesh(x,y,z)