Odjel: Informacione tehnologije
PROGRAMIRANJE INMATLAB
OperateriMATLAB
· Naredbe petlje
Ciklusza
Sintaksa
count=start:step:final
MATLAB komande
Opis
brojati - varijabla petlje,
početak je njegova početna vrijednost,
final je njegova konačna vrijednost,
korak - korak za koji se broj povećava svaki put kada uđe u petlju
petlja se završava čim vrijednost count postane veća od konačne.
Primjer
Neka je potrebno izvesti porodicu krivulja za x€ , koja je data funkcijom u zavisnosti od parametra
y (x, a) \u003d e-ax sin x,
za vrijednosti parametara a od -0,1 do 0,1. Ispod je lista fajl programa za izlaz porodice krivulja.
Listing programa
x = ;
za a = -0,1:0,02:0,1
y = exp(-a*x).*sin(x);
Kao rezultat izvršavanja programa, pojavit će se grafički prozor koji sadrži potrebnu porodicu krivulja.
Ciklusdok
Sintaksa
uvjet petlje while
MATLAB komande
Opis
Petlja traje sve dok je (true) uslov petlje istinit. Sljedeće relacijske operacije su dozvoljene za postavljanje uvjeta za izvršavanje ciklusa:
Složeniji uslovi se specificiraju pomoću logičkih operatora. Logički operatori su dati u sljedećoj tabeli
Primjer
Operateri podružnica
Uslovni operatorako
Sintaksa
ako stanje
MATLAB komande
Opis
Ako je uslov tačan, tada se izvršavaju MATLAB komande postavljene između if i end, a ako uslov nije tačan, tada dolazi do prelaska na komande koje se nalaze iza kraja.
Primjer
Uslovni operatorelseif
Sintaksa
ako uslov1
elseif uslov2
………………………
elseif uslov
Opis
U zavisnosti od ispunjenja jednog ili drugog uslova, odgovarajuća grana programa radi, ako su svi uslovi netačni, onda se izvršavaju naredbe postavljene iza drugog.
Primjer
Operaterprekidač
Sintaksa
switch varijabla
vrijednost slučaja1
vrijednost slučaja2
……………………
case valuen
Svaka grana je definirana naredbom case, prijelaz na nju se izvodi kada varijabla naredbe switch uzme vrijednost specificiranu iza slučaja, ili jednu od vrijednosti sa liste slučajeva. Nakon izvršenja bilo koje grane, prekidač izlazi, dok se vrijednosti navedene u drugim slučajevima više ne provjeravaju. Ako nema odgovarajućih vrijednosti za varijablu, tada se izvršava grana programa koja odgovara drugačijem.
Primjer
Loop se prekida. Izuzetne situacije.
Operaterbreak
Sintaksa
Naredba break se koristi za organiziranje cikličkih izračuna: za...kraj, dok...kraj. Kada stanje
ako stanje
naredba break završava petlju (for ili while) i izvršavaju se naredbe koje se nalaze u redovima nakon kraja. Za ugniježđene petlje, break izlazi iz unutrašnje petlje.
Upravljanje izuzecima, operaterprobaj… uhvatiti
Sintaksa
izjave čije izvršenje
može dovesti do greške
izjave koje treba izvršiti
kada dođe do greške u bloku
između pokušaja i hvatanja
Opis
Konstrukcija try...catch vam omogućava da zaobiđete izuzetne situacije (greške koje dovode do prekida programa, na primjer, pristupanje nepostojećoj datoteci) i poduzmete neke radnje ako do njih dođe.
Primjer
Servisne funkcije
disp– prikazuje tekst ili vrijednost varijable u komandnom prozoru
unos- traži unos sa tastature. Koristi se prilikom kreiranja aplikacija sa interfejsom komandne linije.
eval – izvršava sadržaj stringa ili string varijable, poput MATLAB komandi
jasno- Uklanja varijable radnog okruženja.
Withlc- briše komandni prozor
Više detaljne informacije O ovim i drugim funkcijama možete saznati izvršavanjem in komandna linija
pomoćfunction_name
Zadaci za laboratorijske radove
Broj određene opcije zadatka određuje nastavnik.
Zadatak broj 1
Ovaj zadatak podrazumijeva pronalaženje algebarskog interpolacionog polinoma stepena n za neki skup podataka: P n(x) .
Cilj rada:
Potrebno je napisati program za izračunavanje koeficijenata algebarskog interpolacionog polinoma P n(x)= a 0 + a 1 x+ … + a n x n.
Metodička uputstva:
0 | 1 | 2 | 3 | |
Xi |
1,2 | 1,4 | 1,6 | 1,8 |
8,3893 | 8,6251 | 8,9286 | 8,9703 |
Odds a 0 , a 1 , …, a n određuju se iz rješenja sistema jednačina:
Evo nje red interpolacionog polinoma,
n+1 je broj datih parova tačaka ( x, y),
a 0 , a 1 ,… a n su željeni koeficijenti polinoma P n(x)= a 0 + a 1 x+ … + a n x n).
Programski zahtjevi
Postavite granice linija , na kojem je izgrađen interpolacijski polinom P(x)
· Pitajte n je broj interpolacijskih segmenata (ili, ekvivalentno, stepen polinoma)
Bilješka: x0, xn, n uneseno sa tastature.
· Za dobijanje početnih podataka (x, y)(broj parova bodova (x i, y i), na kojem je konstruiran interpolacijski polinom P(x) – n1=n+1) pružiti:
ü Unesite nasumično postavljene čvorove x i, i=0, n sa tastature
ü Proračun čvorova x i , i=0, n, koji odgovara uniformnom rasporedu argumenta x na segmentu
ü U paragrafima. 1.2 vrijednosti y i , i=0, n bilo uneseno sa tastature (ako je originalna funkcija nepoznata) ili izračunato iz date funkcije f(x). Izraz koji definira funkciju unosi se sa tastature i mora slijediti pravila za pisanje izraza u MATLAB-u
ü unos podataka ( x i, y i, i=0, n) iz datoteke
Riješite sistem jednadžbi za određivanje koeficijenata polinoma P(x)
Izgradite grafove originalne tablične funkcije i polinoma P(x)
· Ako su početni podaci dati kao funkcija f(x), iscrtati interpolacionu grešku /f(x) – P(x)/. Izračunajte maksimalnu modulo vrijednost interpolacijske greške na datom intervalu.
Zadatak broj 2
Spline interpolacija
Cilj rada:
Potrebno je kreirati program za izračunavanje koeficijenata i konstruisanje splajn funkcije S(x), "zalijepljene" od komada polinoma 3. reda S i(x), koji imaju posebnu oznaku:
S funkcija i(x) definisano na segmentu
Programski zahtjevi
Prilikom obavljanja ovog posla morate:
Postavite granice segmenta na kojem se gradi splajn funkcija S(x).
· Odrediti n – broj interpolacionih segmenata, na svakom od kojih je konstruisan kubni polinom Si(x).
· Napomena: x0, xn, n se unose sa tastature.
Organizirajte unos početnih podataka (x, y) (broj parova tačaka (xi, yi), na kojima je izgrađena splajn funkcija S(x), n1=n+1), obezbjeđujući:
ü Unos proizvoljno lociranih čvorova xi, i=0, n sa tastature
ü Izračunavanje čvorova xi, i=0, n, koji odgovaraju uniformnom rasporedu argumenta x na segmentu
ü U paragrafima. 1,2 vrijednosti yi, i=0, n se ili unose sa tastature (ako je originalna funkcija nepoznata) ili se izračunavaju iz date funkcije f(x). Izraz koji definira funkciju unosi se sa tastature i mora slijediti pravila za pisanje izraza u MATLAB-u
ü Unos podataka (xi, yi, i=0, n) iz datoteke
ü S1""(x0)=0, S3""(x3)=0
ü S1"(x0)=f "(x0), S3"(x3)=f "(x3)
ü S1""(x0)=f "(x0), S3""(x0)=f "(x3)
Za određivanje koeficijenata prirodnog kubnog splajna (granični uslovi 1), potrebno je riješiti sljedeći sistem jednadžbi:
Koeficijenti σ 0 =0, σ n =0
· Nacrtajte grafove originalne funkcije i splajn funkcije za sva tri tipa graničnih uslova.
· Konstruisati grafove funkcija greške interpolacije splajn-a f(x) – S(x) za sva tri tipa graničnih uslova.
Bilješka:
U MATLAB paketu indeksi jednodimenzionalnih i dvodimenzionalni nizovi počnite od 1, a ne od 0. Uzmite to u obzir kada pišete svoj program.
Zadatak broj 3
Aproksimacija funkcije metodom najmanjih kvadrata (LSM).
Ovaj zadatak podrazumijeva pronalaženje za neki skup podataka aproksimirajuće funkcije (polinoma stepena m) konstruisane metodom najmanjih kvadrata (LSM).
Cilj rada:
Potrebno je napisati program za pronalaženje koeficijenata polinoma φ (x)= a 0 + a 1 * x+… a n * x m metodom najmanjih kvadrata.
Neka, na primjer, imamo sljedeći skup podataka:
Xi |
1,2 | 1,4 | 1,6 | 1,8 | 2,0 | 2,2 | 2,4 | 2,6 | 2,8 | 3,0 |
8,3893 | 8,6251 | 8,9286 | 8,9703 | 9,1731 | 9,1784 | 8,8424 | 8,7145 | 8,3077 | 7,9611 |
Traženje traženih koeficijenata vrši se na sljedeći način:
Gdje n - iznos bodova ( x, y),
m je stepen željenog polinoma,
a 0 , a 1 , …, a m su željeni koeficijenti ( φ ( x )= a 0 + a 1 x + … + a m x m ).
Programski zahtjevi
Prilikom obavljanja ovog posla morate:
Postavite granice segmenta na kojem je izgrađena aproksimirajuća funkcija φ(x)=a0+a1*x+… an * xm
Skup m - stepen polinoma
· Napomena: x1, xn, m se unose sa tastature.
Da biste dobili početne podatke (x, y), na kojima je izgrađena aproksimirajuća funkcija φ(x)=a0+a1*x+… an* x m, obezbijedite:
ü Unos proizvoljnih čvorova xi, i=1, n sa tastature
ü Izračunavanje čvorova xi, i=1, n, koji odgovaraju uniformnom rasporedu argumenta x na segmentu
ü U paragrafima. 1,2 vrijednosti yi, i=1, n se ili unose sa tastature (ako je originalna funkcija nepoznata) ili se izračunavaju iz date funkcije f(x). Izraz koji definira funkciju unosi se sa tastature i mora slijediti pravila za pisanje izraza u MATLAB-u
ü Unos podataka (xi, yi, i=1, n) iz datoteke
Riješite sistem jednadžbi za određivanje koeficijenata polinoma φ(x)
Izgradite grafove originalne tabelarne date funkcije i polinoma φ(x)
· Ako su početni podaci dati kao funkcija f(x), iscrtati grešku interpolacije /f(x) – φ(x)/. Izračunajte maksimalnu modulo vrijednost interpolacijske greške na datom intervalu.
Prilikom izvođenja posljednje stavke na segmentu uzmite najmanje 500 bodova za kalkulacije
Zahtjevi za izradu laboratorijskih radova
Izvještaj mora sadržavati:
1. Izjava o problemu
2. Tekst programa
3. Rezultati testa
Napomena Tekstovi programa trebaju biti opremljeni komentarima.
1. Anufriev I.E. Matlab 5.3 / 6.x tutorial - Sankt Peterburg: BHV-Petersburg, 2003. - 736 str.: ilustr.
2. V.P. Dyakonov MATLAB 6.5 SPI/7 + Simulink 5/6 u matematici i modeliranju. Serija "Stručna biblioteka". - M.: SOLON-Press, 2005. - 576 str.: ilustr.
3. Anufriev I.E., Smirnov A.B., Smirnova E.N. MathLab 7. - Sankt Peterburg: BHV-Petersburg, 2005. - 1104 str.: ilustr.
Često, kada organizirate petlju, potrebno je iterirati preko vrijednosti brojača u datom rasponu vrijednosti i sa datim korakom promjene. Na primjer, da biste iterirali elemente vektora (niza), trebate organizirati brojač od 1 do N sa korakom od 1, gdje je N broj elemenata vektora. Za izračunavanje sume niza, brojač od a do b je također specificiran sa potrebnim korakom promjene koraka. I tako dalje. Zbog činjenice da se ovakvi zadaci često susreću u programskoj praksi, predložen je poseban operator for petlje za njihovu implementaciju, što olakšava i vizualnije implementaciju petlje sa brojačem.
Sintaksa izraza for petlje je sljedeća:
za<счетчик> =
<начальное значение>:<шаг>:<конечное значение>
<операторы цикла>
kraj
Razmislite o poslu ovaj ciklus na primjeru implementacije algoritma za pronalaženje maksimalne vrijednosti elementa u vektoru:
funkcija search_max
a = ;
m = a(1); % trenutna maksimalna vrijednost
za i=1:dužina(a) % petlja od 1 do kraja vektora c
% korak 1 (zadano)
ako m< a(i) %
если a(i) >m,
m = a(i); % tada je m = a(i)
kraj
kraj % kraj for petlje
disp(m);
U ovom primjeru za petlju postavlja brojač i i mijenja njegovu vrijednost od 1 do 10 u inkrementima od 1. Imajte na umu da ako inkrement nije eksplicitno specificiran, onda se po defaultu uzima jednakim 1.
U sljedećem primjeru razmotrite implementaciju algoritma za pomicanje vektorskih elemenata udesno, tj. pretposljednji element se stavlja na mjesto posljednjeg, sljedeći se stavlja na mjesto pretposljednjeg i tako dalje. do prvog elementa:
red funkcija
a = ;
disp(a);
za i=dužina(a):-1:2 % petlja od 10 do 2 sa korakom -1
a(i)=a(i-1); % pomaka elemenata vektora a
kraj % kraj for petlje
disp(a);
Rezultat programa
3 6 5 3 6 9 5 3 1 0
3
3 6 5 3 6 9 5 3 1
Gornji primjer pokazuje da za implementaciju ciklusa sa brojačem od veće vrijednosti na manju, morate eksplicitno specificirati korak, u ovom slučaju, -1. Ako se to ne učini, petlja će odmah prekinuti svoj rad i program neće raditi ispravno.
U zaključku, razmotrimo rad operatora petlje for koristeći primjer modeliranja slučajnog niza sa zakonom promjene
gdje je - koeficijent od -1 do 1; - normalna slučajna varijabla sa nultim matematičkim očekivanjem i varijansom
,
gdje je varijansa simuliranog slučajni proces. U ovom slučaju, prvi uzorak se modelira kao normalna slučajna varijabla sa nultim matematičkim očekivanjem i varijansom. Simulacijski program ima sljedeći oblik:
modeliranje funkcije_x
r = 0,95; % koeficijent modela
N = 100; % broj simuliranih tačaka
ex = 100; % varijanse procesa
et = ex*(1-r^2); % slučajne aditivne varijanse
x = nule(N,1); % inicijalizirati vektor x
x(1) = sqrt(ex)*randn; % simulacija prvog brojanja
za i=2:N % petlja od 2 do N
x(i)=r*x(i-1)+sqrt(et)*randn; % Simulacija JV
kraj % kraj petlje
plot(x); % prikaz SP kao grafikon
Kada se ovaj program izvrši, biće prikazana implementacija simuliranog slučajnog niza.
Rice. 2.1. Rezultat modeliranja slučajnog niza.
Rad programa počinje definisanjem varijabli, (promenljiva ex u programu) i za implementaciju navedenog modela. Zatim se izračunava varijansa a prvo brojanje slučajnog procesa je modelirano pomoću funkcije randn. Funkcija randn generiše normalne slučajne varijable sa nultom srednjom vrednošću i jediničnom varijansom. Da biste generirali slučajnu varijablu s varijansom, dovoljno je pomnožiti slučajnu varijablu s jediničnom varijansom sa , jer varijansa je srednji kvadrat slučajna varijabla o matematičkom očekivanju. Kao rezultat, imamo programsku liniju
x(1) = sqrt(ex)*randn;
Zatim se for petlja implementira sa brojačem i od 2 do N sa korakom od 1. Unutar petlje, preostali N-1 uzorci slučajnog procesa se simuliraju u skladu sa gornjom formulom. Posljednji red programa sadrži funkciju plot() koja prikazuje simulirani niz na ekranu kao graf. Detaljniji rad sa prikazom grafikona na ekranu biće reči u sledećem poglavlju.
Naredbe petlje U MATLAB-u, ponavljajuće akcije se izvode korištenjem for i while naredbi petlje. Najjednostavnija upotreba for je sljedeća: 2
Za count = start: korak: final MATLAB naredbe End Gdje je count varijabla petlje; n start, final - početna i konačna realna vrijednost; n korak - korak iz skupa realnih brojeva (podrazumevano je 1, može se izostaviti). Ciklus se završava kako postaje konačniji. samo tačka 3
Primer 1. Izračunajte sumu na x= -1, 0, 1. Rešenje Kreirajmo programski fajl u M-file editoru. Čuvamo ga u datoteci Summa. m S = 0; za k = 1: 10 S = S + x. ^ k / faktorijel(k); Kraj S Na komandnoj liniji x = -1:1:1; Zbir S = -0. 6 0 1. 7 Imajte na umu da su varijable k, s globalne. 4
Pogodnije je koristiti funkciju datoteke za ovaj primjer. U uređivaču M-datoteka Na komandnoj liniji kreirajte funkcijsku datoteku funkcija S = funsum(x, N) > f = funsum (-1: 1, 10) S = 0; > f = za m = 1: N -0. 6 0 1. 7 S = S + x. ^ m / faktorijel(m); end Ovdje su varijable s, m lokalne. 5
Primjer 2 Kreirajte Hilbertovu matricu reda n. Rješenje n = 4; a = nule (n, n); za i = 1: n za j = 1: n a (i, j) = 1 / (i+j-1); završiti 6
Napomena Prije popunjavanja matrica i vektora, prvo ih treba kreirati i popuniti nulama pomoću naredbe nule, kako bi se povećala brzina algoritma (tj. a = nula (n, n) je brža od a(i, j) = 0, i, j = 1, ... , n). 7
Petlja for je korisna pri izvođenju radnji koje se ponavljaju, kada je njihov broj unaprijed poznat. Ako njihov broj nije poznat unaprijed, možete koristiti while petlju: uvjet petlje While Naredbe MATLAB End 8
Primjer 3 Pronađite zbroj niza za dati x Nije moguće zbrojiti do beskonačnosti, ali možete akumulirati sumu dok članovi ne budu premali, na primjer, do 9
Napomena Malenost pojma je relativan koncept, pojam može biti, recimo, reda 10 -10, ali sam zbir je istog reda. U ovom slučaju, zbrajanje se ne može zaustaviti. Za sada nećemo obraćati pažnju na to i vraćamo se rješenju. 10
Src="https://present5.com/presentation/c993b082b44b0b84b1886b8dd4d3c841/image-11.jpg" alt="M-file funkcija Funkcija na komandnoj liniji S = mysin(x) > f = mysin(1)"> M-file функция В командной строке function S = mysin(x) > f = mysin (1) S = 0; 0. 8415 k = 0; while abs(x. ^ (2*k + 1)/factorial(2*k + 1)) > 1. 0 e -10 S = S + (-1)^k * x. ^ (2*k + 1)/factorial(2*k + 1); k = k + 1; end 11!}
Sljedeće relacijske operacije se koriste za postavljanje uvjeta izvršavanja petlje. Omjer Vrijednost i = = jednako > veće od > = veće ili jednako ~ = nije jednako
i logički operatori: Operator Condition Notation u MATLAB-u Ekvivalentna notacija Logički "i" x
Vratimo se na naš primjer i primijetimo da ako se niz divergira, onda uvjet malenosti trenutnog člana možda nikada neće biti zadovoljen i program može zapetljati. Zbog toga ograničavamo broj pojmova na 100. 000 Uslov će izgledati ovako ili (abs (x. ^ (2*k + 1)/faktorski(2*k + 1)) > 1. 0 e -10, k
Rukovanje izuzetnim situacijama 1) break - prekidanje petlje i izvršavanje operatora nakon završetka (na primer, izlaz iz unutrašnje petlje); 2) Deo netačnog matematičke operacije u MATLAB-u, ne prekida program (na primjer, =inf, =Na.N). Izlaz je naredba try konstrukcije čije izvršavanje može rezultirati naredbama za hvatanje greške u slučaju završetka greške 15
Operatori grananja Uslovni operator MATLAB koristi sledeće operatore grananja: n if je uslovni operator; n prekidač - izjava prekidača 16
Struktura uvjetnog iskaza: if (uvjet) MATLAB naredbe elseif (uvjet) MATLAB naredbe …………. Ovaj dio može nedostajati elseif (uslov) MATLAB naredbe else MATLAB naredbe kraj 17
Prilikom kompajliranja M-fajla koristeći izraze grananja, korisno je koristiti 1) naredbu upozorenje ('text') - za prikaz upozorenja u komandnom prozoru; 2) greška funkcije ('tekst') - za prekid izvršavanja programa. 18
Primjer 4 Za kvadratnu jednačinu ax 2 + bx +c = 0, a ≠ 0. Napišimo M-funkciju koja izračunava korijene kvadratne jednadžbe. Provjerimo broj ulaznih i izlaznih parametara, kao i činjenicu da su ulazni parametri brojevi, a ne vektori i matrice. Osim toga, uzimamo u obzir slučaj kompleksnog korijena. Program izgleda ovako: 19
funkcija = korijen 2 (a, b, c) ako (nargin
Napomena Za pisanje vlastitog računarski programi velika korist mogu doneti nezavisna studija standardne funkcionalne datoteke u poddirektorijumima Toolbox-a. Većina njih ima open source, što vam omogućava da razumete principe programiranja u MATLAB-u. Ostale funkcije (kao što je cos. m) su ugrađene. Sadrže komentare o korištenju funkcija. Uzmimo još jedan primjer. 21
funkcija y = kusfun (x) Ako je nargin ~= 1 greška ('Mora postojati jedan ulazni argument') end = size(x); y = nule (veličina(x)); % inicijalizira ulazni argument za i = 1: Nx za j = 1: Mx ako x (i, j) = -pi nije potreban! y (i, j) = x (i, j) / pi; inače y (i, j) = - cos(x (i, j)) kraj kraj 23
Naredba switch je pogodna za korištenje kada postoji korespondencija između diskretnih vrijednosti neke varijable i naknadnih akcija. 24
Struktura naredbe može se vidjeti iz sljedećeg primjera: prebacite slučaj -1 disp ('a = -1') case 0 disp ('a = 0') inače disp ('a nije jednako -1, 0 ') kraj 25
Naredba switch je vrlo pogodna za rješavanje zadatka prikazivanja različitih grafova funkcije koja se proučava (površina žice (a=1), linije nivoa (a=2) itd.). 26
Logički izrazi s nizovima i brojevima na univerzalan način obrada podataka matrice su logičke operacije. Pošto MATLAB predstavlja brojeve kao 1 1 nizove, prirodno je očekivati da nizovi budu uključeni u booleove izraze. Sada ćemo razmotriti proširenje logičkih i relacionih operacija na slučaj nizova. 27
Relacijske operacije Rezultat relacijske operacije u MATLAB-u može biti ili logička jedinica ('true') ili logička nula ('false'). Štaviše, za razliku od mnogih programskih jezika, aritmetičke varijable se mogu koristiti u istom izrazu kao i logičke. 28
Src="https://present5.com/presentation/c993b082b44b0b84b1886b8dd4d3c841/image-29.jpg" alt="Primjer 6 > a = 1; b = 3; c = 1; >"> Пример 6 > a = 1; b = 3; c = 1; > a + (b > c) ans = 2 > a + (b!}
Src="https://present5.com/presentation/c993b082b44b0b84b1886b8dd4d3c841/image-30.jpg" alt=" > A = ; B = ; B = ; > C = A = = B C = 30
Napomena Kao iu elementarnim aritmetičkim operacijama, dozvoljeno je koristiti brojeve kao jedan od argumenata relacijske operacije. U ovom slučaju, svaki element niza se uspoređuje s brojem, rezultat je niz iste veličine kao i originalni. 31
Logičke operacije Primjena logičkih operacija na nizove rezultira njihovim izvršavanjem element po element nad elementima niza. n A i B - daje jedan ako odgovarajući elementi nisu jednaki nuli; n A ili B - daje jedan ako barem jedan element nije jednak nuli; 32
nije A - primjenjuje se na jedan niz, ako element nije jednak nuli, tada se postavlja nula, u suprotnom - jedan; n all (v) - provjerava nulte elemente u vektoru, vraća jedan ako nema nula elemenata. Ako je v matrica, onda je rezultat po stupcima; n bilo koji (v) – vraća jedan ako postoji najmanje jedan element različit od nule u ulaznom vektoru. n 33
Prioritet operacija 1. Negacija; 2. Transpozicija, eksponencijacija (uključujući element po element), znak plus i minus ispred broja; 3. Množenje i dijeljenje (uključujući element po element); 4. Sabiranje i oduzimanje; 5. Operacije veza; 6. Logički 'i', logički 'ili'. 34
Src="https://present5.com/presentation/c993b082b44b0b84b1886b8dd4d3c841/image-36.jpg" alt=" Primjer 7 > a = ; > u"> Пример 7 > a = ; > u = find ((a = -1)) 3 4 5 > anew = a(u) 0 -1 0 36!}
Primjer 8. Zamijenite elemente kvadratne matrice od 5 x 5 slučajnih brojeva iz intervala (0, 1), veći od prosječne vrijednosti svih elemenata za 10%, sa prosječnom vrijednošću. Rješenje > A = rand(5); > S = zbir (zbir A) / 25; > A(pronađi (A > S* 1. 1)) = S U ovom slučaju, funkcija find vraća 2 vektora brojeva redova i stupaca. 37
Polinomi u MATLAB-u Polinom p(x)=anxn+an-1xn-1+. . . +a 0, an≠ 0 u MATLAB-u, vektor-stroy p= je dat, gdje su ai bilo koji kompleksni brojevi, an≠ 0. Imajte na umu da se stepen polinoma izračunava na sljedeći način: n=length(p)-1 (kada je n=0, const). 38
Glavne naredbe za operacije s polinomima su sljedeće: n n n r=roots(p) je vektor stupca koji sadrži sve korijene polinoma; p=poly(r) – konstrukcija polinoma po korijenima datim u vektoru stupca r, osim toga, ako je r kvadratna matrica, tada je p karakteristični polinom; y=polyval(p, x) – izračunavanje element po element y vrijednosti polinoma p na skupu x, gdje x može biti vektor ili matrica; 39
n n n polyder(p) je vektor reda izveden iz p (diferencijacija polinoma p); polyder(p, q) je derivacija proizvoda polinoma p i q; = polyder(p, q) je izvod količnika polinomom p i q, gdje su a i b brojnik i nazivnik rezultujućeg razlomka; 40
n n n p=polyfit(x, y, n) – aproksimacija funkcije y(x) polinomom p n-ti stepen metodom koja minimizira rastojanje između polinomskog grafa i prave krive, usrednjeno po njihovoj cijeloj dužini; conv(p, q) je vektor reda, proizvod polinoma p i q; =deconv(p, q) – podjela p sa q, w-kvocijent, r-ostatak i p=conv (q, w) + r; 41
n =ostatak(a, b) je dekompozicija racionalne funkcije na jednostavne razlomke nad poljem kompleksnih brojeva uz odabir cijelog dijela k(h) ili gdje su ri ostaci (r elementi), pi su polovi (p elementi). Ova komanda takođe radi u obrnutom režimu =residue(r, p, k) 42
Napomena 1. Ako polinom b(x) u ostatku (a, b) i polinom p(x) u korijenima (p) imaju višestruke ili bliske korijene, onda rezultati mogu biti netačni, jer je takav problem loše uvjetovan . Loša uslovljenost je izuzetno jaka ovisnost rezultata o koeficijentima (analogno stabilnosti rješenja u diferencijalnim jednadžbama). 43
2. Prilikom rada sa polinomima javljaju se polinomi oblika, a MATLAB ne provjerava automatski an≠ 0 i dolazi do grešaka (trebate sami to pratiti). 44
Odjel: Informacione tehnologije
PROGRAMIRANJE INMATLAB
OperateriMATLAB
· Naredbe petlje
Ciklusza
Sintaksa
count=start:step:final
MATLAB komande
Opis
count - varijabla petlje,
početak - njegova početna vrijednost,
final - njegova konačna vrijednost,
korak - korak za koji se broj povećava svaki put kada uđe u petlju
petlja se završava čim vrijednost count postane veća od konačne.
Primjer
Neka je potrebno izvesti porodicu krivulja za x€ , koja je data funkcijom u zavisnosti od parametra
y (x, a) \u003d e-ax sin x,
za vrijednosti parametara a od -0,1 do 0,1. Ispod je lista fajl programa za izlaz porodice krivulja.
Lista programa
x = ;
za a = -0,1:0,02:0,1
y = exp(-a*x).*sin(x);
Kao rezultat izvršavanja programa, pojavit će se grafički prozor koji sadrži potrebnu porodicu krivulja.
Ciklusdok
Sintaksa
uvjet petlje while
MATLAB komande
Opis
Petlja traje sve dok je (true) uslov petlje istinit. Sljedeće relacijske operacije su dozvoljene za postavljanje uvjeta za izvršavanje ciklusa:
Složeniji uslovi se specificiraju pomoću logičkih operatora. Logički operatori su dati u sljedećoj tabeli
Primjer
Operateri podružnica
Uslovni operatorako
Sintaksa
ako stanje
MATLAB komande
Opis
Ako je uslov tačan, tada se izvršavaju MATLAB komande postavljene između if i end, a ako uslov nije tačan, tada dolazi do prelaska na komande koje se nalaze iza kraja.
Primjer
Uslovni operatorelseif
Sintaksa
ako uslov1
elseif uslov2
………………………
elseif uslov
Opis
U zavisnosti od ispunjenja jednog ili drugog uslova, odgovarajuća grana programa radi, ako su svi uslovi netačni, onda se izvršavaju naredbe postavljene iza drugog.
Primjer
Operaterprekidač
Sintaksa
switch varijabla
vrijednost slučaja1
vrijednost slučaja2
……………………
case valuen
Svaka grana je definirana naredbom case, prijelaz na nju se izvodi kada varijabla naredbe switch uzme vrijednost specificiranu iza slučaja, ili jednu od vrijednosti sa liste slučajeva. Nakon izvršenja bilo koje grane, prekidač izlazi, dok se vrijednosti navedene u drugim slučajevima više ne provjeravaju. Ako nema odgovarajućih vrijednosti za varijablu, tada se izvršava grana programa koja odgovara drugačijem.
Primjer
Loop se prekida. Izuzetne situacije.
Operaterbreak
Sintaksa
Naredba break se koristi za organiziranje cikličkih izračuna: za...kraj, dok...kraj. Kada stanje
ako stanje
naredba break završava petlju (for ili while) i izvršavaju se naredbe koje se nalaze u redovima nakon kraja. Za ugniježđene petlje, break izlazi iz unutrašnje petlje.
Upravljanje izuzecima, operaterprobaj… uhvatiti
Sintaksa
izjave čije izvršenje
može dovesti do greške
izjave koje treba izvršiti
kada dođe do greške u bloku
između pokušaja i hvatanja
Opis
Konstrukcija try...catch vam omogućava da zaobiđete izuzetne situacije (greške koje dovode do prekida programa, na primjer, pristupanje nepostojećoj datoteci) i poduzmete neke radnje ako do njih dođe.
Primjer
Servisfunkcije
disp- prikazuje tekst ili vrijednost varijable u komandnom prozoru
unos- Izvodi zahtjev za unos sa tastature. Koristi se prilikom kreiranja aplikacija sa interfejsom komandne linije.
eval - izvršava sadržaj stringa ili string varijable, poput MATLAB komandi
jasno- uklanja varijable radnog okruženja.
Withlc- briše komandni prozor
Za više informacija o ovim i drugim funkcijama, pokrenite na komandnoj liniji
pomoćfunction_name
Zadaciza laboratorijske radove
Broj određene opcije zadatka određuje nastavnik.
Vježbajte№ 1
Ovaj zadatak podrazumijeva pronalaženje algebarskog interpolacionog polinoma stepena n za neki skup podataka: Pn(x) .
Cilj rada:
Potrebno je napisati program za izračunavanje koeficijenata algebarskog interpolacionog polinoma Pn(x)= a0 + a1 x+ … + anxn.
Metodička uputstva:
Xi | |||||
yi |
Odds a0 , a1 , …, an određuju se iz rješenja sistema jednačina:
Evo nje red interpolacionog polinoma,
n+1 - broj datih parova bodova ( x, y),
a0 , a1 ,… an su željeni koeficijenti polinoma Pn(x)= a0 + a1 x+ … + anxn).
Programski zahtjevi
Postavite granice linija , na kojem je izgrađen interpolacijski polinom P(x)
· Pitajte n- broj interpolacijskih segmenata (ili, ekvivalentno, stepen polinoma)
Bilješka: x0, xn, n uneseno sa tastature.
· Za dobijanje početnih podataka (x, y) (broj parova bodova (xi, yi) , na kojem je konstruiran interpolacijski polinom P(x) - n1=n+1) pružiti:
b Unesite nasumično postavljene čvorove xi, i=0, n sa tastature
b Proračun čvorova xi, i=0, n, koji odgovara uniformnom rasporedu argumenta x na segmentu
b U paragrafima. 1.2 vrijednosti yi, i=0, n bilo uneseno sa tastature (ako je originalna funkcija nepoznata) ili izračunato iz date funkcije f(x). Izraz koji definira funkciju unosi se sa tastature i mora slijediti pravila za pisanje izraza u MATLAB-u
b Unos podataka ( xi, yi, i=0, n) iz datoteke
Riješite sistem jednadžbi za određivanje koeficijenata polinoma P(x)
Izgradite grafove originalne tablične funkcije i polinoma P(x)
· Ako su početni podaci dati kao funkcija f(x), iscrtati interpolacionu grešku /f(x) - P(x)/. Izračunajte maksimalnu modulo vrijednost interpolacijske greške na datom intervalu.
Vježbajte № 2
Spline interpolacija
Cilj rada:
Potrebno je kreirati program za izračunavanje koeficijenata i konstruisanje splajn funkcije S(x), "zalijepljene" od komada polinoma 3. reda S i(x), koji imaju posebnu oznaku:
S funkcija i(x) definisano na segmentu
Programski zahtjevi
Prilikom obavljanja ovog posla morate:
Postavite granice segmenta na kojem se gradi splajn funkcija S(x).
· Odrediti n - broj interpolacijskih segmenata, na svakom od kojih se gradi kubni polinom Si(x).
· Napomena: x0, xn, n se unose sa tastature.
Organizirajte unos početnih podataka (x, y) (broj parova tačaka (xi, yi), na kojima je izgrađena splajn funkcija S(x), n1=n+1), obezbjeđujući:
ʹ Unos proizvoljno lociranih čvorova xi, i=0, n sa tastature
b Izračunavanje čvorova xi, i=0, n, koji odgovaraju uniformnom rasporedu argumenta x na segmentu
b U paragrafima. 1,2 vrijednosti yi, i=0, n se ili unose sa tastature (ako je originalna funkcija nepoznata) ili se izračunavaju iz date funkcije f(x). Izraz koji definira funkciju unosi se sa tastature i mora slijediti pravila za pisanje izraza u MATLAB-u
b Unos podataka (xi, yi, i=0, n) iz datoteke
b S1""(x0)=0, S3""(x3)=0
b S1 "(x0) \u003d f "(x0), S3" (x3) \u003d f "(x3)
b S1""(x0)=f "(x0), S3""(x0)=f "(x3)
Za određivanje koeficijenata prirodnog kubnog splajna (granični uslovi 1), potrebno je riješiti sljedeći sistem jednadžbi:
Koeficijenti?0=0,?n=0
· Nacrtajte grafove originalne funkcije i splajn funkcije za sva tri tipa graničnih uslova.
· Konstruisati grafove funkcija greške interpolacije splajn-a f(x) - S(x) za sva tri tipa graničnih uslova.
Bilješka:
U MATLAB paketu indeksi jednodimenzionalnih i dvodimenzionalnih nizova počinju od 1, a ne od 0. Uzmite to u obzir prilikom pisanja programa.
Vježbajte№3
Aproksimacija funkcije metodom najmanjih kvadrata (LSM).
Ovaj zadatak podrazumijeva pronalaženje za neki skup podataka aproksimirajuće funkcije (polinoma stepena m) konstruisane metodom najmanjih kvadrata (LSM).
Cilj rada:
Trebate napisati program za pronalaženje koeficijenata polinoma? (x)= a0 + a1 * x+… an * xm metodom najmanjih kvadrata.
Neka, na primjer, imamo sljedeći skup podataka:
Xi | |||||||||||
yi |
Traženje traženih koeficijenata vrši se na sljedeći način:
Gdje n - iznos bodova ( x, y),
m - stepen željenog polinoma,
a 0 , a 1 , …, a m - željeni koeficijenti ( ? ( x )= a 0 + a 1 x + … + a m x m ).
Programski zahtjevi
Prilikom obavljanja ovog posla morate:
Postaviti granice segmenta na kojem se gradi aproksimirajuća funkcija?(x)=a0+a1*x+… an * xm
Skup m - stepen polinoma
· Napomena: x1, xn, m se unose sa tastature.
Da biste dobili početne podatke (x, y), na kojima je izgrađena aproksimirajuća funkcija?(x)=a0+a1*x+… an* xm obezbedite:
ʹ Unos nasumično lociranih čvorova xi, i=1, n sa tastature
b Izračunavanje čvorova xi, i=1, n, koji odgovaraju uniformnom rasporedu argumenta x na segmentu
b U paragrafima. 1,2 vrijednosti yi, i=1, n se ili unose sa tastature (ako je originalna funkcija nepoznata) ili se izračunavaju iz date funkcije f(x). Izraz koji definira funkciju unosi se sa tastature i mora slijediti pravila za pisanje izraza u MATLAB-u
b Unošenje podataka (xi, yi, i=1, n) iz datoteke
Riješite sistem jednadžbi za određivanje koeficijenata polinoma? (x)
Napraviti grafove originalne tabelarne date funkcije i polinoma? (x)
· Ako su početni podaci dati kao funkcija f(x), iscrtati grešku interpolacije /f(x) - ?(x)/. Izračunajte maksimalnu modulo vrijednost interpolacijske greške na datom intervalu.
Prilikom izvođenja posljednje stavke na segmentu uzmite najmanje 500 bodova za kalkulacije
Zahtjevi za izradu laboratorijskih radova
Izvještaj mora sadržavati:
1. Izjava o problemu
2. Tekst programa
3. Rezultati testa
Napomena Tekstovi programa trebaju biti opremljeni komentarima.
Bibliografija
1. Anufriev I.E. Matlab 5.3 / 6.x tutorial - Sankt Peterburg: BHV-Petersburg, 2003. - 736 str.: ilustr.
2. V.P. Dyakonov MATLAB 6.5 SPI/7 + Simulink 5/6 u matematici i modeliranju. Serija "Stručna biblioteka". - M.: SOLON-Press, 2005. - 576 str.: ilustr.
3. Anufriev I.E., Smirnov A.B., Smirnova E.N. MathLab 7. - Sankt Peterburg: BHV-Petersburg, 2005. - 1104 str.: ilustr.
Često, kada organizirate petlju, potrebno je iterirati preko vrijednosti brojača u datom rasponu vrijednosti i sa datim korakom promjene. Na primjer, da biste iterirali elemente vektora (niza), trebate organizirati brojač od 1 do N sa korakom od 1, gdje je N broj elemenata vektora. Za izračunavanje sume niza, brojač od a do b je također specificiran sa potrebnim korakom promjene koraka. I tako dalje. Zbog činjenice da se ovakvi zadaci često susreću u programskoj praksi, predložen je poseban operator for petlje za njihovu implementaciju, što olakšava i vizualnije implementaciju petlje sa brojačem.
Sintaksa izraza for petlje je sljedeća:
za<счетчик> =
<начальное значение>:<шаг>:<конечное значение>
<операторы цикла>
kraj
Razmotrimo rad ovog ciklusa na primjeru implementacije algoritma za pronalaženje maksimalne vrijednosti elementa u vektoru:
funkcija search_max
a = ;
m = a(1); % trenutna maksimalna vrijednost
za i=1:dužina(a) % petlja od 1 do kraja vektora c
% korak 1 (zadano)
ako m< a(i) %
если a(i) >m,
m = a(i); % tada je m = a(i)
kraj
kraj % kraj for petlje
disp(m);
U ovom primjeru, for petlja postavlja brojač i i mijenja njegovu vrijednost sa 1 na 10 u koracima od 1. Imajte na umu da ako inkrement nije eksplicitno specificiran, onda je zadana vrijednost 1.
U sljedećem primjeru razmotrite implementaciju algoritma za pomicanje vektorskih elemenata udesno, tj. pretposljednji element se stavlja na mjesto posljednjeg, sljedeći se stavlja na mjesto pretposljednjeg i tako dalje. do prvog elementa:
red funkcija
a = ;
disp(a);
za i=dužina(a):-1:2 % petlja od 10 do 2 sa korakom -1
a(i)=a(i-1); % pomaka elemenata vektora a
kraj % kraj for petlje
disp(a);
Rezultat programa
3 6 5 3 6 9 5 3 1 0
3
3 6 5 3 6 9 5 3 1
Gornji primjer pokazuje da za implementaciju ciklusa sa brojačem od veće vrijednosti na manju, morate eksplicitno specificirati korak, u ovom slučaju, -1. Ako se to ne učini, petlja će odmah prekinuti svoj rad i program neće raditi ispravno.
U zaključku, razmotrimo rad operatora petlje for koristeći primjer modeliranja slučajnog niza sa zakonom promjene
gdje je - koeficijent od -1 do 1; - normalna slučajna varijabla sa nultim matematičkim očekivanjem i varijansom
,
gdje je varijansa simuliranog slučajnog procesa. U ovom slučaju, prvi uzorak se modelira kao normalna slučajna varijabla sa nultim matematičkim očekivanjem i varijansom. Simulacijski program ima sljedeći oblik:
modeliranje funkcije_x
r = 0,95; % koeficijent modela
N = 100; % broj simuliranih tačaka
ex = 100; % varijanse procesa
et = ex*(1-r^2); % slučajne aditivne varijanse
x = nule(N,1); % inicijalizirati vektor x
x(1) = sqrt(ex)*randn; % simulacija prvog brojanja
za i=2:N % petlja od 2 do N
x(i)=r*x(i-1)+sqrt(et)*randn; % Simulacija JV
kraj % kraj petlje
plot(x); % prikaz SP kao grafikon
Kada se ovaj program izvrši, biće prikazana implementacija simuliranog slučajnog niza.
Rice. 2.1. Rezultat modeliranja slučajnog niza.
Rad programa počinje definisanjem varijabli, (promenljiva ex u programu) i za implementaciju navedenog modela. Zatim se izračunava varijansa a prvo brojanje slučajnog procesa je modelirano pomoću funkcije randn. Funkcija randn generiše normalne slučajne varijable sa nultom srednjom vrednošću i jediničnom varijansom. Da biste generirali slučajnu varijablu s varijansom, dovoljno je pomnožiti slučajnu varijablu s jediničnom varijansom sa , jer varijansa je prosječni kvadrat slučajne varijable u odnosu na matematičko očekivanje. Kao rezultat, imamo programsku liniju
x(1) = sqrt(ex)*randn;
Zatim se for petlja implementira sa brojačem i od 2 do N sa korakom od 1. Unutar petlje, preostali N-1 uzorci slučajnog procesa se simuliraju u skladu sa gornjom formulom. Posljednji red programa sadrži funkciju plot() koja prikazuje simulirani niz na ekranu kao graf. Detaljniji rad sa prikazom grafikona na ekranu biće reči u sledećem poglavlju.