Variabile și tipuri de variabile

Acest capitol este cu siguranță cea mai fundamentală parte pe care ar trebui să o stăpânească fiecare utilizator Scilab. Acesta definește operațiunile de creare și manipulare a obiectelor multi-indexate care pot fi matrice (reale, booleeni).

altă parte

Notă 1: Variabilele sunt formate dintr-un șir alfanumeric începând cu o literă (dar și% $? #) De 24 de caractere (dincolo de acestea nu sunt luate în considerare).

Notă 2: Nu este posibilă reatribuirea variabilelor predefinite, precum și a funcțiilor primitive 2.1 .

După ce variabila a fost definită pentru a-și vedea conținutul, trebuie doar să tastați numele și să validați:

Notă 3: Când executați o comandă, apare răspunsul ans, este o variabilă care poate fi realocată.

Nota 4: Dacă există o variabilă și conține de exemplu o matrice, atribuirea acestei variabile unei alte cantități (nu neapărat de același tip) nu generează un mesaj de eroare sau avertisment.

Scilab oferă comenzi utile pentru gestionarea variabilelor pe care le putem menționa

Funcția who returnează lista variabilelor (găsim unele cunoștințe "A", "% i", "% e" și "% eps"), informații despre spațiul de memorie ocupat și rămas în numărul de cuvinte (1 cuvânt = 1 număr de precizie dublă), iar în ultima linie numărul de variabile utilizate și disponibile (total).

Comenzile whos (), whos -name „începutul numelui (variabilelor) variabilei”, whos-type „tip variabilă” returnează informații mai detaliate despre dimensiunea variabilelor.

O funcție foarte utilă pe matrice și, prin urmare, pe variabile, este funcția de dimensiune. Rețineți că Scilab poate face matrice de aproape orice! size returnează numărul de rânduri și coloane.

dimensiune (2). Asa de ? Vezi și: lungimea (A), tipul (A), a = 2 * A .

Vom specifica mai târziu existența variabilelor locale și globale cu utilizările și proprietățile lor respective.

O sintaxă mai potrivită pentru crearea tabelelor A și B și următoarele Cu alte cuvinte

Atenție, această ultimă comandă are două comportamente de știut, primul este în cazul în care răspunsul este tabelul gol. A doua vede aici că ultima valoare este cea care este mai mică decât limita indicată. Această ultimă specificație poate provoca dificultăți, de exemplu, în timp ce

Pentru a depăși această particularitate există comanda linspace care este utilizată în formularul linspace (început, sfârșit, număr de valori). De această dată, tabelul de rezultate conține în mod necesar valorile limită.

A se vedea, de asemenea, spațiul jurnal (început, sfârșit, număr de valori) 2.2 .

Aceste accesări la elementele matricei permit, de asemenea, să afecteze (toate sau) o parte din matrice:

Extracția și atribuirea joacă un rol identic, întreaga ființă indicând elementul (elementele) ales (e).

Am folosit deja funcția de dimensiune, pentru matrice funcția lungime pare mai potrivită, returnând lungimea totală a obiectului (chiar și pentru o matrice).

Cu toate acestea, există un mic truc pentru a ajunge la ultimul element al unui tablou, este utilizarea în expresia $:

Aici avem funcțiile de extracție standard pe care le au majoritatea limbajelor de programare, dar limbaje precum FORTRAN 90 sau Matlab 2.3 oferă posibilitatea de a indica direct un subset al unui tablou: aici punem între paranteze un set de indicii. Acest lucru este valabil atât pentru extracție, cât și pentru atribuire.

Rețineți unele particularități, se oferă posibilitatea de a avea indici redundanți cu două comportamente:

- la extragere - la atribuire: cu la final ultima valoare atribuită (în ordinea indicilor).

  • t (1: 2: $),
  • t ($: - 1: 1)
  • t (:)

Să ne uităm la o altă particularitate. Dacă încercăm să extragem valoarea celui de-al 6-lea element din t, atunci ceea ce era previzibil, pe de altă parte atribuie dinamic o valoare suplimentară lui t. Acum putem vedea că o matrice de dimensiuni suficiente este realocată automat, completată cu 0 .

Notă: utilizarea intensivă a acestei (re) alocări dinamice poate genera timpi prohibitivi de execuție.

De asemenea, este posibil să contractăm scrierea anumitor atribuții, partea dintre paranteze fiind văzută ca un set de indici pentru care atribuim valoarea 2. Conform acestui principiu putem aloca valori în afara dimensiunii matricei ca mai înainte.

Pe de altă parte, dacă variabila nu este predefinită, interpretul returnează o matrice de coloane.

Această formă de scriere poate fi utilizată în timpul extragerii sau cu diferite dimensiuni vectoriale Această scriere contractată poate fi utilizată pentru a schimba variabile

Pe de altă parte, comanda nu șterge variabila, dar o menține goală, pentru ca variabila să dispară trebuie să utilizați comanda clear .

Există câteva funcții specifice:

  • sum (): suma elementelor.
  • prod (): produs al elementelor.
  • mean (): medie a elementelor.
  • max (), min (): valoarea maximă și minimă.
  • cumsum (), cumprod (): returnează o matrice cu primul suma cumulativă a elementelor și al doilea produsul cumulativ.
  • sort (), gsort (), lex_sort (): diferite proceduri de sortare.


Exerciții

  1. Do sum ([]) .
  2. Make prod ([]) .
  3. Pur și simplu scrieți 5! cu funcția prod .
  4. Inițializați vectorul de mărime 10 cu .
  5. Generați un vector aleatoriu de mărimea 10 (rand (1,10) și normalizați-l pentru norma euclidiană ().
  6. Generați tabelul puterilor de la până la;
  7. Scrieți un vector care să conțină valorile, pentru .
  8. Inversați ordinea vectorului anterior.
  9. Generați un vector de numere care merg de la până la pași de .
  10. Extrageți din vectorul anterior mai multe rânduri de .

    zerouri (n, p) returnează matricea nulă a n rânduri și p coloane.

unele (n, p) ca înainte, dar matricea este umplută cu 1.

ochi (n, p) matrice de identitate de mărime n p;

diag (v) sau diag (v, i) Folosind vectorul sau matricea v, construiți matricea cu v ca diagonală principală. argumentul i specificând diagonala în cauză.

rand (n, p) returnează o matrice de numere aleatorii de distribuție uniformă pe .

Pentru a obține o distribuție normală sau altele, consultați ajutorul corespunzător.

matrice (v, n, p) funcție de (re) formatare, răsfoiți cu coloană elementele lui v, care sunt plasate coloană cu coloană în matricea de ieșire

Argumentul -1 poate înlocui unul dintre rândurile sau numărul coloanei, de exemplu coloanarea matricei

Primitivele ones (), zeros () și eye () pot fi folosite trecând o matrice ca argument. Rezultatul are aceleași dimensiuni ca și matricea din argument.

Dar se pot specifica seturi de indici: se extrage intersecția sub-matricei rândurilor 1 și 2 cu coloanele 3 și 4. Această sintaxă este identică cu atribuirea

În ceea ce privește tablourile, putem utiliza redundanța indicilor. Rețineți utilizarea: specificării tuturor indicilor coloanei (sau rândurilor). De asemenea, puteți utiliza $

Este posibil să considerăm o matrice ca un vector, acest vector este compus din coloanele matricei plasate cap la cap:

Notă: Această reprezentare a matricei sub formă de vectori de coloană corespunde modului de stocare a matricelor (coloane cu coloane).

Este posibil să se profite de structura bloc a unei matrice pentru definirea ei

Putem adăuga funcții de extracție precum:

  • diag (A) 2.4: extrageți diagonala matricei A
  • tril (A) și triu (A): respectiv returnează o matrice compusă din partea inferioară (inferioară) și superioară (superioară) a A.

Deoarece Scilab este un mediu de manipulare a matricei, găsim majoritatea instrumentelor de calcul al matricei, cum ar fi:

  • det () Calculul determinantului.
  • trace () Suma elementelor diagonale.
  • inv () Inversa unei matrice.
  • spec () Calculul vectorilor și valorilor proprii.
  • rank () Calculul rangului unei matrice.
  • qr () Descompunerea QR a unei matrice.
  • lu () descompunerea LU (eliminarea Gaussiană) a unei matrice.
  • chol () Descompunerea Cholesky a unei matrice.
și alte funcții.


Exerciții

  1. Generați o matrice de dimensiune diagonală de 10x10 de .
  2. Inversați rândurile sau coloanele pentru a obține din matricea anterioară o matrice antidiagonală.
  3. Generați o matrice aleatorie de dimensiunea 3x4
    • Schimbați ultima coloană cu prima.
    • Extrageți primul bloc 3x3 din matrice.
    • Asamblați matrița de dimensiuni 6x4 realizată din suprapunerea (una peste alta) a matriței.

Asamblați următoarele matrițe

  • Generați 2 matrici aleatorii de dimensiunea 4x4, formați matricea din care fiecare element și sup elementele corespunzătoare din primele 2 matrice ().
  • Dar capacitatea matricială a operatorilor de conjuncție, oferind posibilitatea de a lucra cu matrici booleene, se extinde la operatorii de comparație: Operatorii de comparație sunt> $ - >> $ \ egroup ">, => $ -> => $ \ egroup">, (egalitate) sau> $ - >> $ \ egroup "> (diferit).

    În plus, există versiuni vectoriale ale operatorilor de conjuncție. Aceste comenzi sunt disponibile și sub formă de matrice, cu comutatorul rând sau coloană.

    Este încă posibil să utilizați funcții clasice cum ar fi comenzile matrix (), diag () .

    Mai mult anecdotic, există diferite porți între calculul boolean și calculul real. Este posibil să se sumeze un boolean cu un real valorile 0 și, acționând ca valori false și adevărate.

    Acest lucru poate da naștere la expresii ale formei

    Comanda find poate, de asemenea, să returneze indexurile rândurilor și coloanelor căutării.

    • A = rand (2.3)
    • găsiți (A $ "> 0,5)
    • [i, j] = găsi (A $ "> 0,5)


    Exerciții

    1. Generați 2 matrice aleatorii de dimensiunea 5x5 (A și B). Găsiți matricea booleană corespunzătoare elementelor lui A mai mari decât cele ale lui B (adevărat dacă b_ $ -> b _ $ ">).
    2. Generați 1 matrice aleatorie de dimensiunea 5x5, extrageți elementele între 0,3 și 0,7.
    3. Generați 1 vector aleatoriu de dimensiunea 1x10, scădeți din elemente mai mari decât .
    4. Generați 1 matrice aleatorie de dimensiunea 5x5 cu un întreg între 0 și 10. Găsiți elementele egale cu 0.

    typeof (p), typeof (q), q ('num'), q ('den') cu p și q definite mai sus.

    Posibilitatea este oferită cu comanda poly de a defini direct un polinom prin rădăcinile sale (implicit) sau prin coeficienții săi. Comenzile rădăcini () și coeff () permit operații inverse (sau efectuează calculul rădăcinilor pentru prima).

    Comenzile algebrice obișnuite: suma, multiplicarea, împărțirea și puterea sunt valabile.

    Notă 1: caracterul „s” (variabilă simbolică) a fost utilizat în definiția polinomului r, utilizatorul are posibilitatea de a alege variabila sa polinomială, pe de altă parte compozițiile (sumă) necesită utilizarea polinoamelor care au aceeași variabilă Comanda varn () poate rezolva această problemă.

    Notă2: comanda poli poate lua ca argument o matrice pătrată, rezultatul în acest caz este polinomul caracteristic al matricei dacă matricea nu este pătrată, atunci elementele sunt citite coloană cu coloană și, prin urmare, este polinomul definit de cele rădăcini care s-au întors.

    Pentru a evalua un polinom (și o fracție), intervine comanda horner (polinom, valori)

    • grade (): returnează gradul polinomului (nu fracția!).
    • derivat (): derivă polinomul sau fracția.
    • coeff (): returnează matricea coeficienților polinomului clasificați în ordine crescătoare.
    • mcm (,), gcm (,): cel mai mic și cel mai mare multiplu comun.
    • pdiv (), ldiv (): împărțire euclidiană și împărțire în ordine crescătoare.
    • rădăcini (): extrageți sau calculați rădăcinile polinomului.
    • simp (): simplificarea fracției.
    • factors (): factorizarea în elemente simple.


    Exerciții

    1. Scrieți polinomul .
    2. Scrieți polinomul, Calculați rădăcinile lui .
    3. Aceeași întrebare ca înainte, dar cu, pentru
    4. Scrieți fracția .
      • Calculați derivata lui .
      • Evaluează în puncte și .
      • Găsiți polii .

    Șirurile de caractere constituie un tip Scilab și, ca atare, admit reguli de utilizare și comportament.

    Un șir este o expresie delimitată de un singur apostrof (') sau dublu apostrof (").

    pentru a face ca apostroful unic sau dublu să apară în expresie, trebuie să dublezi apostroful

    Este posibil să transformați orice expresie numerică într-un șir de caractere cu comanda string () .

    Notă: Vă rugăm să rețineți că caracterele accentuate ale limbii noastre dragi nu dau întotdeauna rezultatul așteptat 2.5

    Șirul de caractere, ca majoritatea tipurilor Scilab, admite o sintaxă matricială.

    În cazul unei matrice putem folosi comanda strcat () care permite punerea elementelor matricei cap la cap (răsfoiți după coloane) În acest ultim caz concatenarea se efectuează cu un spațiu inserat între fiecare termen.

    concatenarea admite extensii naturale între o matrice (de caractere) și un scalar (de asemenea șir de caractere)

    comanda strindex () returnează poziția caracterului sau șirului specificat în argument.

    • convstr (): schimbați „majuscule” ale șirului de caractere („u” sau „l”).
    • grep (): găsiți un șir de caractere într-un alt sau o serie de șiruri de caractere.
    • length (): funcția de lungime aplicată unui șir de caractere nu are același comportament ca la alte tipuri. În acest caz, returnează o matrice care conține dimensiunile șirurilor argumentului.
    • str2code () și code2str (): prima funcție returnează matricea de caractere Scilab, iar a doua face operația opusă.
    • strsub (): substituie un șir de caractere în altul.
    • stripblanks (): eliminați spațiile din expresie.

    Rețineți comanda evstr care evaluează un șir de caractere: sau comanda execstr care cere interpretului executarea Scilab a acestui șir: Aceste ultime comenzi sunt relativ inofensive, totuși, deoarece ne aflăm într-un mediu interpretat, acest lucru poate da o „dinamică caracterul programului, permițându-i chiar să fie auto-generat !


    Exerciții

    1. Formați șirul de caractere „1,2,3,4,5” .
    2. Găsiți pozițiile lui „o” în „salut”, înlocuiți aparițiile lui „o” cu „-” .
    3. Formați șirul 'pi = 3.1415927' utilizând variabila predefinită% pi .

    Este posibil să creați o listă goală

    Am văzut că pentru tablouri am putea atribui (sau extrage) un element sau o parte (set de indici). Pentru lista de tipuri lucrurile nu mai sunt la fel. Într-adevăr, dacă atribuim o parte a listei, atunci răspunsul este imediat

    Pe de altă parte, în timpul extracției avem următorul comportament, dar, prin urmare, este permis să „extragem mai multe” elementele unei liste cu ajutorul parantezelor.

    Încă nu putem șterge un set de indici

    Dar atenție, comportamentul lui null () poate fi radical

    Notă: elementul list (), lista goală este o listă, dar nu nulă () .

    Puteți accesa câmpurile unui element din listă printr-un mod de extragere ierarhică. În exemplul următor, al doilea element al listei este un tablou, iată sintaxa pentru a obține direct prima valoare a tabloului:

      Adăugare la sfârșitul listei:

    Adăugare la începutul listei: În acest caz, indicii sunt schimbați automat pentru a obține primul element la indexul 1.

  • Adăugare la index: Acesta este standard, în plus, ca în cazul matricelor dacă un element este atribuit în afara indexului listei, Scilab completează automat până la indexul elementului afectat
  • În acest caz putem extrage sau atribui cu cei doi indici de listă

    Putem face liste cu liste de liste .

    Acest set de funcționalități face posibilă extinderea structurii algebrice la alte forme de reprezentare. Putem consulta ajutorul raționalului pentru a vedea o construcție a unei fracții raționale (o fracție rațională este compusă din două polinoame, un "num" - erator și un "den" - ominator).

    Sintaxa declarației este următoarea:

    • nume_tip: șir de caractere care definește numele tipului (ex: rațional).

    field_name1, field_name2: șiruri de caractere denumind comenzile.

  • câmpul1, câmpul2: diferitele câmpuri care pot fi de orice tip Scilab (constantă, matricială, booleană, listă sau alt mlist). Prezența câmpului 1, câmpului 2 nu este obligatorie.
  • Exemplu Vedem la executarea acestui exemplu că o listă tastată este o listă, care conține ca prim element un vector de coloană de șiruri de caractere care oferă informații despre structura variabilei

    Tipul de tip (fracție), tipul (fracția), notați rolul jucat de funcția de tip .

    Celelalte două modalități sunt realizate prin numele câmpurilor și sunt strict echivalente: sau altfel

    Operatorul unar care poate oferi o anumită comoditate este „operatorul” afișajului. Mecanismul de afișare pentru listele tastate este după cum urmează: interpretul identifică dacă are printre variabile funcția nume_tip _p, dacă aceasta nu există, se folosește funcția de afișare a listei.

    Exemplu Pentru exemplul nostru de fracție rațională putem defini (online în Scilab 2.6): pentru a obține următorul rezultat: Rețineți că folosim într-un mod imbricat diferitele funcții de afișare ale diferitelor tipuri (aici este funcția tipului polinomial ).

    Dacă încercăm să adăugăm „raționalul” nostru la un scalar, testul nereușit ne oferă: aici interpretul Scilab caută funcția% s_a_rational () corespunzătoare operatorului de însumare binară („_a_”) între un scalar pe stânga („s”) și un tip rațional în dreapta. Pare legitim să îl informăm pe Scilab despre intențiile noastre de însumare definind următoarea funcție: Deci suma se poate face corect.

    După ce ați făcut pașii propuși ca exemplu, faceți fracția +1 .

    Numele funcțiilor de suprasarcină pentru operatorii binari respectă regula:

    • tipul 1 și tipul 2 pot fi tipuri noi (liste tastate) sau pot corespunde următoarelor valori predefinite: