Cum se configurează smartphone-uri și PC-uri. Portal informativ

Ghid pentru începători MatLab. Abreviere Matlab

Aflați dezavantajele lucrului în MATLAB.

  • Operator punct și virgulă: Dacă comanda se termină cu „;”, atunci rezultatul acestei operații nu va fi afișat pe ecran. Acest lucru este evident atunci când există o definiție mică, de exemplu, y = 1. Problema apare atunci când este necesar să se creeze o matrice de dimensiune mare. Semnul „;” nu este necesar atunci când ieșirea este necesară pentru utilizator, de exemplu, când lucrează cu grafică.
  • „Comanda de curățare”: există mai multe comenzi utile, care poate fi apelat din fereastra de comandă. Tastați „clear” după semnul „>>”. Acest lucru va șterge toate variabilele curente, ceea ce poate ajuta dacă se găsește un rezultat ciudat. De asemenea, puteți scrie „clear” urmat de numele variabilei pentru a șterge valoarea unei anumite variabile.
  • „Tipuri de variabile”: Singurul tip de variabile din MATLAB este o matrice. Aceasta înseamnă că variabilele sunt aranjate ca o listă de valori. Cel mai lista simpla valorile sunt un număr. În cazul MATLAB, nu trebuie să specificați dimensiunea matricei atunci când creați o variabilă. Pentru a atribui valoare variabilă un număr, tastați, de exemplu, z =1. Dacă doriți să adăugați o valoare pentru z, introduceți pur și simplu z = 3. Vă puteți referi la orice valoare din matrice scriind z[i], unde i este numărul poziției din matrice. Deci, dacă trebuie să obțineți valoarea 3 de la z, atunci trebuie doar să tastați z.
  • Bucle: Buclele sunt folosite atunci când o acțiune trebuie efectuată de mai multe ori. Există 2 tipuri de bucle în MATLAB: bucla for și bucla while. Ambele constructe sunt interschimbabile, cu toate acestea, este mai ușor să creați o buclă infinită cu constructul „while” decât cu constructul „for”. Semn buclă nesfârșită este că numai datele care sunt în interiorul buclei sunt ieșite.
  • „For Loops”: buclele for din MATLAB arată astfel: „for i = 1:n / do actions / end” (bara oblică inversă înseamnă săriți la linie nouă). Această buclă înseamnă „efectuați o acțiune” de n ori. Deci, dacă bucla spune „printează „Bună”” și numărul de interpretări este 5, atunci „Bună” va fi tipărit de 5 ori.
  • „While loops”: în MATLAB arată astfel: „while expression is true / do actions / end”. Aceasta înseamnă că acțiunea este efectuată atâta timp cât expresia este adevărată. De obicei, în corpul buclei există o instrucțiune care modifică valoarea expresie logică la „fals”. A face buclă while din pentru buclă trebuie să scrii „în timp ce eu<=n / do действия / end".
  • „Bucle imbricate”: o buclă este imbricată dacă se află în interiorul unei alte bucle. Arata cam asa: "for i = 1:5 / for j = 1:5 / do actions / end / end". Acțiunea asupra contorului j va fi efectuată de cinci ori, apoi valoarea lui i va crește cu una, acțiunea asupra contorului j se va executa din nou de 5 ori etc.
  • Pentru mai multe informații despre orice parte a acestui articol sau MATLAB în general, vizitați

Declarație condițională if

În cel mai simplu caz, sintaxa acestei instrucțiuni if ​​este:

dacă<выражение>
<операторы>
Sfârşit

Aș dori să vă atrag atenția asupra faptului că, spre deosebire de limbajele de programare moderne, un astfel de concept de operator compus nu este utilizat. Blocul de instrucțiuni condiționate trebuie să se încheie cu cuvântul de serviciu final.

Mai jos este un exemplu de implementare a funcției sign(), care returnează +1 dacă numărul este mai mare decât zero, -1 dacă numărul este mai mic decât zero și 0 dacă numărul este zero:

x = 5;
dacă x > 0
disp(1);
Sfârşit
dacă x< 0
disp(-1);
Sfârşit
dacă x == 0
disp(0);
Sfârşit

Analiza exemplului de mai sus arată că toate aceste trei condiții se exclud reciproc, i.e. Când unul dintre ele este declanșat, nu este nevoie să le verificați pe celelalte. Implementarea unei astfel de logici va crește viteza de execuție a programului. Acest lucru poate fi realizat prin utilizarea designului

dacă<выражение>
<операторы1>% sunt executate dacă condiția este adevărată
altfel
<операторы2>% sunt executate dacă condiția este falsă
Sfârşit

Atunci exemplul de mai sus poate fi scris după cum urmează:

X = 5;
dacă x > 0
disp(1);
altfel
dacă x< 0
disp(-1);
altfel
disp(0);
Sfârşit
Sfârşit

Acest program verifică mai întâi dacă x este pozitiv și, dacă da, tipărește valoarea 1 și ignoră toate celelalte condiții. Dacă prima condiție se dovedește a fi falsă, atunci execuția programului trece prin else (altfel) la a doua condiție, în care variabila x este verificată pentru negativitate, iar dacă condiția este adevărată, valoarea -1 este afișată pe ecran. . Dacă ambele condiții sunt false, atunci este afișată valoarea 0.

Exemplul de mai sus poate fi scris într-o formă mai simplă folosind un alt construct de instrucțiune MatLab if:

dacă<выражение1>
<операторы1>% sunt executate dacă expresia1 este adevărată
elseif<выражение2>
<операторы2>% sunt executate dacă expresia2 este adevărată
...
elseif<выражениеN>
<операторыN>% sunt executate dacă expresiaN este adevărată
Sfârşit

si se scrie dupa cum urmeaza:

x = 5;
dacă x > 0
disp(1); % este executat dacă x > 0
elseif x< 0
disp(-1); % este executat dacă x< 0
altfel
disp(0); % este executat dacă x = 0
Sfârşit

Folosind instrucțiunea if, puteți testa condiții mai complexe (compuse). De exemplu, trebuie să determinați: variabila x se încadrează în intervalul de valori de la 0 la 2? Acest lucru poate fi implementat prin verificarea simultană a două condiții simultan: x >= 0 și x<=2. Если эти оба условия истинны, то x попадает в диапазон от 0 до 2.

Pentru a implementa condiții compuse în MatLab, se folosesc operatori logici:

& - ȘI logic
| - SAU logic
~ - NU logic

Să ne uităm la un exemplu de utilizare a condițiilor compuse. Să presupunem că doriți să verificați dacă o variabilă x este în intervalul de la 0 la 2. Programul va fi scris după cum urmează:

x = 1;
dacă x >= 0 și x<= 2
altfel
Sfârşit

În al doilea exemplu, vom verifica pentru a vedea dacă variabila x nu aparține intervalului de la 0 la 2. Acest lucru se realizează prin declanșarea uneia dintre cele două condiții: x< 0 или x > 2:

x = 1;
dacă x< 0 | x > 2
disp("x nu aparține intervalului de la 0 la 2");
altfel
disp("x aparține intervalului de la 0 la 2");
Sfârşit

Folosind operatorii logici AND, OR, NOT, puteți crea o varietate de condiții compuse. De exemplu, puteți verifica dacă x este în intervalul -5 la 5, dar nu în intervalul 0 la 1. Evident, acest lucru poate fi implementat astfel:

x = 1;
dacă (x >= -5 și x<= 5) & (x < 0 | x > 1)
disp("x aparține lui [-5, 5], dar nu este în ");
altfel
disp("x sau nu în [-5, 5] sau în ");
Sfârşit

Rețineți că parantezele au fost folosite în condiția compusă complexă. Faptul este că prioritatea operației AND este mai mare decât prioritatea operației SAU, iar dacă nu ar exista paranteze, condiția ar arăta astfel: (x >= -5 și x<= 5 и x < 0) или x >1. Evident, o astfel de verificare ar da un rezultat diferit de cel scontat.

În programare, parantezele sunt folosite pentru a modifica prioritățile de execuție ale instrucțiunilor. La fel ca operatorii aritmetici, operatorii logici pot fi modificați la discreția programatorului. Folosind paranteze, testul se face mai întâi în interiorul lor, apoi în afara lor. De aceea, în exemplul de mai sus sunt necesare pentru a obține rezultatul dorit.

Prioritatea operațiilor logice este următoarea:

NOT (~) – cea mai mare prioritate;
Și (&) – prioritate medie;
SAU (|) – cea mai mică prioritate.

Operatorul de buclă While

Limbajul de programare MatLab are două instrucțiuni bucle: while și for. Cu ajutorul lor, de exemplu, se realizează programarea algoritmilor recurenți, calcularea sumei unei serii, enumerarea elementelor matricei și multe altele.

În cel mai simplu caz, o buclă într-un program este organizată folosind instrucțiunea while, care are următoarea sintaxă:

in timp ce<условие>
<операторы>
Sfârşit

Aici<условие>înseamnă o expresie condiționată precum cea utilizată într-o instrucțiune if, iar bucla while rulează atâta timp cât condiția este adevărată.

Vă rugăm să rețineți că dacă condiția este falsă înainte de începerea buclei, instrucțiunile incluse în buclă nu vor fi executate nici măcar o dată.

Iată un exemplu despre cum funcționează bucla while pentru a calcula suma unei serii:


i=1; Număr de sume %
in timp ce eu<= 20 % цикл (работает пока i <= 20)

sfârşitul % sfârşitul buclei
disp(S); % afișând suma 210 pe ecran

Acum să complicăm problema și să calculăm suma seriei, deocamdată. Aici, în operatorul buclă, se obțin două condiții: fie contorul pentru i ajunge la 20, fie valoarea sumei S depășește 20. Această logică poate fi implementată folosind o expresie condiționată compusă în operatorul while loop:

S = 0; % valoarea inițială a sumei
i=1; Număr de sume %
in timp ce eu<= 20 & S <= 20 % цикл (работает пока i<=10 и S<=20
S=S+i; % se calculează suma
i=i+1; % mărește contorul cu 1
sfârşitul % sfârşitul buclei

Exemplul de mai sus arată posibilitatea utilizării condițiilor compuse într-o buclă while. În general, aceleași condiții pot fi scrise ca expresie condiționată ca și în instrucțiunea condițională if.

Lucrarea oricărui operator de buclă, inclusiv while, poate fi oprită forțat folosind operatorul break. De exemplu, programul anterior ar putea fi rescris după cum urmează folosind o instrucțiune break:

S = 0; % valoarea inițială a sumei
i=1; Număr de sume %
in timp ce eu<= 20 % цикл (работает пока i<=10
S=S+i; % se calculează suma
i=i+1; % mărește contorul cu 1
dacă S > 20% dacă S > 20,
pauză; % atunci ciclul se termină
Sfârşit
sfârşitul % sfârşitul buclei
disp(S); % afișare cantitate 21 pe ecran

În acest exemplu, a doua condiție pentru încheierea buclei, când S este mai mare de 20, este scrisă în bucla însăși și folosind operatorul break, bucla este ieșită la funcția disp(), aflată imediat după bucla while.

Al doilea operator de control al execuției buclei, continuare, vă permite să săriți peste execuția fragmentului de program care urmează. De exemplu, doriți să calculați suma elementelor unui tablou

a = ;

excluzând elementul de la indicele 5. Un astfel de program poate fi scris astfel:

S = 0; % valoarea inițială a sumei
a = ; matrice %
i=0; % contor index matrice
in timp ce eu< length(a) % цикл (работает пока i меньше
% lungime matrice a)
i=i+1; % mărește contorul indexului cu 1
dacă i == 5% dacă indicele este 5
continua; % atunci nu o numărăm
Sfârşit
S=S+a(i); % se calculează suma elementelor
sfârşitul % sfârşitul buclei
disp(S); % afișând suma 40 pe ecran

Trebuie remarcat faptul că în acest program, indicele matricei i este crescut înainte ca condiția să fie verificată. Acest lucru se face astfel încât valoarea indicelui să crească cu 1 la fiecare iterație a buclei. Dacă creșterea contorului i se scrie ca în exemplele anterioare, i.e. după calcularea sumei, atunci datorită operatorului continue valoarea sa s-ar opri la 5 și bucla while ar rula „pentru totdeauna”.

Operatorul de buclă for

Adesea, atunci când organizați o buclă, trebuie să treceți printr-o valoare a contorului într-un interval dat de valori și cu un anumit pas de modificare. De exemplu, pentru a itera elementele unui vector (matrice), trebuie să organizați un numărător de la 1 la N cu un pas de 1, unde N este numărul de elemente ale vectorului. Pentru a calcula suma seriei, se specifică și un numărător de la a la b cu pasul de modificare necesar. Și așa mai departe. Datorită faptului că astfel de sarcini sunt adesea întâlnite în practica de programare, pentru implementarea lor a fost propus un operator de buclă for, ceea ce face mai ușoară și mai vizuală implementarea unei bucle cu un contor.

Sintaxa operatorului de buclă for este următoarea:

pentru<счетчик> = <начальное значение>:<шаг>:<конечное значение>
<операторы цикла>
Sfârşit

Să luăm în considerare funcționarea acestui ciclu folosind exemplul de implementare a unui algoritm pentru căutarea valorii maxime a unui element dintr-un vector:

a = ;
m = a(1); % valoarea maximă curentă
pentru i=1:lungime(a) % buclă de la 1 la sfârșitul vectorului c
% în pași de 1 (implicit)
dacă m< a(i) % если a(i) >m,
m = a(i); % atunci m = a(i)
Sfârşit
sfârşitul % sfârşitul buclei for
disp(m);

În acest exemplu, bucla for setează contorul i și își schimbă valoarea de la 1 la 10 în pași de 1. Rețineți că dacă dimensiunea pasului nu este specificată în mod explicit, atunci este setată implicit la 1.

În exemplul următor, vom lua în considerare implementarea algoritmului de deplasare a elementelor vectoriale la dreapta, i.e. penultimul element se pune în locul ultimului, următorul în locul penultimului etc. la primul element:

a = ;
disp(a);
pentru i=lungimea(a):-1:2 % ciclu de la 10 la 2 cu pasul -1
a(i)=a(i-1); Deplasarea % a elementelor vectorului a
sfârşitul % sfârşitul buclei for
disp(a);

Rezultatul programului

3 6 5 3 6 9 5 3 1 0
3 3 6 5 3 6 9 5 3 1

Exemplul de mai sus arată că pentru a implementa o buclă cu un numărător de la o valoare mai mare la una mai mică, trebuie să specificați în mod explicit pasul, în acest caz, -1. Dacă acest lucru nu se face, bucla se va încheia imediat și programul nu va funcționa corect.

Soluții ale ecuației


©2015-2019 site
Toate drepturile aparțin autorilor lor. Acest site nu pretinde autor, dar oferă o utilizare gratuită.
Data creării paginii: 2017-12-12

3.4. Operatorii sistemului MATLAB 5 Combinarea operatorilor în expresii aritmetice. Funcții încorporate

Operatorii de sistem MATLAB sunt împărțiți în trei categorii:

  • Operatorii aritmetici vă permit să construiți expresii aritmetice și să efectuați calcule numerice.
  • Operatorii relaționali vă permit să comparați operanzi numerici.
  • Operatorii logici vă permit să construiți expresii logice.

Operatorii logici au cea mai mică prioritate față de operatorii relaționali și aritmetici.

Operatori aritmetici. Când lucrați cu o serie de numere, sunt setate următoarele niveluri de prioritate între operațiile aritmetice:

nivelul 1: transpunere elementwise (."), exponentiare elementwise (.^), transpunere matriceală conjugata hermitian ("), exponentiation matrix (^);
nivelul 2: adunare unară (+), scădere unară (-);
nivelul 3: înmulțire matrice (.*), împărțire dreapta (./), împărțire matrice stânga (.\), înmulțire matrice (*), rezolvarea sistemelor de ecuații liniare - operație (/), operație (\);
nivelul 4: adunare (+), scădere (-);
nivelul 5: operator de formare a matricei (:).

În cadrul fiecărui nivel, operatorii au prioritate egală și sunt evaluați în ordine de la stânga la dreapta. Ordinea implicită poate fi modificată folosind paranteze.

Exemplu

Să fie dați 2 vectori

A = ;
B = ;

Rezultatele execuției operatorului

C = A./B. ^2
C = 0,7500 9,0000 0,2000
C = (A./B). ^2
C = 2,2500 81,0000 1,0000
complet diferit.

Operatorii aritmetici permit utilizarea expresiilor de index:

b = sqrt (A(2)) + 2*B (1)
b = 7

Operatorii aritmetici ai sistemului MATLAB lucrează de obicei cu matrice de aceeași dimensiune. Pentru vectori și tablouri dreptunghiulare, ambii operanzi trebuie să aibă aceeași dimensiune, cu excepția cazului în care unul dintre ei este scalar. Dacă unul dintre operanzi este un scalar, iar celălalt nu, MATLAB presupune că scalarul este extins la dimensiunea celui de-al doilea operand și operația specificată este aplicată fiecărui element. Această operație se numește expansiune scalară.

Operatori relaționali. Următorii 6 operatori relaționali sunt definiți în MATLAB:

  • < Меньше
  • <= Меньше или равно
  • > Mai multe
  • > = Mai mare sau egal cu
  • == La fel de identic
  • ~ = Nu este egal

Operatorii relaționali realizează o comparație element cu element a două tablouri de dimensiuni egale. Pentru vectori și tablouri dreptunghiulare, ambii operanzi trebuie să aibă aceeași dimensiune, cu excepția cazului în care unul dintre ei este scalar. În acest caz, MATLAB compară scalarul cu fiecare element al celuilalt operand. Pozițiile în care această relație este adevărată primesc valoarea 1, unde este falsă - 0.

Operatorii relaționali sunt utilizați de obicei pentru a schimba secvența de execuție a instrucțiunilor de program. Prin urmare, ele sunt folosite cel mai adesea în corpul instrucțiunilor if, for, while, switch.

Operatorii relaționali sunt întotdeauna executați element cu element.

Exemplu.

Să comparăm două matrice folosind condiția A

A = ;
B = ;
A< B

ans =

1 0 0
0 1 1
1 0 1

Matricea rezultată indică pozițiile în care elementul A este mai mic decât elementul corespunzător B.

La evaluarea expresiilor aritmetice, operatorii relaționali au o prioritate mai mică decât operatorii aritmetici, dar o prioritate mai mare decât operatorii logici.

Operatorii relaționali pot fi aplicați tablourilor multidimensionale pentru care una dintre dimensiuni este zero, cu condiția ca ambele tablouri să aibă aceeași dimensiune sau unul dintre ele să fie scalar. Cu toate acestea, expresii precum A == sunt aplicabile numai matricelor cu dimensiunea 0x0 sau 1x1, iar în alte cazuri provoacă o eroare.

Prin urmare, cel mai obișnuit mod de a verifica dacă o matrice este goală este să utilizați funcția isempty(A).

Operatori logici. Operatorii logici ai sistemului MATLAB includ următorii operatori:

& ȘI
| SAU
~ NU

Pe lângă acești operatori, directorul bitfun conține o serie de funcții care efectuează operații logice pe biți.

Operatorii logici implementează compararea element cu element a tablourilor de aceleași dimensiuni. Pentru vectori și tablouri dreptunghiulare, ambii operanzi trebuie să aibă aceeași dimensiune, cu excepția cazului în care unul este scalar. În acest din urmă caz, MATLAB compară scalarul cu fiecare element al celuilalt operand. Pozițiile în care această relație este adevărată primesc valoarea 1, unde este falsă - 0.

Fiecare operator logic corespunde unui anumit set de condiții care determină rezultatul expresiei logice:

  • O expresie booleană cu operatorul AND (&) este adevărată dacă ambii operanzi sunt adevărati. Dacă elementele unei expresii logice sunt numere, atunci expresia este adevărată dacă ambii operanzi sunt diferiti de zero.

Exemplu
Să fie dați doi vectori numerici:
u = ;
v =
;
și o expresie logică cu operatorul AND (&):
U&v
ans =

1 0 1 0 0 1
  • O expresie booleană cu operatorul SAU (|) este adevărată dacă unul sau ambii operanzi ai săi sunt adevărati logici. O expresie este falsă numai dacă ambii operanzi sunt falși din punct de vedere logic.
    Dacă elementele unei expresii logice sunt numere, atunci expresia este falsă dacă ambii operanzi sunt zero.

Exemplu
Folosim vectorii u și v definiți mai sus și efectuăm o expresie booleană cu operatorul SAU (|):
U | v
ans =

1 1 1 1 0 1
  • O expresie booleană cu operatorul NOT (~) construiește o negație. Rezultatul este fals din punct de vedere logic dacă operandul este adevărat și adevărat dacă operandul este fals. Dacă elementele unei expresii logice sunt numere, atunci orice operand altul decât zero devine zero și orice operand zero devine unul.

Exemplu
Să folosim vectorul u definit mai sus și să construim o expresie logică cu operatorul NOT (~):
~u
ans =

0 1 0 0 1 0

Funcții logice. Pe lângă operatorii logici, MATLAB include o serie de funcții logice:

  • Funcția xor(a, b) implementează operația SAU EXCLUSIV. O expresie care conține un SAU EXCLUSIV este adevărată dacă unul dintre operanzii săi este TRUE și celălalt este FALS. Pentru expresiile numerice, funcția returnează 1 dacă unul dintre operanzi este diferit de zero, iar celălalt este zero.

Exemplu
Luați în considerare doi operanzi numerici a și b:
a = 1;
b = 1;
Apoi operația xor dă rezultatul:
Xor (a, b)
răspuns = 0

  • Funcția all returnează 1 dacă toate elementele vectorului sunt adevărate sau diferite de zero.

Exemplu
Să fie dat un vector u și doriți să-l verificați pentru condiția „toate elementele sunt mai mici de 3?” Dacă această condiție este îndeplinită, este afișat mesajul „Toate elementele sunt mai mici de 3”.

u = ;
dacă toate (u< 3)
Disp ("Toate elementele sunt mai mici de 3")
Sfârşit

În acest caz, nu va apărea niciun mesaj, dar dacă luăm ca vector vectorul u

u =

apoi va apărea un mesaj

ans = „Toate elementele sunt mai mici de 3”

În cazul matricelor, funcția all verifică coloanele, adică este orientată pe coloane.

Exemplu

A=
toate)

  • Funcția any returnează 1 dacă cel puțin unul dintre elementele argumentului este diferit de zero; în caz contrar, este returnat 0. În cazul procesării matricei, funcția any este orientată pe coloană.
  • Funcțiile isnan și isinf returnează 1 pentru NaN și, respectiv, Inf. Funcția isfinite este adevărată numai pentru mărimile care nu au valoarea inf sau NaN.

Exemplu
Luați în considerare restrângerea a două matrice numerice A și B
A = ;
B=
;
Să creăm o matrice C și să aplicăm funcțiile enumerate mai sus
C = A./B
C=

NaN Inf 0.3333
1.0000 NaN NaN
este finit (C) isnan (C) isinf(C)
ans =
0 0 1
1 0 0
ans =
1 0 0
0 1 1
ans =
0 1 0
0 0 0

O listă completă a funcțiilor logice MATLAB este conținută în directorul ops.

funcția de găsire. Funcția find determină indicii elementelor matricei care satisfac o anumită condiție logică. De obicei, este folosit pentru a crea șabloane de comparație și pentru a crea matrice de index. În forma sa cea mai comună, funcția k = find(x<условие>) returnează un vector de indici ai acelor elemente care satisfac o condiție dată.

A = magie (4)
A=

16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1

k = găsi (A > 8);
A(k) = 100

A=

100 2 3 100
5 100 100 8
100 7 6 100
4 100 100 1

O funcție de forma = find(x) vă permite să obțineți indicii elementelor diferite de zero ale unui tablou dreptunghiular. O funcție de forma = find(x) returnează și valorile lor sub forma unui vector s.

Combinarea operatorilor în expresii aritmetice.

Acum aveți capacitatea de a construi expresii care utilizează orice combinație de operatori aritmetici, logici și relaționali.

Exemplu
Să ne uităm la un exemplu de operator de comparație care compară rezultatele a două expresii

(a*b)< (c*d)

Folosind paranteze, puteți controla succesiunea operațiilor

(A și B) == (C | D)

Controlul secvenței de execuție a operatorului. Există patru operatori de bază de secvențiere a instrucțiunilor:

  • Instrucțiunea condiționată if, în combinație cu instrucțiunile else și elseif, execută un grup de instrucțiuni conform unor condiții logice;
  • Operatorul comutator, în combinație cu instrucțiunile case și otherwise, execută diverse grupuri de instrucțiuni în funcție de valoarea unei condiții logice;
  • Instrucțiunea condiționată while execută un grup de instrucțiuni de un număr nedefinit de ori, sub rezerva unei condiții de terminare logică;
  • Instrucțiunea for loop execută un grup de instrucțiuni de un număr fix de ori. Toate instrucțiunile de control includ o instrucțiune de final pentru a indica sfârșitul blocului în care funcționează instrucțiunea de control.

Sintaxă:

Descriere:

Instrucțiunea condiționată if .... end evaluează o expresie logică și execută grupul corespunzător de instrucțiuni în funcție de valoarea acestei expresii. Dacă expresia booleană este adevărată, atunci MATLAB va executa toate instrucțiunile între if și end și apoi va continua execuția programului pe linia după final. Dacă condiția este falsă, atunci MATLAB omite toate instrucțiunile între if și end și continuă execuția pe linie după end.

Exemplu.

dacă rem(a, 2) == 0
disp("a este par")
b = a/2;
Sfârşit

Dacă o condiție booleană implică o variabilă care nu este scalară, atunci declarația va fi adevărată dacă toate elementele sunt diferite de zero.

Exemplu.
Fie dată matricea X; Să scriem următorul operator de condiție:

daca X
instrucțiuni
Sfârşit

Această afirmație este echivalentă cu următoarea:

dacă toate(X(:))
instrucțiuni
Sfârşit

Instrucțiunile if ... else ... end și if ... elseif ... end creează ramuri suplimentare în corpul instrucțiunii if:

  • Declarația else nu conține o condiție logică. Declarațiile asociate cu acesta sunt executate dacă instrucțiunea anterioară if (și eventual elseif) este falsă. Instrucțiunea elseif conține o condiție logică care este evaluată dacă declarația if anterioară (și eventual elseif) este falsă. Declarațiile asociate cu instrucțiunea elseif sunt executate dacă condiția booleană corespunzătoare este adevărată.
  • Instrucțiunea elseif poate fi reutilizată în cadrul unei instrucțiuni condiționale if.

Exemplu.
Să ne uităm la un fragment de program:

dacă n< 0 % Если n < 0, вывести сообщение об ошибке.
disp("Numărul introdus trebuie să fie pozitiv");
elseif rem(n,2) == 0 % Dacă n este pozitiv și par, împărțiți la 2.
a= n/2;
altfel
a = (n+1)/2; %Dacă n > 0 și impar, creșteți cu 1 și împărțiți.
Sfârşit

Dacă expresia condiționată dintr-o instrucțiune if este o matrice goală, atunci condiția este falsă. Adică, un operator de condiție al formei

în cazul în care o
S1
altfel
S0
Sfârşit

va executa instrucțiuni S0 numai când A este o matrice goală.

Sintaxă:

intrerupator<expresie>
Expresia % este în mod necesar un scalar sau șir

caz<valoare1>
instrucțiuni
% sunt executate dacă< выражение> =< значение1>

caz <значение2>
instrucțiuni
% sunt executate dacă<выражение> = < значение2>

...
in caz contrar
instrucțiuni
% sunt executate dacă<выражение>nu se potrivea cu niciunul dintre
%valori

Sfârşit

Comutatorul ... cazul 1 ... cazul k ... altfel ... instrucțiunea final face ramuri în funcție de valorile unei variabile sau expresii.

Declarația switch include:

  • Un antet comutator urmat de o expresie care trebuie evaluată (scalar sau șir).
  • Orice număr de grupuri de cazuri; Antetul grupului este format din cuvântul caz urmat de valoarea posibilă a expresiei, toate pe aceeași linie. Liniile ulterioare conțin instrucțiuni care sunt executate pentru o valoare dată a expresiei. Executarea continuă până când este întâlnită următoarea declarație de caz sau altă declarație. Aceasta completează execuția blocului de comutare
  • In rest grupeaza. Antetul include doar cuvântul altfel, începând de la rândul următor, sunt plasate instrucțiuni care sunt executate dacă valoarea expresiei nu a fost procesată de niciunul dintre grupurile de cazuri. Execuția se încheie cu declarația finală.
  • Instrucțiunea final este ultima din blocul switch.

Declarația switch funcționează prin compararea valorii expresiei evaluate cu valorile grupurilor de cazuri. Pentru expresiile numerice, instrucțiunea case este executată if<значение>== <выражение>. Pentru expresiile șir, declarația case este adevărată dacă strcmp(valoare, expresie) este adevărată.

Exemplu.
Luați în considerare o instrucțiune switch cu următoarele condiții: verifică variabila input_num; dacă input_num este -1, 0 sau 1, atunci instrucțiunile case afișează mesajul corespunzător. Dacă valoarea expresiei input_num nu este egală cu nici una dintre aceste valori, atunci execuția continuă cu instrucțiunea altfel.

comutați intrare_num
cazul 1
disp ("minus unu")
cazul 0
disp("null")
cazul 1
disp("plus unu")
in caz contrar
disp(„altă valoare”)
Sfârşit

O instrucțiune switch poate folosi o condiție multiplă într-un singur grup de cazuri prin includerea unei expresii de caz dacă expresia pentru acea condiție este scrisă ca o matrice de celule:

comutator var
cazul 1
disp("1")
caz (2,3,4)
disp("2 sau 3 sau 4")
cazul 5
disp("5")
in caz contrar
disp(„altceva”)
Sfârşit

Sintaxă:

in timp ce expresie
instrucțiuni

Sfârşit

Descriere:

Instrucțiunea buclă nedefinită while ... end execută în mod repetat o instrucțiune sau un grup de instrucțiuni atâta timp cât expresia de control este adevărată.

Dacă expresia folosește o matrice, atunci toate elementele sale trebuie să fie adevărate pentru ca execuția să continue. Pentru a transforma o matrice într-o valoare scalară, utilizați funcțiile any și all.

Exemplu.
Această buclă nedefinită găsește primul întreg n pentru care n! - scris ca un număr care conține 100 de caractere:

n = 1;
în timp ce prod(1:n)< 1e100
n = n + 1;
Sfârşit

Ieșirea dintr-o buclă while se poate face folosind instrucțiunea break.

Dacă într-o instrucțiune while, condiția de control este o matrice goală, atunci o astfel de condiție este falsă, adică o instrucțiune ca while A, S1, end nu va executa niciodată instrucțiunea S1 dacă A este o matrice goală.

Sintaxă:

pentru<variabila bucla >=<начальное значение>: <приращение>:<конечное значение>
instrucțiuni

Sfârşit

Descriere:

Instrucțiunea for .... end loop execută o instrucțiune sau un grup de instrucțiuni de un număr predefinit de ori. În mod implicit, incrementul este 1. Puteți seta orice increment, inclusiv negativ. Pentru indici pozitivi, execuția se termină când valoarea indicelui depășește<конечное значение>; pentru incremente negative execuția se încheie când indicele devine mai mic decât<конечное значение>.

Exemplu

Această buclă este executată de cinci ori:
pentru i = 2:6
x(i) = 2*x(i-1);
Sfârşit

Bucle imbricate precum:
pentru i = 1:m
pentru j = 1:n
A(i,j) = 1/(i + j - 1);
Sfârşit
Sfârşit

Utilizarea unui tablou ca variabilă de buclă. Matricele pot fi folosite ca pentru variabile de buclă.

Exemplu.
Se consideră o matrice A de dimensiunea mxn. Operator de buclă

pentru i = A
instrucțiuni
Sfârşit

definește variabila buclă i ca vector A(:, k). Pentru primul pas al buclei, k este 1; pentru al doilea, k este 2 și așa mai departe până când k atinge valoarea n. Adică, bucla este executată de câte ori există coloane în matricea A. Pentru fiecare pas, i este un vector care conține una dintre coloanele matricei A.

Funcții încorporate.

Începând cu MATLAB 5, fișierele M pot conține cod pentru mai mult de o funcție. Prima funcție din fișier este funcția principală, numită prin numele fișierului M. Alte funcții dintr-un fișier sunt subfuncții care sunt vizibile numai pentru funcția principală și pentru alte subfuncții ale aceluiași fișier.

Fiecare subfuncție are propriul său titlu. Subfuncțiile se succed continuu. Subfuncțiile pot fi apelate în orice ordine, în timp ce funcția principală este executată prima.

Subfuncțiile medie și mediană calculează media și mediana listei de intrare. Funcția principală newstats determină lungimea listei și apelează subfuncții, trecându-le pe lungimea listei n. Funcțiile din același fișier M nu pot accesa aceleași variabile decât dacă sunt declarate ca variabile globale în cadrul funcțiilor corespunzătoare sau transmise acestora ca parametri. Vă rugăm să rețineți că ajutorul poate vedea doar funcția principală și nu vede subfuncțiile.

Când un apel de funcție vine dintr-un fișier M, MATLAB verifică mai întâi dacă funcția este o subfuncție. Deoarece prezența subfuncțiilor este verificată mai întâi, puteți utiliza numele funcțiilor sistemului MATLAB ca nume al subfuncției.

Directoare private. Ele au fost introduse în sistemul MATLAB încă din versiunea 5.0. Directoarele private sunt un subdirector numit privat al directorului părinte. Fișierele M ale unui director privat sunt accesibile numai fișierelor M ale directorului părinte. Deoarece fișierele directoare private nu sunt vizibile în afara directorului părinte, ele pot avea aceleași nume ca fișierele din alte directoare MATLAB. Acest lucru este util în cazurile în care utilizatorul își creează propriile versiuni ale unei anumite funcții, salvând originalul într-un director diferit. Deoarece MATLAB caută prin catalogul privat înainte de cataloagele standard de funcții ale sistemului MATLAB, găsește mai întâi funcția din catalogul privat.

Lucrare de laborator nr 6

Scopul lecției: familiarizează-te cu operatorii condiționali și operatorii de buclă, dobândește abilități în utilizarea lor în calcule ciclice și ramificate.

Declarații și bucle condiționate în MatLab

Un pas important în crearea de programe cu drepturi depline în MatLab este învățarea operatorilor de ramuri și a buclelor. Cu ajutorul lor, puteți implementa logica executării algoritmilor matematici și puteți crea calcule repetate (iterative, recurente).

Declarație condițională if

Pentru a putea implementa logica în program se folosesc instrucțiuni condiționale. În mod speculativ, acești operatori pot fi reprezentați ca puncte nodale, la atingerea cărora programul alege în care dintre direcțiile posibile să meargă mai departe. De exemplu, doriți să determinați dacă o variabilă arg conține un număr pozitiv sau negativ și să afișați un mesaj corespunzător pe ecran. Pentru a face acest lucru, puteți utiliza instrucțiunea if, care efectuează verificări similare.

În cel mai simplu caz, sintaxa acestei instrucțiuni if ​​este:

dacă<выражение>

<операторы>

Dacă valoarea parametrului expresiei este evaluată la adevărat, atunci instrucțiunea este executată, altfel este omisă de program. Trebuie remarcat faptul că „expresie” este o expresie condiționată care testează o anumită condiție. În tabel 2.1 prezintă opțiuni pentru expresii logice simple ale operatorului if.

Tabelul 1. Expresii logice simple

Adevărat dacă a este mai mic decât b, fals în caz contrar.

Adevărat dacă a este mai mare decât b, fals în caz contrar.

Adevărat dacă a este egal cu b, fals în caz contrar.

Adevărat dacă a este mai mic sau egal cu b, fals în caz contrar.

Adevărat dacă a este mai mare sau egal cu b, fals în caz contrar.

Adevărat dacă a nu este egal cu b, fals în caz contrar.

Mai jos este un exemplu de implementare a funcției sign(), care returnează +1 dacă numărul este mai mare decât zero, -1 dacă numărul este mai mic decât zero și 0 dacă numărul este zero:

funcția semnul_meu x = 5; dacă x > 0 disp(1); se termina daca x< 0 disp(-1); end if x == 0 disp(0); end

Analiza exemplului de mai sus arată că toate aceste trei condiții se exclud reciproc, i.e. Când unul dintre ele este declanșat, nu este nevoie să le verificați pe celelalte. Implementarea unei astfel de logici va crește viteza de execuție a programului. Acest lucru poate fi realizat prin utilizarea designului

dacă<выражение> <операторы1>% sunt executate dacă condiția else este adevărată<операторы2>% sunt executate dacă condiția este final fals

Atunci exemplul de mai sus poate fi scris după cum urmează:

funcția semnul_meu x = 5; dacă x > 0 disp(1); altfel daca x< 0 disp(-1); else disp(0); end end

Acest program verifică mai întâi dacă x este pozitiv și, dacă da, tipărește valoarea 1 și ignoră toate celelalte condiții. Dacă prima condiție se dovedește a fi falsă, atunci execuția programului trece prin else (altfel) la a doua condiție, în care variabila x este verificată pentru negativitate, iar dacă condiția este adevărată, valoarea -1 este afișată pe ecran. . Dacă ambele condiții sunt false, atunci este afișată valoarea 0.

Exemplul de mai sus poate fi scris într-o formă mai simplă folosind un alt construct de instrucțiune MatLab if:

dacă<выражение1> <операторы1>% sunt executate dacă expression1 elseif este adevărată<выражение2> <операторы2>% sunt executate dacă expresia2 ... elseif este adevărată<выражениеN> <операторыN>% sunt executate dacă expresiaN se termină

si se scrie dupa cum urmeaza:

funcția semnul_meu x = 5; dacă x > 0 disp(1); % este executat dacă x > 0 elseif x< 0 disp(-1); % выполняется, если x < 0 else disp(0); % выполняется, если x = 0 end

Folosind instrucțiunea if, puteți testa condiții mai complexe (compuse). De exemplu, trebuie să determinați: variabila x se încadrează în intervalul de valori de la 0 la 2? Acest lucru poate fi implementat prin verificarea simultană a două condiții simultan: x >= 0 și x<=2. Если эти оба условия истинны, то x попадает в диапазон от 0 до 2.

Pentru a implementa condiții compuse în MatLab, se folosesc operatori logici:

& - ȘI logic

| - SAU logic

~ - NU logic

Să ne uităm la un exemplu de utilizare a condițiilor compuse. Să presupunem că doriți să verificați dacă o variabilă x este în intervalul de la 0 la 2. Programul va fi scris după cum urmează:

funcția my_dacă x = 1; dacă x >= 0 și x<= 2 disp("x принадлежит диапазону от 0 до 2"); else disp("x не принадлежит диапазону от 0 до 2"); end

În al doilea exemplu, vom verifica pentru a vedea dacă variabila x nu aparține intervalului de la 0 la 2. Acest lucru se realizează prin declanșarea uneia dintre cele două condiții: x< 0 или x > 2:

funcția my_dacă x = 1; dacă x< 0 | x >2 disp("x nu aparține intervalului de la 0 la 2"); else disp("x aparține intervalului de la 0 la 2"); Sfârşit

Folosind operatorii logici AND, OR, NOT, puteți crea o varietate de condiții compuse. De exemplu, puteți verifica dacă x este în intervalul -5 la 5, dar nu în intervalul 0 la 1. Evident, acest lucru poate fi implementat astfel:

funcția my_dacă x = 1; dacă (x >= -5 și x<= 5) & (x < 0 | x >1) disp("x aparține lui [-5, 5], dar nu este inclus în "); else disp("x nu este în [-5, 5] sau în "); Sfârşit

Rețineți că parantezele au fost folosite în condiția compusă complexă. Faptul este că prioritatea operației AND este mai mare decât prioritatea operației SAU, iar dacă nu ar exista paranteze, condiția ar arăta astfel: (x >= -5 și x<= 5 и x < 0) или x >1. Evident, o astfel de verificare ar da un rezultat diferit de cel scontat.

În programare, parantezele sunt folosite pentru a modifica prioritățile de execuție ale instrucțiunilor. La fel ca operatorii aritmetici, operatorii logici pot fi modificați la discreția programatorului. Folosind paranteze, testul se face mai întâi în interiorul lor, apoi în afara lor. De aceea, în exemplul de mai sus sunt necesare pentru a obține rezultatul dorit.

Prioritatea operațiilor logice este următoarea:

NOT (~) – cea mai mare prioritate;

Și (&) – prioritate medie;

SAU (|) – cea mai mică prioritate.

Buclele din matlab presupun că o comandă sau un grup de comenzi trebuie
repeta de mai multe ori.

Cel mai simplu mod de a crea o buclă este utilizarea
pentru exprimare Mai jos este un exemplu simplu în care 10 este calculat și afișat! = 10 * 9 * 8 ... * 2 * 1.

f = 1;
pentru n = 2:10
f = f*n;
Sfârşit

f =
3628800

O buclă în Matlab începe cu o expresie for și se termină cu o expresie finală. Echipă
între aceste expresii se execută în total de nouă ori, o dată pentru fiecare
n valori de la 2 la 10. Pentru a întrerupe ieșirea intermediară în interiorul buclei, noi
a folosit punct și virgulă. Pentru a vedea rezultatul final, aveți nevoie
introduceți f după terminarea buclei. Dacă nu folosiți punct și virgulă, programul
MATLAB va afișa fiecare valoare intermediară 2!, 3! etc.

În modulul Editor, comenzile for și end sunt evidențiate automat
in albastru. Oferă o mai bună lizibilitate dacă introduceți între
lor comenzi (cum am făcut-o); modulul Editor face acest lucru
automat. Dacă introduceți for în fereastra de comandă,
MATLAB nu va emite un nou >> prompt de comandă până când dvs
introduceți comanda end, care va face ca programul MATLAB să finalizeze bucla și
va afișa un nou prompt de comandă.

  • Dacă utilizați o buclă într-un script M-file cu efectul de ecou pe afișare, comenzile vor fi ecou de fiecare dată pe parcursul buclei. Puteți preveni acest lucru inserând o comandă echo off chiar înaintea instrucțiunii end și o comandă echo on imediat după aceasta; apoi fiecare comandă din buclă va fi reflectată o dată (cu excepția sfârșitului).

Notă: există trei tipuri de bucle în matlab, care sunt prezentate mai jos

1. Bucla For în Matlab

a=0;
pentru i=1:10
a=a+1;
Sfârşit

2. Bucla while în Matlab

a=0;
In timp ce<10
a=a+1;
Sfârşit

3. If bucla în Matlab

a=10;
dacă a==10
"primul caz"
altfel
"al doilea caz"
Sfârşit

ans =
primul caz

Prin urmare, din cele de mai sus, putem concluziona că trebuie să vă uitați la o mulțime de informații și alternative suplimentare!


Cele mai bune articole pe această temă