co byste měli umět po dnešní lekci: napsat skript a spustit jej napsat externí funkci a zpracovat její návratovou hodnotu/y využívat cykly a podmínky používat formátovaný výstup používat help skript posloupnost příkazů zapsaných v externím souboru s koncovkou m
zkusme takovýhle skript: % reseni kvadraticke rovnice a=2;b=-1;c=4; %diskriminant D=b^2-4*a*c; % reseni x1=(-b+sqrt(d))/2/a; x2=(-b-sqrt(d))/2/a; % vypis reseni x1 x2 uložme skript do souboru skript1.m skript spustíme v matlabu/octave tím, že napíšeme jeho název pozor na cestu k souboru
vylepšení: koeficienty budeme zadávat až při běhu skriptu % reseni kvadraticke rovnice a=input('zadej a: '); b=input('zadej b: '); c=input('zadej c: '); %diskriminant D=b^2-4*a*c; % reseni x1=(-b+sqrt(d))/2/a; x2=(-b-sqrt(d))/2/a; % vypis reseni disp(x1); disp(x2); funkce proměnná=input('řetězec'); funkce disp(proměnná);
vylepšení výstupu funkce printf/fprintf fprintf( řetězec s formátem výstupu, proměnné); fprintf( pi=%f\n,pi); fprintf( pi=%.2f\n,pi); fprintf( pi=%.5f\n,pi); fprintf( pi=%e\n,pi); fprintf("pi=%d\n",pi); pi=3.141593 pi=3.14 pi=3.14159 pi=3.141593e+00 pi=3
nejvhodnější je psaní funkcí a procedur jako skriptů pravidla: jméno skriptu a funkce se MUSÍ shodovat ve skriptu může být více funkcí, ale přístupná zvenčí jen JEDNA funkce (ta první) pište komentáře!!!!!!!!! pište strukturovaně (zejména cykly, viz dále) obecný tvar funkce: function vystup=jmeno_funkce(vstupni parametry) tělo funkce vystup=... function [x1,x2]=kvadrrce(a,b,c) % funkce resi kvadratickou rovnici % [x1,x2]=kvadrrce(a,b,c), % kde a,b,c jsou parametry kv.rce % D=b^2-4*a*c; % diskriminant % reseni x1=(-b+sqrt(d))/2/a; x2=(-b-sqrt(d))/2/a; zkuste napsat help KvadrRce
podmínky a cykly if podmínka if podmínka else IF if podmínka elseif podmínka else function [x1,x2]=kvadrrce1(a,b,c) % funkce resi kvadratickou rovnici % [x1,x2]=kvadrrce(a,b,c), % kde a,b,c jsou parametry kv.rce % D=b^2-4*a*c; % diskriminant % reseni if (a~=0) x1=(-b+sqrt(d))/2/a; x2=(-b-sqrt(d))/2/a; else printf( Rovnice neni kvadraticka!!\n ); x1=c/b;x2=0.0;
podmínky a cykly FOR příklady: for index=start:krok:konec for ii=1:1:10 disp(ii); for ii=1:2.5:10 disp(ii); prealokace paměti x=0:0.01:5.0; y=zeros(size(x)); for ind=1:length(x) if (x(ind)>1) y(ind)=1./x(ind); for ii=10:-0.5:1 disp(ii); vektory vs for-cykly
podmínky a cykly WHILE while podmínka while podmínka if podmínka, break, ; function out=whiledemo() x=8; while (x>0) x=x-3; disp(x); while (1) if (x<0), break, x=x-5; while (1) x=x-5; if (x<0), break,
podmínky a cykly switch proměnná case hodnota1; case hodnota2; case hodnota3; otherwise SWITCH function switchdemo(cislo) if (cislo~=0) p=cislo/abs(cislo); else p=0; switch p case 1; fprintf('cislo je kladne\n'); case -1; fprintf('cislo je zaporne\n'); otherwise fprintf('cislo je nula\n');
načtení a ukládání dat bromid.dat 10 3.4 20 2.6 30 1.6 40 1.3 50 1.0 60 0.5 a=load('bromid.dat'); size(a); % vykresleni dat plot(a(:,1),a(:,2)); plot(a(:,1),a(:,2),'o'); plot(a(:,1),a(:,2),'bo'); t=0:0.01:pi; y=cos(t); vystup=[t' y']; save -ascii 'cosinus.dat' vystup save 'cosinus.dat' vystup -ASCII yy=load('cosinus.dat'); plot(yy(:,1),yy(:,2)); načtení dat: proměnná = load(soubor); octave matlab
funkce jejíž vstupním parametrem je také funkce funkce vystup = feval(funkce,proměnné) y=feval('cos',pi/6); function y=funkce(f,x) y=feval(f,x); function y=test(x) y=sin(x).*exp(-x.^2); test(0.33); ans = 0.29061 Funkce('test',0.33); ans = 0.29061 inline funkce = funkce, které nechceme/nepotřebujeme mít ve skriptu fx=inline('cos(x)*sin(x)'); y=fx(pi/6);
příklady na cvičení: 1. upravte program na řešení kvadratické rovnice tak, aby byl ošetřen vůči chybnému zadání vstupních parametrů 2. napište funkci, která počítá faktoriál celého čísla 3. napište funkci (funkce), která počítá číslo π Archimedovou metodou (plochy n-úhelníků opsaných jednotkové kružnici)