Programiranje u MATLAB-u. Algoritamski iskazi u Matlabu Loop naredba dok primjeri u Matlabu

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, operaterprobajuhvatiti

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, operaterprobajuhvatiti

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žbajte1

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žbajte2

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.



Učitavanje...
Top