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 = ; 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: 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: Exemplu Exemplu Exemplu Funcții logice. Pe lângă operatorii logici, MATLAB include o serie de funcții logice: Exemplu Exemplu u = ; Î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= Exemplu 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) k = găsi (A > 8); 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 (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: 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 Exemplu. daca X Această afirmație este echivalentă cu următoarea: dacă toate(X(:)) Instrucțiunile if ... else ... end și if ... elseif ... end creează ramuri suplimentare în corpul instrucțiunii if: Exemplu. dacă n< 0
% Если n < 0,
вывести сообщение об ошибке. 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 va executa instrucțiuni S0 numai când A este o matrice goală. Sintaxă: intrerupator<expresie> Comutatorul ... cazul 1 ... cazul k ... altfel ... instrucțiunea final face ramuri în funcție de valorile unei variabile sau expresii. Declarația switch include: 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. comutați intrare_num 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 Sintaxă: in timp ce expresie 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. n = 1; 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 >=<начальное значение>:
<приращение>:<конечное значение> 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: Utilizarea unui tablou ca variabilă de buclă. Matricele pot fi folosite ca pentru variabile de buclă. Exemplu. pentru i = A 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. 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). 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 Cel mai simplu mod de a crea o buclă este utilizarea f = 1; f = O buclă în Matlab începe cu o expresie for și se termină cu o expresie finală. Echipă În modulul Editor, comenzile for și end sunt evidențiate automat Notă: există trei tipuri de bucle în matlab, care sunt prezentate mai jos a=0; a=0; a=10; ans = 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!
B = ;
A< B
ans =1
0
0
0
1
1
1
0
1
&
ȘI
|
SAU
~
NU
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
Dacă elementele unei expresii logice sunt numere, atunci expresia este falsă dacă ambii operanzi sunt zero.
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
Să folosim vectorul u definit mai sus și să construim o expresie logică cu operatorul NOT (~):
~u
ans =0
1
0
0
1
0
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
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”.
dacă toate (u< 3)
Disp ("Toate elementele sunt mai mici de 3")
Sfârşit
toate)
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
A=16
2
3
13
5
11
10
8
9
7
6
12
4
14
15
1
A(k) = 100
A=100
2
3
100
5
100
100
8
100
7
6
100
4
100
100
1
Să ne uităm la un exemplu de operator de comparație care compară rezultatele a două expresii
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.
Fie dată matricea X; Să scriem următorul operator de condiție:
instrucțiuni
Sfârşit
instrucțiuni
Sfârşit
Să ne uităm la un fragment de program:
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
S1
altfel
S0
Sfârşit
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
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.
cazul 1
disp ("minus unu")
cazul 0
disp("null")
cazul 1
disp("plus unu")
in caz contrar
disp(„altă valoare”)
Sfârşit
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
instrucțiuni
Sfârşit
Această buclă nedefinită găsește primul întreg n pentru care n! - scris ca un număr care conține 100 de caractere:
în timp ce prod(1:n)< 1e100
n = n + 1;
Sfârşit
instrucțiuni
Sfârşit
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
Se consideră o matrice A de dimensiunea mxn. Operator de buclă
instrucțiuni
SfârşitDeclarații și bucle condiționate în MatLab
Declarație condițională if
repeta de mai multe ori.
pentru exprimare Mai jos este un exemplu simplu în care 10 este calculat și afișat! = 10 * 9 * 8 ... * 2 * 1.
pentru n = 2:10
f = f*n;
Sfârşit
3628800
î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.
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ă.1. Bucla For în Matlab
pentru i=1:10
a=a+1;
Sfârşit 2. Bucla while în Matlab
In timp ce<10
a=a+1;
Sfârşit 3. If bucla în Matlab
dacă a==10
"primul caz"
altfel
"al doilea caz"
Sfârşit
primul caz← Prezentarea anterioară a rezultatelor Matlab