Professional Documents
Culture Documents
Matlab
Matlab
- REŠENI PRIMERI -
SADRŽAJ
Poglavlje 1 – Početak rada u MATLAB-u
Poglavlje 2 – Generisanje nizova
Poglavlje 3 – Matematičke operacije sa nizovima
Poglavlje 4 – Skript datoteke
Poglavlje 5 – Dvodimenzionalni grafikoni
Poglavlje 6 – Funkcije i funkcijske datoteke
Poglavlje 7 – Programiranje u MATLAB-u
Primer zadatka 1-1: Trigonometrijska formula
Proverite da li je formula ispravnatakošto ćete izračunati vrednost obe strane jednačine, uz zamenu .
REŠENjE
Definišemo x
>> x=pi/5;
>> LHS=cos(x/2)^2 Izračunavamo levu stranu
LHS =
0.9045
RHS =
0.9045
>>
Primer zadatka 1-2: Geometrija i trigonometrija
Četiri kružnice su smeštene kao na slici. U svakoj tački dodira kružnice su tangentne jedna na
drugu. Odredite rastojanje između centra C2 i C4.
Poluprečnici kružnica su: R1 = 16mm, R2 = 6.5mm, R3 = 12mm i R4 = 9.5mm.
Linije koje povezuju centre kružnica čine četiri trougla. Poznate su
dužine svih stranica dva takva trougla, ∆C1C2C3 i ∆C1C3C4. Taj podatak se
koristi za izračunavanje uglova γ1 i γ2 tih trouglova pomoću kosinusne
teoreme. Na primer, γ1 se izračunava iz jednačine:
Definišemo poluprečnike
>> R1=16;R2=6.5;R3=12;R4=9.5;
Izračunavamo
>> C1C2=R1+R2;C1C3=R1+R3;C1C4=R1+R4; dužine stranica
>> C2C3=R2+R3;C3C4=R3+R4;
>> Gama1=acos((C1C2^2+C1C3^2-C2C3^2)/(2*C1C2*C1C3)); Izračunavamo ϓ1, ϓ2 i ϓ3
>> Gama2=acos((C1C3^2+C1C4^2-C3C4^2)/(2*C1C3*C1C4));
>> Gama3=Gama1+Gama2;
Izračunavamo dužinu
>> C2C4=sqrt(C1C2^2+C1C4^2-2*C1C2*C1C4*cos(Gama3)) stranice C2C4
C2C4 =
33.5051
>>
Primer zadatka 1-3: Provođenje toplote
>> Ts=38;T0=120;k=0.45;t=3;
>> T=round(Ts+(T0-Ts)*exp(-k*t))
T=
Zaokružujemo na najbliži ceo broj
59
>>
Primer zadatka 2-1: Generisanje matrice
Pomoću komandi ones i zeros napravite matricu 4 x 5 u kojoj su prve dve vrste ispunjene
nulama a sledeće dve jedinicama.
REŠENjE
>> A(3:4,:)=ones(2,5)
Dodajemo vrste 3 i 4 sa jedinicama
A=
0 0 0 0 0
0 0 0 0 0
1 1 1 1 1
1 1 1 1 1
Primer zadatka 2-2: Generisanje matrice
Napravite matricu 6 x 6 u kojoj su dve srednje vrste i dve srednje kolone ispunjene jedinicama, a
ostatak nulama.
REŠENjE
AR =
0 0 1 1 0 0
0 0 1 1 0 0
1 1 1 1 1 1
1 1 1 1 1 1
0 0 1 1 0 0
0 0 1 1 0 0
Primer zadatka 2-3: Rad sa matricom
b) Pomoću jedne komande, zamenite četiri poslednje kolone prve i treće vrste matrice A s prve četiri
kolone prve dve vrste matrice B, poslednje četiri kolone četvrte vrste matrice A elementima od 5 do 8
vektora v, i poslednje četiri kolone pete vrste matrice A kolonama od 3 do 5 treće vrste matrice B.
a) REŠENjE
>> v=[99:-1:91]
v=
99 98 97 96 95 94 93 92 91
b) REŠENjE
>>
Primer zadatka 3-1: Rešenje tri linerane jednačine (deljenje nizova)
4x – 2y + 6z = 8
2x + 8y + 2z = 4
6x + 10y + 3z = 0
Koristeći prethodno navedena pravila linearne algebre, navedeni sistem
jednačina možemo napisati u matričnom obliku AX = B ili XC = D:
= ili
REŠENjE
>> Xd = D*inv(C)
Rešavanje pomoću matrice inverzne matrici C: X =D
Xd =
>>
Primer zadatka 3-2: Ekvivalentna sila (sabiranje vektora)
Na nosač deluju tri sile. Izračunajte ukupnu (ekvivalentnu) silu koja deluje na nosač.
Sila je vektor ( fizička veličina koja ima jačinu i smer). U Dekartovom
koordinatnom sistemu, dvodimenzionalan vektor F možemo zapisati
kao:
F = i tanθ =
Ukupna (ekvivalentna) sila koja delujena nosač dobija se sabiranjem
sila koje na njega deluju. MATLAB -ovo rešenje ima 3 koraka:
• Odredite vektorski oblik ekvivalentne sile tako što ćete sabrati sve
komponente u smeru ose y i zasebno one u smeru y.
>> Th = (180/pi)*atan(Ftot(2)/Ftot(1))
Izračunavamo ugao (u stepenima)
Th = vektora rezultujuće sile
64.9453
>>
Primer zadatka 3-3: Eksperiment sa trenjem (operacije sa pojedinačnim
elementima nizova)
Koeficient trenja µ može se odrediti pomoću eksperimenta u kojem se meri sila potrebna za
pomeranje mase m. Kada se izmeri F )m je poznato), koeficijent trenja se dobija iz formule:
)
U sledećoj tabeli datii su rezultati merenja F u šest eksperimenata. Odredite koeficijent trenja u
svakom eksperimentu i njegovu prosečnu vrednost u svim eksperimentima.
F
Eksperiment br. 1 2 3 4 5 6 m
Masa m (kg) 2 4 5 10 20 50
Sila F (N) 12,5 23,5 30 61 117 294
trenje
REŠENjE
>> r = 30;
Dodeljivanje vrednosti promenljivama
>> R = 45;
>> V = 200000;
>> silos Pokretanje skript datoteke silos
>> teziste
Unesi matricu cija svaka vrsta ima tri elementa
U svaku vrstu upisi x i y koordinate tezista i povrsinu dela
[100 100 200*200
60-120/pi 200+120/pi pi*60^2/4 Upisivanje podataka za matricu C
60+140/3 220 140*60/2 Svaka vrsta ima tri elementa: x, y i A
pojedinačnih delova složene površine
100 100/pi -pi*50^2/2
150 95 -40*150
105 145 -50*50]
Koordinate tezista su: ( 85.387547, 131.211809 )
Primer zadatka 5-1: Iscrtavanje funkcije i njenih izvoda
Rešenje:
x=[-2:0.01:4];
y=3*x.^3-26*x+6;
yd=9*x.^2-26;
ydd=18*x;
plot(x,y,'-b',x,yd,'--r',x,ydd,':k')
Grafik funkcije injenogprvog I drugogizvoda
Primer zadatka 5-2: Mehanizam klip - klipnjača - radilica
Izračunajte i nacrtajte položaj, brzinu i ubrzanje klipa za jedan obrt radilice. Postavite cva tri
grafikona na istu stranicu. Zadajte za t = 0.
Radilica rotira konstantnom ugaonom brzinom. To znači da ako zadamo θ = θ°
za t = 0, onda je ugao θ u trenutku t dat sa θ = , a = 0 u svakom trenutku. Rastojanja
d1 i h data su sa:
d1 = rcosθ i h =rsinθ
Ukoliko znamo h, rastojanje d2 možemo izračunati pomoću Pitagorine teoreme:
d2 = (c2- h2)1/2 = (c2- r2sin2θ)1/2
Položaj klipa x dat je sa:
x = d1 + d2 = rcosθ + ( c2 - r2sin2θ)1/2
x = -rsinθ -
x = -rcosθ -
subplot(3,1,1)
plot(t,x)
grid
xlabel('Vreme(s)')
ylabel('Polozaj(m)')
subplot(3,1,2)
plot(t,xd)
grid
xlabel('Vreme(s)')
ylabel('Brzina(m/s)')
% crtanje treceg grafika - x’’(t)
subplot(3,1,3)
plot(t,xdd)
grid
xlabel('Vreme(s)')
ylabel('Ubrzanje(m/s^2)')
y = (x.^4*sqrt(3*x+5))./(x.^2+1).^2;
>> pog6jedan(6)
ans =
4.5401
>> F=pog6jedan(6)
F=
4.5401
>>
Primer zadatka 6-2: Konverzija jedinica za temperaturu
Napišite funkciju koju definiše korisnik (po imenu FuC) koja pretvara
temperaturu izraženu u stepenima F u temperaturu u stepenima C.
Upotrebite tu funkciju za rešavanje sledećeg zadatka. Zbog promene
temperature za ∆T, dužina tela se promeni za ∆L=αL ∆T, gdeje α
koeficijenttoplotnogširenja. Izračunajte promenu povrčine pravougaone
(4.5 x 2.25m) aluminijumske (α=23* 1/°C)ploče ako se njena
temperatura promeni sa 40°F na 92°F.
Funkcija za konverziju stepeni F u stepene C
a1=4.5;b1=2.25;T1=40;T2=92;alfa=23e-6;
deltaT=FuC(T2)-FuC(T1); Izračunavamo razliku temperature
pomoču funkcije FUC
a2=a1+alfa*a1*deltaT; Izračunavamo novu dužinu i širinu
b2=b1+alfa*b1*deltaT;
PromenaPovrsine=a2*b2-a1*b1; Izračunavamo promenu površine
fprintf("Promena povrsine je %6.5f kvadratnih
metara",PromenaPovrsine)
Izvršavanjem skript datoteke u komandnom prozoru dobijamo rešenje
>> PromenaPovrsine
PromenaPovrsine =
0.0135
>>
Primer zadatka 6-3: Rastojanje između dve tačke u polarnim koordinatama
d=inline('sqrt(rA^2+rB^2-2*rA*rB*cos(thetaB-thetaA))',...
'rA','thetaA','rB','thetaB’)
Redosled argumenata je definisan kao (rA,thetaA,rB,thetaB)
d(rA,thetaA,rB,thetaB)=sqrt(rA^2+rB^2-2*rA*rB*cos(thetaB-thetaA))
>> RastAdoB=d(2,pi/6,5,3*pi/4)
RastAdoB =
5.8461 Argumenti su upisani po redu datom u definiciji funkcije
Primer zadatka 6-4: Eksponencijalni rast i opadanje
Upotrebitefunkcijskudadoteku u komandnomprozoruzasledećadvaslučaja:
a) Godine 1980, u Meksikuježivelo 67 milionastanvnika, 1986. 79 miliona.
Procenitebrojstanovnika 2000.
b) Vremepoluraspadaradiaktivnogmaterijalaiznosi 5.8 godina.Kolikoćepreostati 7-gramskog
uzorkanakon 30 godina
Da biste upotrebili model eksponencijalnog rasta, morate prvo
izraziti vrednost konstante k preko A0, A(tl) i tl:
Izračunavamo vrednost k
k=log(At1/A0)/t1;
At=A0*exp(k*t); Izračunavamo A(t) (dodeljujemo vrednost
izlaznoj promenljivoj)
Izvršavanje funkcije expRO u komandnom prozoru
>> expRO(67,79,6,20)
ans =
>> expRO(7,3.5,5.8,30)
ans =
>>
Primer zadatka 6-5: Kretanje projektila
Vreme potrebno projektilu da dostigne najvišu ačku (vy =0) i odgovarajuća visina dati su sa:
Ukupno vreme leta dvaput je duže od vremena potrebnog za dostizanje najviše tačke,
ttot = 2tlunax. U horzontalnom pravcu brzina je konstantna, a položaj projektila dat je sa:
U MATLAB-ovoj notaciji, ime i argumenti funkcije dati su sa: (hmax, dmax) = putanja
(v0,theta).
Funkcija putanja izracunava maksimalnu visinu i rastojanje projektila i crta putanju
function [hmax,dmax]=putanja(v0,theta)
g=9.81
v0x=v0*cos(theta*pi/180);
v0y=v0*sin(theta*pi/180);
thmax=v0y/g;
hmax=v0y^2/(2*g);
ttot=2*thmax;
dmax=v0x*ttot;
Crtanje grafika putanje
tplot=linspace(0,ttot,200);
x=v0x*tplot;
y=v0y*tplot-0.5*g*tplot.^2;
plot(x,y)
xlabel('Rastojanje (m)')
ylabel('visina (m)')
title('PUTANjA PROJEKTILA')
Izvršavanjem skript datoteke u komandnom prozoru dobijamo rešenje i grafik
>> [h d]=putanja(230,39)
h=
1.0678e+03
d=
5.2746e+03
>>
d=inline('sqrt(rA^2+rB^2-2*rA*rB*cos(thetaB-thetaA))',...
'rA','thetaA','rB','thetaB')
d(rA,thetaA,rB,thetaB)=sqrt(rA^2+rB^2-2*rA*rB*cos(thetaB-thetaA))
>> RastAdoB=d(2,pi/6,5,3*pi/4)
RastAdoB =
5.8461
Argumenti su upisani po redu datom u definiciji funkcije
Primer zadatka 7-1: Rastojanje između dve tačke u polarnim koordinatama
>> primer7_1
NdanaTiznad75 =
7
NdanaTod65do80 =
12
datumuTod50do60 =
1 4 5 7 21 23
>>
Struktura if - end
Rešenje
>> primer7_2
Unesite broj radnih sati 35
Unesite cenu satnice u $ 8
Zarada radnika je 280.00$>>
>> primer7_2
Unesite broj radnih sati 50
Unesite cenu satnice u $ 10
Zarada radnika je 550.00$>>
Struktura if - else - end
Za 19 < h < 33 m, količina vode se izračunava kao zbir zapremine valjka visine 19
m i količine vode u kupi:
function v = kolvode(h)
% kolvode izracunava kolicinu vode u tornju
% ulazni argument je nivo vode u metrima
% rezultat je kolicina vode u kubnim metrima
if h<=19
v=pi*12.5^2*h;
else
rh=12.5+10.5*(h-19)/14;
v=pi*12.5^2*19+pi*(h-19)*(12.5^2+12.5*rh+rh^2)/3;
end
Dva primera upotrebe funkcije u komandnom prozoru
>> kolvode(8)
ans =
3.9270e+003
>> VOL=kolvode(25.7)
VOL =
1.4115e+004
Struktura if - elseif - else - end
for k=1:n
S=S+(-1)^k*k/2^k;
end
fprintf('Zbir clanova reda je %f',S)
>> primer7_5
Upisite broj clanova4
Zbir clanova reda je -0.125000>>
>> primer7_5
Upisite broj clanova20
Zbir clanova reda je -0.222216>>
FUNKCIJA
function y=Tsin(x,n)
% Tsin izracunava sinus ugla pomocu Tejlerove formule
% Ulazni argumenti
% x - ugao izrazen y stepenima, n - broj clanova reda
xr=x*pi/180; Preračunavanje ugla iz radijana u stepene
y=0;
for k=0:n-1
y=y+(-1)^k*xr^(2*k+1)/factorial(2*k+1);
end
Prvi član odgovara vrednosti k=0, što znači da ako treba sabirati n članove
reda, u poslednjem prolazu moramo imati k=n-1. Primenom ove funkcije, u
komandnom prozoru je izračunat sin(150°) pomoću redova od 3 i 7 članova.
>> Tsin(150,3)
ans =
0.6523
>> Tsin(150,7)
ans =
0.5000
>>
Petlje for – end
U petljama for – end, izvršavanje komande, ili grupe komandi, ponavlja se zadati broj puta. Oblik ove
vrste petlji prikazazan je na slici
for k = f : s : t Vrednost k u
........... poslednjem prolazu
........... grupa MATLAB-ovih
........... komandi
end
Vektorjedefinisannasledećinačin:
V=.
Napišiteskriptkojiudvostručujevrednostpozitvinihelemenatadeljivihs
a 3 ili 5, a podiženatrećistepenvrednostnegativnihelemenatavećih od
-5.
REŠENjE
V=[5, 17, -3, 8, 0, -1, 12, 15, 20, -6, 6, 4, -7, 16];
>> V
V=
10 17 -27 8 0 -1 24 30 40 -6 12 4 -7 16
>>
Petlje while – end
x=input('Upisite x ');
n=1; an=1; S=an;
while abs(an)>=0.0001&n<=30 % pocetak petlje while-end
an=x^n/factorial(n);% izracinavanje n-tog clana
S=S+an; % sabiranje n-tog clana sa zbirom prethodnih clanova
n=n+1; % prebrojavanje ukupnog broja prolaza
End % komanda end petlje while
if n>=30 % petlja if-else-end
disp('Potrebno je vise od 30 clanova')
else
fprintf('exp(%f)=%f',x,S)
fprintf('\nBroj clanova je: %i',n)
end
Program prikazuje rezultate iskaza if-else-end. Ako je izvršavanje
petlje prestalo zato što n-ti član nije manji od 0,0001, program prikazuje
poruku o tome. Ukoliko je vrednost funkcije uspešno izračunata,
program prikazuje vrednost funkcije i ukupan broj članova. Kada se
program izvršava, borj prolaza zavisi od promenljive x. Pomoću ovog
programa (koji je snimljen u datoteci expox) izračunate su vrednosti za
e2, e-4 i e2l.
Izvršavanje u komandnom prozoru
>> primer7_7
Upisite x 2
exp(2.000000)=7.389046
Broj clanova je: 12>>
>> primer7_7
Upisite x -4
exp(-4.000000)=0.018307
Broj clanova je: 18>> primer7_7
Upisite x 21
Potrebno je vise od 30 clanova
>>
Ugnježđene petlje i ugnježđeni uslovi iskaza
Petlje I uslovni iskazi mogu se ugnježdavati jedni u
druge. To znači da petlja i/ili uslovni iskaz može
započeti (i zavrčiti se) unutar drugr petlje i/ili uslovnog
iskaza. Dubina ugnježšđavanja petlji i uslovnih iskaza
nije ograničena.
For k = 1 : n
for h = 1 : m
............. Kad god se vrednost k poveća za , ugnježđena
Grupa Ugnježđena
............. Petlja petlja se izvršava m puta. Grupa komandi se
komandi petlja
............. izvršava ukupno n x m puta.
end
end
Primer zadatka 7-8: Formiranje matrice u petlji
>> primer7_8
Upisite broj vrsta 4
Upisite broj kolona 5
A=
1 2 3 4 5
2 4 7 11 16
3 7 14 25 41
4 11 25 50 91
>>
Primer zadatka 7-9: Podizanje novca sa računa
penzionog osiguranja
Korisnik je zaključio polisu za penziono osiguranje, na koju je
deponovao 300.000 dolara i koja donosi 5% godišnje kamate.
Korisnik osiguranja planira da podiže novac sa tog računa jednom
godišnje. Posle prve godine, podiže 25.000 dolara, a nakon toga
povećava iznose koje podiže u zavisnosti od stope inflacije. Na
primer, ako je stopa inflacije 3%, posle druge godine korisnik podiže
25.750 dolara. Izračunajte broj godina do pražnjenja računa uz
pretpostavku da je godišnja stopa infacije konstantna i iznosi 2%.
Nacrtajte grafikom koji pokazuje promenu stanja na računu u
zavusnosti od podignutog iznosa po godinama.
REŠENjE
kamata=0.05;inf=0.02;
clear P SR godina
godina(1)=0; % prvi element je godina 0
P(1)=0; % pocetni podignuti iznos
SR(1)=300000; % pocetno stanje racuna
Psledece=25000; % iznos koji se podize na kraju prve godine
SRsledece=300000*(1+kamata); % stanje racuna posle prve godine
n=2;
while SRsledece>=Psledece % petlja while ispituje da li ce sledece stanje
% racuna biti vece od sledeceg podignutog iznosa
godina(n)=n-1;
P(n)=Psledece; % iznos koji se podize godine n-1
SR(n)=SRsledece-P(n); % stanje racuna godine n-1, nakon podizanja novca
SRsledece=SR(n)*(1+kamata); % stanje racuna na kraju naredne godine
Psledece=P(n)*(1+inf); % iznos koji se podize na kraju naredne godine
n=n+1;
end
fprintf('Racun ce se isprazniti za %f godina',godina(n-1))
bar(godina,[SR',P'],2.0)
Izvršavanje u komandnom prozoru i crtanje
>> primer7_9
Racun ce se isprazniti za 15.000000 godina