1.feladat A Verlust-modellben legyen r=0.03, K=10. Tegyük fel, hogy a 0. időpillanatban a populációsűrűség N(0)=12. Állapítsuk meg az eseménykezelő segítségével, hogy mikor csökken a populációsűrűség először 10.5 alá!
A differenciálegyenletet definiáló függvények
function dy=verlust1fel(t,y)
r=0.03;
K=10;
dy=r*(1-y/K)*y;
Az eseményfigyelő függvény
function [ertek,megalle,irany] = esemeny1fel(t,y) ertek = y-10.5; %ha lecsökken a populációsűrűség 10.5 alá megalle = 1; irany = -1;
A megoldó
beallitasok=odeset('Events',@esemeny1fel);
[T,Y] = ode45(@verlust1fel,[0 1000],12,beallitasok);
T(end)
ans = 42.7922
2. feladat: Ismert, hogy ha a Lotka--Volterra-modellben a ragadozó nem elég hatékonyan használja fel a zsákmányt, akkor kihal. Ez történik például az r=0.5, K=2, a=0.1, b=0.3, c=0.1 paraméterek esetén. Állapítsuk meg az esemény-kezelő segítségével, hogy mikor csökken a ragadozók száma a [10, 10] kezdeti feltételből indulva 1 alá.
A differenciálegyenletet definiáló függvények
function dy = lotvol2fel(t,y) r=0.5; K=2; a=0.1; b=0.3; c=0.1; dy = [r*(1-y(1)/K)*y(1)-a*y(1)*y(2);... -b*y(2)+c*y(1)*y(2)];
Az eseményfigyelő függvény
function [ertek,megalle,irany] = esemeny2fel(t,y) ertek = y(2)-1; % a ragadozó sűrűsége 1 alatt megalle = 1; irany = -1;
A megoldó
beallitasok=odeset('Events',@esemeny2fel);
[T,Y] = ode45(@lotvol2fel,[0 1000],[10,10],beallitasok);
T(end)
ans = 10.9445
3.feladat: Tekintsük az y'(x)=y^2(x)-1, y(0)=0.5 kezdeti érték feladatot. Írjunk olyan diffKiert(z) nevű függvényt, amely megoldja a differenciálegyenletet, és a kimenete a megoldás (közelítő) értéke a z pontban, azaz y(z). A megoldást egyetlen függvénnyel készítsük el.
function ki=diffKiert(z) [~,Y]=ode45(@(t,y) y^2-1,[0,z],0.5); ki=Y(end); end
4. feladat: Írjunk olyan kozelit(t,v) nevű függvényt, amelynek bemenetei sorvektorok. A t pontokban megmértük egy ismeretlen függvény értékeit, amelyről annyik tudunk, hogy a*sin(t)+b*sin(2t)+c*exp(-t) alakú, a mérési eredmények szerepelnek a v vektorban. A függvényünk kimenete legyen az a,b,c számok egyetlen oszlopvektorban.
function ki=kozelit(t,v)
E = [sin(t') sin(2*t') exp(-t')];
ki = E\(v');
5.feladat: Írjuk olyan kbSin1(n) függvényt, amelynek bemenete egy pozitív egész szám. A függvény készítse el a \sin függvény , , , , alappontokra illeszkedő spline- interpolációját majd ez alapján adjon becslést a \sin(1) értékre, amely legyen a függvény kimenete.
function ki=kbSin1(n)
t=(1:n)/pi;
fvert=sin(t);
ki=spline(t,fvert,1);
6. feladat: Írjunk egy olyan teglaLap(a,b,x0,y0) nevű függvényt amelynek bemenetei valós számok. A függvény rajzoljon ki egy olyan téglalapot, amelynek bal alsó sarka az (x_0, y_0) pont, az x tengellyel párhuzamos oldala a, az y tengellyel párhuzamos oldala pedig b hosszú. Ha csak két kimenettel hívtuk meg, akkor a bal alsó sarok legyen az origó, ha csak eggyel akkor a bal alsó sarok legyen az (1,1) és rajzoljunk a oldalhosszú négyzetet. A függvények ne legyen kimenete.
function teglaLap(a,b,x0,y0) if nargin==2 x0=0; y0=0; elseif nargin==1 x0=1; y0=1; b=a; end plot([x0,x0+a],[y0,y0], [x0+a,x0+a],[y0,y0+b], [x0,x0],[y0,y0+b],[x0,x0+a],[y0+b,y0+b]); axis([x0-1, x0+a+1,y0-1,y0+b+1],'equal');
7. feladat: Írjunk egy olyan egeszRitka(s) nevű függvényt, amelynek bemenete egy csv fájl neve sztringként. A függvény olvassa be egy mátrixba a fájlban található számokat. Ha az összes számok közül a nullák aránya meghaladja a 90%-ot, akkorezt írja ki a képernyőre. A függvény kimenete legyen az így kapott mátrix.
function adatok=egeszRitka(s) adatok=dlmread(s); nullakszama=sum(sum(adatok==0)); if nullakszama/(size(adatok,1)*size(adatok,2))>0.9 fprintf('Sok a nulla \n'); end
8. feladat: Írjunk egy szigN(s) nevű függvényt, amelynek bemenete egy xls fájl neve sztringként. A fájl mérési eredményeket tartalmaz 2 oszlopban. Az első sorban egy-egy hőmérsékletérték található alatta pedig a mért hosszak centiméterben 150 tárgyra. Állapítsuk meg, hogy a két különböző hőmérséklet mellett mért hosszak szignifikánsan különböznek-e.
function szigN(s) hosszak=xlsread(s); elso=hosszak(2:151,1); masodik=hosszak(2:151,2); hip=ttest2(elso, masodik); if hip==0 fprintf('A hosszak nem különböznek szignifikánsan\n') else fprintf('A hosszak szignifikánsan különboznek') end
9. Hány hal van a kois.jpg képen?