MATLAB
6. gyakorlat Integrálás folytatás, gyakorlás
Menetrend ●
Kis ZH
●
Példák integrálásra
●
Kérdések, gyakorlás
Kis ZH ●
pdf
Numerikus integrálás (ismétlés)
●
A deriváláshoz hasonlóan lehet vektorértékek és megadott függvény alapján is integrálni. (Az integrál a függvényértékek és az x-tengely közötti területrészek előjeles összege.)
Példa 5. (ismétlés) ●
Számítsuk ki egy szinusz görbe és az x-tengely közötti területet a 0 → π intervallumon! –
egyszerű összeadással
–
a trapézszabály alkalmazásával
–
megadott függvény alapján
Példa 5. - összeadás (ismétlés) % felbontás megadása és a tartomány létrehozása res = 0.01; x = 0:res:pi; % integrálszámítás alap összeadással (nem ajánlott) % a felbontással azért kell beszorozni, mert a sum % alapból csak a fv.értékeket adja össze, nem a % területeket z0 = sum(sin(x))*res;
Példa 5. - trapézszabály (ismétlés) % felbontás megadása és a tartomány létrehozása res = 0.01; x = 0:res:pi; % integrálszámítás a trapézszabály alkalmazásával %(ezt ajánlott használni vektorok esetén) z1 = trapz(x,sin(x));
Anonim függvények (ismétlés) ●
●
A MATLAB lehetőséget ad függvények “tárolására” változókban, ha azok kellőképpen egyszerűek (és pl. emiatt felesleges őket külön fájlba írni). Ez a konstrukció az anonim függvény: –
fv = @(x) sin(x)-2*x.^2+3*x
ahol @(x) adja meg a bemenő paraméter(eke)t, amit a függvény törzse követ >> fv = @(x) sin(x)-2*x.^2+3*x ●
Definiálás után fv függvényként meghívható:
fv = @(x)sin(x)-2*x.^2+3*x >> fv(3) ans = -8.8589
Példa 5. - anonim fv. alapján (ismétlés)
% anonim fv. definíció f1 = @(x) sin(x); % az adott anonim fv. integrálja a 0->pi % intervallumon (a quad komolyabb algoritmust % használ, csak fv.-re müködik) q1 = quad(f1,0,pi); % a függvényt a quadban is meg lehet adni q2 = quad(@(t) sin(t) , 0 , pi);
Példák integrálásra
●
Adott görbék közötti terület kiszámítása
●
Integrálfüggvény számítása
Példa 1.1. ●
Ábrázoljuk az alábbi görbéket a 0 → 2.5 intervallumon 0.001-es felbontással és számítsuk ki az általuk közrezárt terület értékét: – –
f ( x)=x
2
g ( x)=3sin ( x−0.3)
Megoldás 1.1.
x = 0:0.001:2.5; fx = x.^2; gx = 3*sin(x-0.3); % kirajzolás figure; hold on; plot(x,fx); plot(x,gx,'r'); title('Függvények közötti terület'); xlabel('x'); ylabel('fv. érték'); legend('f(x) = x^2','g(x) = 3*sin(x-0.3)');
Példa 1.2. ●
●
Az integrálási határok megadásához határozzuk meg a görbék metszéspontjait! A véges felbontás miatt (itt épp 0.001) a függvények értékei a metszéspontoknál nem fognak szükségszerűen megegyezni!
Példa 1.2. ●
A metszéspontok meghatározására három módszer használható: 1. Egyenlőség vizsgálata a függvények között. (Nem ajánlott, mert csak ritkán esnek egybe az értékek.) 2. A tényleges vektorértékek alapján közelítjük a függvények különbségének minimum helyeit. 3. Az adatsorokat leíró összefüggések ismeretében mintavételezés nélkül, anonim függvényekkel adjuk meg a metszéspontokat.
Megoldás 1.2. - vektorérték alapján % a két fv. értékeinek abszolút különbsége xdiff = abs(gx-fx); figure; plot(x,xdiff); title('|g(x)-f(x)|'); xlabel('x'); ylabel('különbség');
Megoldás 1.2. - vektorérték alapján % a két fv. értékeinek abszolút különbsége xdiff = abs(gx-fx); figure; plot(x,xdiff); title('|g(x)-f(x)|'); xlabel('x'); ylabel('különbség'); % a különbségvektor értékeinek rendezése % emelkedő sorrendben [xdiff_sorted sorted_ind] = sort(xdiff,'ascend'); % az integrálási határ a rendezett indexek % vektorának első két eleme lesz minhelyek0 = sorted_ind(1:2);
Megoldás 1.2. - vektorérték alapján
Megoldás 1.2. - vektorérték alapján
Megoldás 1.2. - anonim függvénnyel % a különbségfv. megadása anomim fv.-ként f = @(x) 3*sin(x-0.3) - x.^2; % tetszőleges fv. adott pont környékén található % gyökének meghatározása minhelyek1 = [fzero(f,0.5) fzero(f,1.7)]; % az fzero() konkrét értéket ad
az fzero() ezen a környéken keres
Megoldás 1.2. - integrál % integrálási intervallum indexei tr_int = minhelyek0(1):minhelyek0(2); % vektorértékekből számolt intervallum alapján T1 = trapz(x(tr_int), gx(tr_int) - fx(tr_int)); % fv.-ből számolt intervallum alapján T2 = quad(f,minhelyek1(1),minhelyek1(2));
Megoldás 1.2. - integrál % integrálási intervallum indexei tr_int = minhelyek0(1):minhelyek0(2); % vektorértékekből számolt intervallum alapján T1 = trapz(x(tr_int), gx(tr_int) - fx(tr_int)); % fv.-ből számolt intervallum alapján T2 = quad(f,minhelyek1(1),minhelyek1(2));
T1 = 0.8639 T2 = 0.8639
Integrálfüggvény ●
●
Nem fix intervallumon keressük a terület értékét, hanem az értelmezési tartomány mentén (kumulált összegek). Anal könyv 133. o. (nem szó szerint): Integrálfüggvény Legyen f ∈ℝ[a , b ], integrálható függvény. Ekkor f integrálfüggvénye az x
F ( x )=∫ f (t )dt a
függvény lesz, melyre teljesülnek az alábbiak: 1: F folytonos [a,b]-n. 2: Ha az x0e[a,b] pont egy környezetében f folytonos, akkor itt F differenciálható, és F'(x0) = f(x0).
●
Nekünk a 2. állítás lesz hasznos, mivel ennek segítségével tudunk pl. mért sebesség értékekből megtett utat számolni egy mozgás teljes idejére.
Integrálfüggvény példa % vizsgált intervallum res = 0.001; x = 0:res:pi/2; % alap kumulált összeg (fontos beszorozni a lépésközzel, % mivel a cumsum csak a fv. értékeit adja össze) z3 = cumsum(sin(x))*res; % az eredményvektor utolsó eleme megadja az adott % intervallumra vonatkozó integrál (a görbe alatti % terület) értékét z3(end) % kumulált összeg trapézszabály alkalmazásával % (ezt ajánlott használni) % 1-es lépésközt feltételez z4 = cumtrapz(sin(x))*res; z4(end) % így az x határozza meg a lépésközt, nem kell szorozni z5 = cumtrapz(x,sin(x)); z5(end)
Példa 2.
●
●
Adott egy vasúti szerelvény egyenes sínszakaszon mért (lineáris) sebességgörbéje. Adjuk meg a szerelvény (lineáris) pozícióját leíró görbét a teljes mérési szakaszon!
Megoldás 2.
% % t v
a szerelvény sebessége (mérési értékek, ezeket kapjuk) = linspace(0,100,1000); = 25*sin(2*pi*t*(1/150));
% a szerelvény pillanatnyi pozícióját v % integrálfüggvénye fogja megadni Fv = cumtrapz(t,v); % ellenőrzésként számítsuk ki % Fv deriváltját is dFvdt = diff(Fv)./diff(t);
Megoldás 2. % rajzoljuk ki az eredményt figure; subplot(211); hold on; % mért értékek plot(t,v,'LineWidth',2); % az integrálfv.-ből visszaszámolt értékek plot(t(2:end),dFvdt,'r--','LineWidth',2); % vonal az x-tengelyre plot([0 t(end)],[0 0],'k--'); title('Sebesség'); xlabel('t (s)'); ylabel('v (m/s)'); legend('v_{eredeti}','v_{számolt}'); subplot(212); % a kiszámolt pozíció értékek plot(t,Fv); title('Pillanatnyi pozíció'); xlabel('t (s)'); ylabel('s (m)');
Megoldás 2.
Kérdések