Részleg: Információs technológiák
PROGRAMOZÁS BEMATLAB
ÜzemeltetőkMATLAB
· Loop kijelentések
Ciklusszámára
Szintaxis
count=start:step:final
MATLAB parancsok
Leírás
számol - hurokváltozó,
start a kezdeti értéke,
végső a végső értéke,
lépés – az a lépés, amellyel a szám minden alkalommal növekszik, amikor belép a hurokba
a ciklus véget ér, amint a count értéke nagyobb lesz, mint a végleges.
Példa
Legyen szükséges x€ görbecsalád levezetése, amelyet a paramétertől függő függvény ad meg
y (x, a) \u003d e-ax sin x,
a paraméterértékeknél -0,1 és 0,1 között. Az alábbiakban egy görbecsalád kimenetére szolgáló fájlprogram listája található.
Programlista
x = ;
ha a = -0,1:0,02:0,1
y = exp(-a*x).*sin(x);
A program végrehajtása eredményeként megjelenik egy grafikus ablak, amely tartalmazza a szükséges görbecsaládot.
Ciklusmíg
Szintaxis
míg hurokfeltétel
MATLAB parancsok
Leírás
A ciklus addig fut, amíg a ciklus (igaz) feltétele igaz. A következő relációs műveletek engedélyezettek egy ciklus végrehajtásának feltételének beállítására:
A bonyolultabb feltételek logikai operátorok segítségével adhatók meg. A logikai operátorokat a következő táblázat tartalmazza
Példa
Fiókkezelők
Feltételes operátorha
Szintaxis
ha feltétel
MATLAB parancsok
Leírás
Ha a feltétel igaz, akkor az if és end közé helyezett MATLAB parancsok végrehajtásra kerülnek, ha pedig nem igaz, akkor az átmenet a vége után található parancsokra történik.
Példa
Feltételes operátorelseif
Szintaxis
ha feltétel1
elseif feltétel2
………………………
elseif feltétel
Leírás
Egyik vagy másik feltétel teljesülésétől függően a program megfelelő ága működik, ha minden feltétel nem megfelelő, akkor a többi után elhelyezett parancsok végrehajtásra kerülnek.
Példa
Operátorkapcsoló
Szintaxis
kapcsoló változó
esetérték1
esetérték2
……………………
case valuen
Minden ágat egy case utasítás definiál, az arra való áttérés akkor történik meg, amikor a switch utasítás változó az eset után megadott értéket, vagy az esetlistából valamelyik értéket veszi fel. Bármelyik elágazás végrehajtása után a kapcsoló kilép, míg a többi esetben megadott értékek már nem kerülnek ellenőrzésre. Ha nincs megfelelő érték a változóhoz, akkor a program másnak megfelelő ága fut le.
Példa
A hurok megszakad. Kivételes helyzetek.
Operátorszünet
Szintaxis
A break utasítás a ciklikus számítások rendszerezésére szolgál: for...end, while...end. Amikor az állapot
ha feltétel
a break utasítás befejezi a ciklust (for vagy while), és a végét követő sorokon található utasítások végrehajtásra kerülnek. Beágyazott hurkok esetén a break kilép a belső ciklusból.
Kivételkezelés, Kezelőpróbáld ki… fogás
Szintaxis
nyilatkozatok, amelyek végrehajtása
hibát eredményezhet
végrehajtandó nyilatkozatok
amikor hiba lép fel egy blokkban
a próbálkozás és a fogás között
Leírás
A try...catch konstrukció lehetővé teszi a kivételes helyzetek megkerülését (olyan hibák, amelyek a program leállásához vezetnek, például egy nem létező fájl elérése), és ha előfordulnak, megtesz valamit.
Példa
Szerviz funkciók
diszp– megjeleníti egy változó szövegét vagy értékét a parancsablakban
bemenet- bevitelt kér a billentyűzetről. Alkalmazások parancssori felülettel történő létrehozásakor használatos.
eval – végrehajtja egy karakterlánc vagy karakterlánc-változó tartalmát, például a MATLAB parancsokat
egyértelmű- Eltávolítja a munkakörnyezeti változókat.
Val vellc- törli a parancsablakot
Több részletes információk Ezekről és más funkciókról tájékozódhat, ha végrehajtja parancs sor
Segítségfüggvény_neve
Laboratóriumi munkák elvégzése
Egy adott feladat opció számát a tanár határozza meg.
1. számú feladat
Ez a feladat magában foglalja egy n fokú algebrai interpolációs polinom megtalálását bizonyos adathalmazokhoz: P n(x) .
A munka célja:
Programot kell írni egy algebrai interpolációs polinom együtthatóinak kiszámításához P n(x)= a 0 + a 1 x+ … + a n x n.
Módszertani utasítások:
0 | 1 | 2 | 3 | |
xén |
1,2 | 1,4 | 1,6 | 1,8 |
8,3893 | 8,6251 | 8,9286 | 8,9703 |
Esély a 0 , a 1 , …, a n egyenletrendszer megoldásából határozzuk meg:
Itt naz interpolációs polinom sorrendje,
n+1 a megadott pontpárok száma ( x, y),
a 0 , a 1 ,… a n a polinom kívánt együtthatói P n(x)= a 0 + a 1 x+ … + a n x n).
Programkövetelmények
Állítsa be a vonal határait , amelyre az interpolációs polinom épül P(x)
· Kérdezzen n az interpolációs szegmensek száma (vagy ennek megfelelően a polinom foka)
Jegyzet: x0, xn, n billentyűzetről lépett be.
· A kezdeti adatok beszerzése (x, y)(pontpárok száma (x i, y i), amelyre az interpolációs polinom épül P(x) – n1=n+1) biztosítani:
ü Adja meg a véletlenszerűen elhelyezett csomópontokat x i, i=0, n a billentyűzetről
ü Csomók számítása x i , i=0, n, az érvelés egységes elrendezésének megfelelő x a szegmensen
ü Bekezdésekben. 1,2 értékek y i, i=0, n vagy a billentyűzetről beírva (ha az eredeti függvény ismeretlen), vagy egy adott függvényből számolva f(x). A függvényt definiáló kifejezés a billentyűzetről kerül beírásra, és követnie kell a kifejezések MATLAB-ban történő írásának szabályait
ü Adatbevitel ( x i, y i, i=0, n) fájlból
Egyenletrendszer megoldása a P(x) polinom együtthatóinak meghatározására
Az eredeti táblázatos függvény és a P(x) polinom grafikonjainak felépítése
· Ha a kezdeti adatokat f(x) függvényként adjuk meg, ábrázoljuk az /f(x) – P(x)/ interpolációs hibát. Számítsa ki az interpolációs hiba maximális modulo értékét egy adott intervallumon.
2. számú feladat
Spline interpoláció
A munka célja:
Létre kell hozni egy programot az együtthatók kiszámítására és az S(x) spline függvény felépítésére, S(x) 3. rendű polinomokból "ragasztott" én(x), amelyek speciális jelöléssel rendelkeznek:
S függvény én(x) a szegmensen meghatározott
Programkövetelmények
A munka elvégzésekor a következőket kell tennie:
Állítsa be annak a szakasznak a határait, amelyre az S(x) spline függvény épül
· Adja meg n – azoknak az interpolációs szegmenseknek a száma, amelyek mindegyikére a Si(x) köbös polinom épül.
· Megjegyzés: x0, xn, n a billentyűzetről írható be.
Szervezzük meg a kezdeti adatok (x, y) bevitelét (a pontpárok száma (xi, yi), amelyre az S(x), n1=n+1 spline függvény épül), feltéve:
ü Önkényesen elhelyezkedő xi, i=0, n csomópontok bevitele a billentyűzetről
ü xi, i=0, n csomópontok számítása, amelyek megfelelnek az x argumentum egyenletes elrendezésének a szegmensen
ü Bekezdésekben. 1,2 az yi, i=0, n értékeket vagy a billentyűzetről írjuk be (ha az eredeti függvény ismeretlen), vagy az adott f(x) függvényből számítjuk ki. A függvényt definiáló kifejezés a billentyűzetről kerül beírásra, és követnie kell a kifejezések MATLAB-ban történő írásának szabályait
ü Adatbevitel (xi, yi, i=0, n) fájlból
ü S1""(x0)=0, S3""(x3)=0
ü S1"(x0)=f "(x0), S3"(x3)=f "(x3)
ü S1""(x0)=f "(x0), S3""(x0)=f "(x3)
A természetes köbös spline együtthatóinak meghatározásához (1. peremfeltétel) a következő egyenletrendszert kell megoldani:
Együtthatók σ 0 =0, σ n =0
· Az eredeti függvény és a spline függvények ábrázolása mindhárom peremfeltételtípusra.
· Szerkessze meg az f(x) – S(x) spline interpolációs hibafüggvények gráfjait mindhárom peremfeltételtípusra.
Jegyzet:
A MATLAB csomagban az indexek az egydimenziós ill kétdimenziós tömbök 1-től kezdd, ne 0-tól. Ezt vedd figyelembe a programod írásakor.
3. számú feladat
Függvény közelítése a legkisebb négyzetek módszerével (LSM).
Ez a feladat azt jelenti, hogy valamilyen adathalmazra egy közelítő függvényt (m-fokú polinomot) kell keresni, amelyet a legkisebb négyzetek módszerével (LSM) állítottunk össze.
A munka célja:
A φ polinom együtthatóinak megkeresésére programot kell írni (x)= a 0 + a 1 * x+… a n * x m a legkisebb négyzetek módszerével.
Legyen például a következő adatkészletünk:
xén |
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 |
A szükséges együtthatók keresése a következőképpen történik:
Ahol n - pontok összege ( x, y),
m a kívánt polinom foka,
a 0 , a 1 , …, a m a kívánt együtthatók ( φ ( x )= a 0 + a 1 x + … + a m x m ).
Programkövetelmények
A munka elvégzésekor a következőket kell tennie:
Állítsa be annak a szakasznak a határait, amelyre a közelítő függvény épül φ(x)=a0+a1*x+… an * xm
Állítsa be m - a polinom foka
· Megjegyzés: x1, xn, m a billentyűzetről írható be.
A kezdeti adatok (x, y) megszerzéséhez, amelyekre a φ(x)=a0+a1*x+… an* x m közelítő függvény épül, adja meg:
ü Tetszőleges xi, i=1, n csomópontok beírása a billentyűzetről
ü xi, i=1, n csomópontok számítása, amelyek megfelelnek az x argumentum egyenletes elrendezésének a szegmensen
ü Bekezdésekben. 1,2 az yi, i=1, n értékeket vagy a billentyűzetről írjuk be (ha az eredeti függvény ismeretlen), vagy az adott f(x) függvényből számítjuk ki. A függvényt definiáló kifejezés a billentyűzetről kerül beírásra, és követnie kell a kifejezések MATLAB-ban történő írásának szabályait
ü Adatok (xi, yi, i=1, n) bevitele fájlból
Oldjon meg egy egyenletrendszert a φ(x) polinom együtthatóinak meghatározásához
Az eredeti táblázatos adott függvény és a φ(x) polinom grafikonjainak felépítése
· Ha a kezdeti adatokat f(x) függvényként adjuk meg, ábrázoljuk az /f(x) – φ(x)/ interpolációs hibát. Számítsa ki az interpolációs hiba maximális modulo értékét egy adott intervallumon.
A szegmens utolsó elemének végrehajtásakor legalább 500 pontot szerezzen a számításokhoz
A laboratóriumi munka tervezésének követelményei
A jelentésnek tartalmaznia kell:
1. A probléma megfogalmazása
2. Program szövege
3. Vizsgálati eredmények
Megjegyzés A programszövegeket megjegyzésekkel kell ellátni.
1. Anufriev I.E. Matlab 5.3 / 6.x oktatóanyag - St. Petersburg: BHV-Petersburg, 2003. - 736 p.: ill.
2. V.P. Dyakonov MATLAB 6.5 SPI/7 + Simulink 5/6 matematikában és modellezésben. "Professzionális könyvtár" sorozat. - M.: SOLON-Press, 2005. - 576 p.: ill.
3. Anufriev I.E., Smirnov A.B., Smirnova E.N. MathLab 7. - St. Petersburg: BHV-Petersburg, 2005. - 1104 p.: ill.
Gyakran egy hurok szervezésekor szükség van a számláló feletti iterációra egy adott értéktartományban és egy adott változtatási lépéssel. Például egy vektor (tömb) elemein való iterációhoz 1-től N-ig számlálót kell szervezni 1-es lépéssel, ahol N a vektor elemeinek száma. A sorozat összegének kiszámításához egy a-tól b-ig tartó számlálót is megadunk a szükséges lépésváltási lépéssel. Stb. Tekintettel arra, hogy a programozási gyakorlatban gyakran találkozunk ilyen feladatokkal, megvalósításukhoz külön for loop operátort javasoltak, ami megkönnyíti és látványosabbá teszi a számlálós ciklus megvalósítását.
A for ciklus utasítás szintaxisa a következő:
számára<счетчик> =
<начальное значение>:<шаг>:<конечное значение>
<операторы цикла>
vége
Fontolja meg a munkát ezt a ciklust a vektorban lévő elem maximális értékének megtalálására szolgáló algoritmus megvalósításának példáján:
függvény keresési_max
a = ;
m = a(1); % aktuális maximális érték
ha i=1:hossz(a) % hurok 1-től a c vektor végéig
% 1. lépés (alapértelmezett)
ha m< a(i) %
если a(i) >m,
m = a(i); %, akkor m = a(i)
vége
vége % for ciklus vége
disp(m);
Ebben a példában hurokhoz beállítja az i számlálót, és 1-ről 10-re változtatja értékét 1-es lépésekben. Vegye figyelembe, hogy ha a növekmény nincs kifejezetten megadva, akkor alapértelmezés szerint 1-gyel egyenlő.
A következő példában vegyük figyelembe a vektorelemek jobbra tolására szolgáló algoritmus megvalósítását, azaz. az utolsó előtti elem kerül az utolsó helyére, a következő kerül az utolsó előtti helyére, és így tovább. az első elemhez:
függvénysor
a = ;
disp(a);
i=hossz(a): -1:2 % hurok 10-ről 2-re a -1 lépéssel
a(i)=a(i-1); % eltolás elemei az a vektornak
vége % for ciklus vége
disp(a);
A program eredménye
3 6 5 3 6 9 5 3 1 0
3
3 6 5 3 6 9 5 3 1
A fenti példa azt mutatja, hogy egy ciklus megvalósításához egy nagyobb értékről egy kisebb számlálóra, kifejezetten meg kell adni a lépést, ebben az esetben -1. Ha ez nem történik meg, a ciklus azonnal leállítja a munkáját, és a program nem fog megfelelően működni.
Végezetül nézzük meg a for hurok operátor működését egy véletlen sorozat modellezésének példájával a változás törvényével
ahol - együttható -1 és 1 között; - normál valószínűségi változó nulla matematikai elvárással és szórással
,
hol van a szimulált varianciája véletlenszerű folyamat. Ebben az esetben az első mintát normál valószínűségi változóként modellezzük, nulla matematikai várakozással és szórással. A szimulációs program a következő formájú:
függvény modellezés_x
r = 0,95; % modell együttható
N = 100; % szimulált pontok száma
ex = 100; % folyamat szórása
et = ex*(1-r^2); % véletlenszerű additív variancia
x = nullák(N,1); % inicializálja az x vektort
x(1) = sqrt(ex)*randn; %-os szimuláció az 1. számról
ha i=2:N % hurok 2-től N-ig
x(i)=r*x(i-1)+sqrt(et)*randn; % Szimulációs JV
vége % ciklus vége
plot(x); SP %-os megjelenítése grafikonként
A program végrehajtásakor megjelenik a szimulált véletlenszerű sorozat megvalósítása.
Rizs. 2.1. Egy véletlen sorozat modellezésének eredménye.
A program munkája a változók , (a programban ex változó) meghatározásával és a megadott modell megvalósításával kezdődik. Ezután kiszámítjuk a szórást és a véletlenszerű folyamat első számát a randn függvény segítségével modellezzük. A randn függvény normál valószínűségi változókat generál nulla átlaggal és egységnyi szórással. Varianciájú valószínűségi változó generálásához elegendő egy egységnyi szórással rendelkező valószínűségi változót megszorozni -val, mert variancia az átlagos négyzet valószínűségi változó a matematikai elvárásról. Ennek eredményeként van egy programsorunk
x(1) = sqrt(ex)*randn;
Ezután a for hurkot egy 2-től N-ig tartó i számlálóval valósítjuk meg 1-es lépéssel. A hurkon belül a véletlenszerű folyamat fennmaradó N-1 mintáját szimuláljuk a fenti képlet szerint. A program utolsó sora tartalmazza a plot() függvényt, amely a szimulált sorozatot grafikonként jeleníti meg a képernyőn. A grafikonok képernyőn való megjelenítésével kapcsolatos részletesebb munkáról a következő fejezetben lesz szó.
Hurokutasítások A MATLAB-ban az ismétlődő műveletek a for és a while ciklusutasításokkal hajthatók végre. A for legegyszerűbb használata a következő: 2
For count = start: lépés: végső MATLAB parancsok End Ahol a count egy ciklusváltozó; n start, final - kezdeti és végső valós érték; n lépés - lépés a valós számok halmazától (alapértelmezett 1, ez elhagyható). A ciklus úgy ér véget, ahogy véglegesebbé válik. csak 3-at számolj
1. példa Számítsa ki az összeget x= -1, 0, 1-nél. Megoldás Hozzon létre egy programfájlt az M-file szerkesztőben! Mentjük a Summa fájlba. m S = 0; ha k = 1: 10 S = S + x. ^ k / faktoriális(k); End S A parancssorban x = -1:1:1; S összeg = -0. 6 0 1. 7 Vegyük észre, hogy a k, s változók globálisak. 4
Ebben a példában kényelmesebb a fájl funkció használata. Az M-file szerkesztőben A parancssorban hozzon létre egy függvényfájlt függvény S = funsum(x, N) > f = funsum (-1: 1, 10) S = 0; > f = m = 1 esetén: N -0. 6 0 1. 7 S = S + x. ^ m / faktoriális(m); vége Itt az s, m változók lokálisak. 5
2. példa Hozzon létre egy n rendű Hilbert-mátrixot. n = 4; a = nullák(n, n); i = 1 esetén: n j = 1 esetén: na (i, j) = 1 / (i+j-1); vége egy 6
Megjegyzés A mátrixok és vektorok kitöltése előtt először létre kell hozni azokat, és nullákkal kell kitölteni a nullák paranccsal, hogy növeljük az algoritmus sebességét (azaz a = nullák (n, n) gyorsabb, mint a(i, j) = 0, i, j = 1, ... , n). 7
A for ciklus ismétlődő műveletek végrehajtásakor hasznos, ha a számuk előre ismert. Ha a számuk nem ismert előre, használhatja a while ciklust: While ciklus feltétel Parancsok MATLAB End 8
3. példa Adott x sorozat összegének megkeresése Nem lehetséges a végtelenig összegezni, de addig halmozhatja az összeget, amíg a tagok túl kicsik, például 9-ig
Megjegyzés A tag kicsinysége relatív fogalom, lehet, hogy a tag mondjuk 10 -10 nagyságrendű, de maga az összeg is ugyanilyen nagyságrendű. Ebben az esetben az összegzést nem lehet leállítani. Erre egyelőre nem figyelünk, és visszatérünk a megoldáshoz. 10
Src="https://present5.com/presentation/c993b082b44b0b84b1886b8dd4d3c841/image-11.jpg" alt="M-file függvény A parancssori függvényben 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!}
A következő relációs műveleteket használjuk a hurokvégrehajtási feltétel beállítására. Arány érték i = = egyenlő > nagyobb mint > = nagyobb vagy egyenlő ~ = nem egyenlő
és logikai operátorok: Operátorfeltétel jelölése MATLAB-ban Egyenértékű jelölés Logikai "és" x
Térjünk vissza példánkhoz, és vegyük észre, hogy ha a sorozat eltér, akkor az aktuális tag kicsinységének feltétele soha nem teljesül, és a program ciklusba léphet. Ezért a kifejezések számát 100. 000-re korlátozzuk. A feltétel így fog kinézni vagy (abs (x. ^ (2*k + 1)/factorial(2*k + 1)) > 1. 0 e -10, k
Kivételes helyzetek kezelése 1) break - a ciklus megszakítása és a végét követő operátor végrehajtása (például kilépés a belső hurokból); 2) Része helytelen matematikai műveletek MATLAB-ban nem fejezi be a programot (például =inf, =Na.N). A kimenet egy try konstrukció. Utasítások, amelyek végrehajtása hibaelfogáshoz vezethet. Állítások hiba esetén 15
Elágazó operátorok Feltételes operátor A MATLAB a következő ág operátorokat használja: n if egy feltételes operátor; n kapcsoló – 16. kapcsoló utasítás
Feltételes utasításstruktúra: a MATLAB parancs if (feltétele) elseif (feltétele) a MATLAB parancs …………. Ez a rész hiányozhat elseif (feltétel) MATLAB parancsok else MATLAB parancsok vége 17
Ha egy M-fájlt elágazási utasításokkal fordítunk, célszerű 1) a figyelmeztetés parancsot ('szöveg') használni - figyelmeztetés megjelenítésére a parancsablakban; 2) funkcióhiba ('szöveg') - a program végrehajtásának leállítása. 18
4. példa Adott ax 2 + bx +c = 0 másodfokú egyenlet, a ≠ 0. Írjunk fel egy M-függvényt, amely kiszámítja a másodfokú egyenlet gyökereit. Ellenőrizzük a bemeneti és kimeneti paraméterek számát, valamint azt, hogy a bemeneti paraméterek számok, nem pedig vektorok és mátrixok. Sőt, figyelembe vesszük az összetett gyök esetét is. A program így néz ki: 19
függvény = gyök 2 (a, b, c) if (nargin
Megjegyzés Saját íráshoz számítástechnikai programok nagy haszon tud hozni független tanulmány szabványos függvényfájlokat az Eszköztár alkönyvtáraiban. A legtöbbjüknek van nyílt forráskód, amely lehetővé teszi a MATLAB programozási elvek megértését. Egyéb funkciók (például cos. m) be vannak építve. Megjegyzéseket tartalmaznak a függvények használatával kapcsolatban. Vegyünk egy másik példát. 21
függvény y = kusfun (x) Ha nargin ~= 1 hiba ('Egy bemeneti argumentumnak kell lennie') end = size(x); y = nullák(méret(x)); % inicializálja a bemeneti argumentumot i = 1 esetén: Nx j = 1 esetén: Mx, ha x (i, j) = -pi nem szükséges! y(i,j)=x(i,j)/pi; különben y (i, j) = - cos(x (i, j)) end end 23
A switch utasítás akkor kényelmesen használható, ha bizonyos változók és az azt követő műveletek diszkrét értékei megfelelnek. 24
Az utasítás szerkezete a következő példából látható: eset váltása -1 disp ('a = -1') 0 eset disp ('a = 0') egyébként disp ('a nem egyenlő -1, 0 ') vége 25
A kapcsoló utasítás kiválóan alkalmas a vizsgált függvény különféle grafikonjainak (huzalfelület (a=1), szintvonalak (a=2) megjelenítési feladatának megoldására. 26
Logikai kifejezések tömbökkel és számokkal univerzális módon A mátrixadatok feldolgozása logikai műveletek. Mivel a MATLAB a számokat 1 1 tömbként jeleníti meg, természetes, hogy elvárjuk, hogy a tömbök szerepeljenek a logikai kifejezésekben. Most megvizsgáljuk a logikai és relációs műveletek kiterjesztését a tömbök esetére. 27
Relációs műveletek A MATLAB relációs műveleteinek eredménye lehet logikai egyes ('igaz') vagy logikai nulla ('hamis'). Ezenkívül sok programozási nyelvtől eltérően az aritmetikai változók ugyanabban a kifejezésben használhatók, mint a logikai változók. 28
Src="https://present5.com/presentation/c993b082b44b0b84b1886b8dd4d3c841/image-29.jpg" alt="6. példa > 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
Megjegyzés Csakúgy, mint az elemenkénti aritmetikai műveleteknél, megengedett a számok használata a relációs művelet egyik argumentumaként. Ebben az esetben a tömb minden elemét egy számmal hasonlítjuk össze, az eredmény az eredetivel megegyező méretű tömb. 31
Logikai műveletek A logikai műveletek tömbökre történő alkalmazása azt eredményezi, hogy azok elemenként hajtódnak végre tömbelemeken. n A és B - egyet ad, ha a megfelelő elemek nem egyenlőek nullával; n A vagy B - egyet ad, ha legalább egy elem nem egyenlő nullával; 32
nem A - egy tömbre vonatkozik, ha az elem nem egyenlő nullával, akkor nulla van beállítva, ellenkező esetben - egy; n mind (v) - nulla elemet ellenőrzi a vektorban, egyet ad vissza, ha nincs nulla elem. Ha v egy mátrix, akkor az eredmény oszlopok; n tetszőleges (v) – egyet ad vissza, ha legalább egy nem nulla elem van a bemeneti vektorban. n 33
A műveletek prioritása 1. Negáció; 2. Transzponálás, hatványozás (elemenként is), plusz és mínusz jel a szám előtt; 3. Szorzás és osztás (beleértve elemenként); 4. Összeadás és kivonás; 5. Kapcsolati műveletek; 6. Logikai 'és', logikai 'vagy'. 34
Src="https://present5.com/presentation/c993b082b44b0b84b1886b8dd4d3c841/image-36.jpg" alt=" 7. példa > a = ; > u"> Пример 7 > a = ; > u = find ((a = -1)) 3 4 5 > anew = a(u) 0 -1 0 36!}
8. példa Cserélje le egymástól függetlenül az összes elem átlagértékénél 10%-kal nagyobb, 5 x 5 véletlenszámú négyzetmátrix elemeit az átlagértékre. Megoldás > A = rand(5); > S = összeg (A összeg) / 25; > A(find (A > S* 1. 1)) = S Ebben az esetben a kereső függvény 2 sorszám- és oszlopszám-vektort ad vissza. 37
Polinomok a MATLAB-ban Polinom p(x)=anxn+an-1xn-1+. . . +a 0, an≠ 0 MATLAB-ban, a vektor-stroy p= adott, ahol ai tetszőleges komplex számok, an≠ 0. Vegye figyelembe, hogy a polinom mértékét a következőképpen számítjuk ki: n=hossz(p)-1 (ha n=0, const ). 38
A polinomokkal végzett műveletek főbb parancsai a következők: n n n r=roots(p) egy oszlopvektor, amely tartalmazza a polinom összes gyökerét; p=poly(r) – polinom felépítése az r oszlopvektorban megadott gyökökből, sőt, ha r négyzetmátrix, akkor p a karakterisztikus polinom; y=polyval(p, x) – a p polinom y értékeinek elemenkénti kiszámítása az x halmazon, ahol x lehet vektor vagy mátrix; 39
n n n polyder(p) egy sorvektor, amely p-ből származik (a p polinom differenciálása); polider(p, q) a p és q polinomok szorzatának deriváltja; = polider(p, q) a p és q polinom hányadosának deriváltja, ahol a és b a kapott tört számlálója és nevezője; 40
n n n p=polifit(x, y, n) – az y(x) függvény közelítése a p polinommal n-edik fokozat olyan módszerrel, amely minimálisra csökkenti a polinom gráf és a valódi görbe közötti távolságot, teljes hosszukra átlagolva; conv(p, q) egy sorvektor, p és q polinomok szorzata; =deconv(p, q) – p osztása q-val, w-hányados, r-maradék és p=conv (q, w) + r; 41
n =maradék(a, b) egy racionális függvény egyszerű törtekre bontása a komplex számok mezőjében a k(х) egész rész kiválasztásával, vagy ahol ri maradékok (r elem), pi pólusok (p elemek). Ez a parancs fordítva is működik =residue(r, p, k) 42
Megjegyzés 1. Ha az (a, b) maradékban lévő b(x) polinomnak és a gyökben (p) lévő p(x) polinomnak több vagy közeli gyöke van, akkor az eredmények tévesek lehetnek, mivel egy ilyen probléma rosszul kondicionált . A rossz feltételesség az eredmény rendkívül erős függése az együtthatóktól (hasonlóan a megoldás stabilitásához a differenciálegyenletekben). 43
2. Ha polinomokkal dolgozunk, előfordulnak az alak polinomjai, és a MATLAB nem ellenőrzi automatikusan a ≠ 0 értéket, és hibák lépnek fel (ezt magának kell követnie). 44
Részleg: Informatika
PROGRAMOZÁS BEMATLAB
ÜzemeltetőkMATLAB
· Loop kijelentések
Ciklusszámára
Szintaxis
count=start:step:final
MATLAB parancsok
Leírás
count - hurokváltozó,
start - a kezdeti értéke,
végleges – végső értéke,
lépés – az a lépés, amellyel a szám minden alkalommal növekszik, amikor belép a hurokba
a ciklus véget ér, amint a count értéke nagyobb lesz, mint a végleges.
Példa
Legyen szükséges x€ görbecsalád levezetése, amelyet a paramétertől függő függvény ad meg
y (x, a) \u003d e-ax sin x,
a paraméterértékeknél -0,1 és 0,1 között. Az alábbiakban egy görbecsalád kimenetére szolgáló fájlprogram listája található.
Programlista
x = ;
ha a = -0,1:0,02:0,1
y = exp(-a*x).*sin(x);
A program végrehajtása eredményeként megjelenik egy grafikus ablak, amely tartalmazza a szükséges görbecsaládot.
Ciklusmíg
Szintaxis
míg hurokfeltétel
MATLAB parancsok
Leírás
A ciklus addig fut, amíg a ciklus (igaz) feltétele igaz. A következő relációs műveletek engedélyezettek egy ciklus végrehajtásának feltételének beállítására:
A bonyolultabb feltételek logikai operátorok segítségével adhatók meg. A logikai operátorokat a következő táblázat tartalmazza
Példa
Fiókkezelők
Feltételes operátorha
Szintaxis
ha feltétel
MATLAB parancsok
Leírás
Ha a feltétel igaz, akkor az if és end közé helyezett MATLAB parancsok végrehajtásra kerülnek, ha pedig nem igaz, akkor az átmenet a vége után található parancsokra történik.
Példa
Feltételes operátorelseif
Szintaxis
ha feltétel1
elseif feltétel2
………………………
elseif feltétel
Leírás
Egyik vagy másik feltétel teljesülésétől függően a program megfelelő ága működik, ha minden feltétel nem megfelelő, akkor a többi után elhelyezett parancsok végrehajtásra kerülnek.
Példa
Operátorkapcsoló
Szintaxis
kapcsoló változó
esetérték1
esetérték2
……………………
case valuen
Minden ágat egy case utasítás definiál, az arra való áttérés akkor történik meg, amikor a switch utasítás változó az eset után megadott értéket, vagy az esetlistából valamelyik értéket veszi fel. Bármelyik elágazás végrehajtása után a kapcsoló kilép, míg a többi esetben megadott értékek már nem kerülnek ellenőrzésre. Ha nincs megfelelő érték a változóhoz, akkor a program másnak megfelelő ága fut le.
Példa
A hurok megszakad. Kivételes helyzetek.
Operátorszünet
Szintaxis
A break utasítás a ciklikus számítások rendszerezésére szolgál: for...end, while...end. Amikor az állapot
ha feltétel
a break utasítás befejezi a ciklust (for vagy while), és a végét követő sorokon található utasítások végrehajtásra kerülnek. Beágyazott hurkok esetén a break kilép a belső ciklusból.
Kivételkezelés, Kezelőpróbáld ki… fogás
Szintaxis
nyilatkozatok, amelyek végrehajtása
hibát eredményezhet
végrehajtandó nyilatkozatok
amikor hiba lép fel egy blokkban
a próbálkozás és a fogás között
Leírás
A try...catch konstrukció lehetővé teszi a kivételes helyzetek megkerülését (olyan hibák, amelyek a program leállásához vezetnek, például egy nem létező fájl elérése), és ha előfordulnak, megtesz valamit.
Példa
Szolgáltatásfunkciókat
diszp- megjeleníti a változó szövegét vagy értékét a parancsablakban
bemenet- Beviteli kérést hajt végre a billentyűzetről. Alkalmazások parancssori felülettel történő létrehozásakor használatos.
eval - végrehajtja egy karakterlánc vagy karakterlánc-változó tartalmát, például a MATLAB parancsokat
egyértelmű- eltávolítja a munkakörnyezeti változókat.
Val vellc- törli a parancsablakot
Ha többet szeretne tudni ezekről és más funkciókról, futtassa a parancssorból
Segítségfüggvény_neve
Feladatoklaboratóriumi munkához
Egy adott feladat opció számát a tanár határozza meg.
Gyakorlat№ 1
Ez a feladat magában foglalja egy n fokú algebrai interpolációs polinom megtalálását bizonyos adathalmazokhoz: Pn(x) .
A munka célja:
Programot kell írni egy algebrai interpolációs polinom együtthatóinak kiszámításához Pn(x)= a0 + a1 x+ … + anxn.
Módszertani utasítások:
xén | |||||
yén |
Esély a0 , a1 , …, an egyenletrendszer megoldásából határozzuk meg:
Itt naz interpolációs polinom sorrendje,
n+1 - adott pontpárok száma ( x, y),
a0 , a1 ,… an a polinom kívánt együtthatói Pn(x)= a0 + a1 x+ … + anxn).
Programkövetelmények
Állítsa be a vonal határait , amelyre az interpolációs polinom épül P(x)
· Kérdezzen n- az interpolációs szegmensek száma (vagy ennek megfelelően a polinom mértéke)
Jegyzet: x0, xn, n billentyűzetről lépett be.
· A kezdeti adatok beszerzése (x, y) (pontpárok száma (xén, yén) , amelyre az interpolációs polinom épül P(x) - n1=n+1) biztosítani:
b Adjon meg véletlenszerűen elhelyezett csomópontokat xén, i=0, n a billentyűzetről
b Csomók számítása xén, i=0, n, az érvelés egységes elrendezésének megfelelő x a szegmensen
b A bekezdésekben. 1,2 értékek yén, i=0, n vagy a billentyűzetről beírva (ha az eredeti függvény ismeretlen), vagy egy adott függvényből számolva f(x). A függvényt definiáló kifejezés a billentyűzetről kerül beírásra, és követnie kell a kifejezések MATLAB-ban történő írásának szabályait
b Adatbevitel ( xén, yén, i=0, n) fájlból
Egyenletrendszer megoldása a P(x) polinom együtthatóinak meghatározására
Az eredeti táblázatos függvény és a P(x) polinom grafikonjainak felépítése
· Ha a kezdeti adatokat f(x) függvényként adjuk meg, ábrázoljuk az /f(x) - P(x)/ interpolációs hibát. Számítsa ki az interpolációs hiba maximális modulo értékét egy adott intervallumon.
Gyakorlat № 2
Spline interpoláció
A munka célja:
Létre kell hozni egy programot az együtthatók kiszámítására és az S(x) spline függvény felépítésére, S(x) 3. rendű polinomokból "ragasztott" én(x), amelyek speciális jelöléssel rendelkeznek:
S függvény én(x) a szegmensen meghatározott
Programkövetelmények
A munka elvégzésekor a következőket kell tennie:
Állítsa be annak a szakasznak a határait, amelyre az S(x) spline függvény épül
· Adja meg n - az interpolációs szegmensek számát, amelyek mindegyikére a Si(x) köbös polinom épül.
· Megjegyzés: x0, xn, n a billentyűzetről írható be.
Szervezzük meg a kezdeti adatok (x, y) bevitelét (a pontpárok száma (xi, yi), amelyre az S(x), n1=n+1 spline függvény épül), feltéve:
ь Önkényesen elhelyezkedő xi, i=0, n csomópontok bevitele a billentyűzetről
b Az xi, i=0, n csomópontok számítása, amelyek megfelelnek az x argumentum egyenletes elrendezésének a szegmensen
b A bekezdésekben. 1,2 az yi, i=0, n értékeket vagy a billentyűzetről írjuk be (ha az eredeti függvény ismeretlen), vagy az adott f(x) függvényből számítjuk ki. A függvényt definiáló kifejezés a billentyűzetről kerül beírásra, és követnie kell a kifejezések MATLAB-ban történő írásának szabályait
b Adatbevitel (xi, yi, i=0, n) fájlból
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)
A természetes köbös spline együtthatóinak meghatározásához (1. peremfeltétel) a következő egyenletrendszert kell megoldani:
Együtthatók?0=0,?n=0
· Az eredeti függvény és a spline függvények ábrázolása mindhárom peremfeltételtípusra.
· Készítsen gráfokat az f(x) - S(x) spline-interpolációs hibafüggvényekről mindhárom peremfeltételtípusra.
Jegyzet:
A MATLAB csomagban az egydimenziós és kétdimenziós tömbök indexei 1-től kezdődnek, nem 0-tól. Ezt vegyük figyelembe programíráskor.
Gyakorlat№3
Függvény közelítése a legkisebb négyzetek módszerével (LSM).
Ez a feladat azt jelenti, hogy valamilyen adathalmazra egy közelítő függvényt (m-fokú polinomot) kell keresni, amelyet a legkisebb négyzetek módszerével (LSM) állítottunk össze.
A munka célja:
Programot kell írni egy polinom együtthatóinak megtalálásához? (x)= a0 + a1 * x+… an * xm a legkisebb négyzetek módszerével.
Legyen például a következő adatkészletünk:
xén | |||||||||||
yén |
A szükséges együtthatók keresése a következőképpen történik:
Ahol n - pontok összege ( x, y),
m - a kívánt polinom mértéke,
a 0 , a 1 , …, a m - kívánt együtthatók ( ? ( x )= a 0 + a 1 x + … + a m x m ).
Programkövetelmények
A munka elvégzésekor a következőket kell tennie:
Állítsa be annak a szakasznak a határait, amelyre a közelítő függvény épül?(x)=a0+a1*x+… an * xm
Állítsa be m - a polinom foka
· Megjegyzés: x1, xn, m a billentyűzetről írható be.
A kezdeti adatok (x, y) megszerzéséhez, amelyekre a közelítő függvény épül?(x)=a0+a1*x+… an* xm adja meg:
ь A véletlenszerűen elhelyezkedő xi, i=1, n csomópontok bevitele a billentyűzetről
b Az xi, i=1, n csomópontok számítása, amelyek megfelelnek az x argumentum egységes elrendezésének a szegmensen
b A bekezdésekben. 1,2 az yi, i=1, n értékeket vagy a billentyűzetről írjuk be (ha az eredeti függvény ismeretlen), vagy az adott f(x) függvényből számítjuk ki. A függvényt definiáló kifejezés a billentyűzetről kerül beírásra, és követnie kell a kifejezések MATLAB-ban történő írásának szabályait
b Adatok (xi, yi, i=1, n) bevitele fájlból
Egyenletrendszer megoldása egy polinom együtthatóinak meghatározására? (x)
Készítsen grafikonokat az eredeti táblázatos adott függvényről és polinomról? (x)
· Ha a kezdeti adatokat f(x) függvényként adjuk meg, ábrázoljuk az /f(x) - ?(x)/ interpolációs hibát. Számítsa ki az interpolációs hiba maximális modulo értékét egy adott intervallumon.
A szegmens utolsó elemének végrehajtásakor legalább 500 pontot szerezzen a számításokhoz
A laboratóriumi munka tervezésének követelményei
A jelentésnek tartalmaznia kell:
1. A probléma megfogalmazása
2. Program szövege
3. Vizsgálati eredmények
Megjegyzés A programszövegeket megjegyzésekkel kell ellátni.
Bibliográfia
1. Anufriev I.E. Matlab 5.3 / 6.x oktatóanyag - St. Petersburg: BHV-Petersburg, 2003. - 736 p.: ill.
2. V.P. Dyakonov MATLAB 6.5 SPI/7 + Simulink 5/6 matematikában és modellezésben. "Professzionális könyvtár" sorozat. - M.: SOLON-Press, 2005. - 576 p.: ill.
3. Anufriev I.E., Smirnov A.B., Smirnova E.N. MathLab 7. - St. Petersburg: BHV-Petersburg, 2005. - 1104 p.: ill.
Gyakran egy hurok szervezésekor szükség van a számláló feletti iterációra egy adott értéktartományban és egy adott változtatási lépéssel. Például egy vektor (tömb) elemein való iterációhoz 1-től N-ig számlálót kell szervezni 1-es lépéssel, ahol N a vektor elemeinek száma. A sorozat összegének kiszámításához egy a-tól b-ig tartó számlálót is megadunk a szükséges lépésváltási lépéssel. Stb. Tekintettel arra, hogy a programozási gyakorlatban gyakran találkozunk ilyen feladatokkal, megvalósításukhoz külön for loop operátort javasoltak, ami megkönnyíti és látványosabbá teszi a számlálós ciklus megvalósítását.
A for ciklus utasítás szintaxisa a következő:
számára<счетчик> =
<начальное значение>:<шаг>:<конечное значение>
<операторы цикла>
vége
Tekintsük ennek a ciklusnak a munkáját a vektorban lévő elem maximális értékének megtalálására szolgáló algoritmus megvalósításának példáján:
függvény keresési_max
a = ;
m = a(1); % aktuális maximális érték
ha i=1:hossz(a) % hurok 1-től a c vektor végéig
% 1. lépés (alapértelmezett)
ha m< a(i) %
если a(i) >m,
m = a(i); %, akkor m = a(i)
vége
vége % for ciklus vége
disp(m);
Ebben a példában a for hurok beállítja az i számlálót, és 1-ről 10-re változtatja értékét 1-es lépésekben. Vegye figyelembe, hogy ha a növekmény nincs kifejezetten megadva, akkor az alapértelmezett érték 1.
A következő példában vegyük figyelembe a vektorelemek jobbra tolására szolgáló algoritmus megvalósítását, azaz. az utolsó előtti elem kerül az utolsó helyére, a következő kerül az utolsó előtti helyére, és így tovább. az első elemhez:
függvénysor
a = ;
disp(a);
i=hossz(a): -1:2 % hurok 10-ről 2-re a -1 lépéssel
a(i)=a(i-1); % eltolás elemei az a vektornak
vége % for ciklus vége
disp(a);
A program eredménye
3 6 5 3 6 9 5 3 1 0
3
3 6 5 3 6 9 5 3 1
A fenti példa azt mutatja, hogy egy ciklus megvalósításához egy nagyobb értékről egy kisebb számlálóra, kifejezetten meg kell adni a lépést, ebben az esetben -1. Ha ez nem történik meg, a ciklus azonnal leállítja a munkáját, és a program nem fog megfelelően működni.
Végezetül nézzük meg a for hurok operátor működését egy véletlen sorozat modellezésének példájával a változás törvényével
ahol - együttható -1 és 1 között; - normál valószínűségi változó nulla matematikai elvárással és szórással
,
ahol a szimulált véletlenszerű folyamat varianciája. Ebben az esetben az első mintát normál valószínűségi változóként modellezzük, nulla matematikai várakozással és szórással. A szimulációs program a következő formájú:
függvény modellezés_x
r = 0,95; % modell együttható
N = 100; % szimulált pontok száma
ex = 100; % folyamat szórása
et = ex*(1-r^2); % véletlenszerű additív variancia
x = nullák(N,1); % inicializálja az x vektort
x(1) = sqrt(ex)*randn; %-os szimuláció az 1. számról
ha i=2:N % hurok 2-től N-ig
x(i)=r*x(i-1)+sqrt(et)*randn; % Szimulációs JV
vége % ciklus vége
plot(x); SP %-os megjelenítése grafikonként
A program végrehajtásakor megjelenik a szimulált véletlenszerű sorozat megvalósítása.
Rizs. 2.1. Egy véletlen sorozat modellezésének eredménye.
A program munkája a változók , (a programban ex változó) meghatározásával és a megadott modell megvalósításával kezdődik. Ezután kiszámítjuk a szórást és a véletlenszerű folyamat első számát a randn függvény segítségével modellezzük. A randn függvény normál valószínűségi változókat generál nulla átlaggal és egységnyi szórással. Varianciájú valószínűségi változó generálásához elegendő egy egységnyi szórással rendelkező valószínűségi változót megszorozni -val, mert a variancia egy valószínűségi változó átlagos négyzete a matematikai elvárásokhoz képest. Ennek eredményeként van egy programsorunk
x(1) = sqrt(ex)*randn;
Ezután a for hurkot egy 2-től N-ig tartó i számlálóval valósítjuk meg 1-es lépéssel. A hurkon belül a véletlenszerű folyamat fennmaradó N-1 mintáját szimuláljuk a fenti képlet szerint. A program utolsó sora tartalmazza a plot() függvényt, amely a szimulált sorozatot grafikonként jeleníti meg a képernyőn. A grafikonok képernyőn való megjelenítésével kapcsolatos részletesebb munkáról a következő fejezetben lesz szó.