Documente Academic
Documente Profesional
Documente Cultură
PROGRAMAREA
Sem 2
CALCULATOARELOR ȘI LIMBAJE DE
PROGRAMARE II
ANUL I SERIA D
2020-2021
CUPRINS ȘI PUNCTAJ
2020-2021 2
CURS 1 – PREZENTARE PROGRAME
• Limbaje de programare:
1. C++
2020-2021 3
CURS 1 – PREZENTARE PROGRAME
2020-2021 4
CURS 1 – PREZENTARE PROGRAME
2. AutoCAD
2020-2021 5
CURS 1 – PREZENTARE PROGRAME
• 3 CATIA
2020-2021 6
CURS 1 – PREZENTARE PROGRAME
• 4 INVENTOR
2020-2021 7
CURS 1 – PREZENTARE PROGRAME
2. OCTAVE
3. MathLab
EES
Descriere: EES reprezintă acronimul pentru
Engineering Equation Solver. Funcția
principală este găsirea soluțiilor pentru seturi
de ecuații algebrice. EES poate rezolva în
mod eficient sute de ecuații neliniare cuplate.
O diferență majoră față de alte programe de
rezolvarea a ecuațiilor o reprezintă
proprietățile matematice și termofizice
implicite pe care EES le are.
2020-2021 12
CURS 1 – PREZENTARE PROGRAME
EES
De exemplu, tabelele pentru diferite fluide,
cum ar fi aburul, sunt implementate astfel
încât orice proprietate termodinamică poate
fi obținută printr-o funcție de apelare
predefinită pe baza altor două proprietăți.
Are capacitatea să rezolve studii
parametrice. Bibliotecile ce conțin
proprietățile termodinamice și de transport
sunt utile în rezolvarea problemelor de:
termotehnică, mecanica fluidelor și transfer
de căldură. 13
Elemente introductive ale
limbajului C++
Elemente introductive ale limbajului
C++
3.1. Programarea şi limbaje de programare
3.2. Limbajul C
3.3. Elemente de bază ale limbajului C++
3.3.1. Tipuri de date
3.3.2. Modificatorii de tip
3.3.3. Constante
3.3.4. Variabile
3.4. Operatorii limbajului C++
3.4.1. Operatori aritmetici
3.4.2. Operatori relationali
3.4.3. Operatori de egalitate
3.1. Programarea şi limbaje de programare
Prin programare se înţelege în mod generic
transpunerea unor operaţii repetitive, asupra unui set de
date, într-un limbaj inteligibil de către un sistem de calcul
care urmează ulterior să le execute.
Acest lucru este realizat în două etape:
1. etapă în care este implicat omul şi anume cea de
trecere de la problema reală la transpunerea într-un
limbaj de programare.
2. o a doua etapă, automată, care transpune codul sursă
(înşiruirea de instrucţiuni specifice limbajului respectiv)
într-un cod direct executabil (inteligibil sistemului de
calcul) lucru de care se ocupă programe specializate
numite compilatoare. -
3.1. Programarea şi limbaje de programare
Rolul programării este ca de fiecare dată
când o anumită operaţiune sau o suită de
operaţiuni repetitive care se aplică asupra unor
seturi de date mereu diferite să fie scris un
program care să:
1. ceară setul de date de intrare (cele care trebuie
să fie prelucrate)
2. să execute asupra lor suita standard de
operaţiuni
3. şi să livreze datele de ieşire (adică rezultatele)
3. Elemente introductive ale limbajului
C++
3.1. Programarea şi limbaje de programare
3.2. Limbajul C
3.3. Elemente de bază ale limbajului C++
3.3.1. Tipuri de date
3.3.2. Modificatorii de tip
3.3.2. Constante
3.3.2. Variabile
3.4. Operatorii limbajului C++
3.4.1. Operatori aritmetici
3.4.2. Operatori relationali
3.4.3. Operatori de egalitate
3.2. Limbajul C
Limbajele de programare de nivel mediu au fost
serios dezvoltate pe la mijlocul anilor '50.
La ora actuală se estimează că există peste 2000 de
limbaje de programare, diferenţele între ele fiind legate
în principal de stilul de programare.
Limbajul C, dezvoltat în 1972 de Dennis M. Ritchie*
la Laboratoarele AT&T Bell, este primul limbaj pentru
crearea de sisteme de operare.
Exemplu:
double numar_foarte_mare=123456789123456789.123456789123456789;
double numar_foarte_mic=-123456789123456789.123456789123456789;
double numar_mare=-123456789;
3.3.1. Tipuri de date
5. Tipul de date void
[void ] <definitie_de_functie([void])
sau
void <definitie_de_pointer>;
• Este tipul de dată vidă (fără tip specificat), utilizat în general
pentru mărirea clarităţii programelor.
• Tipul void permite explicitarea faptului că o funcţie nu
returnează nimic sau nu are nici un parametru.
Exemplu:
void salut(void)
{
cout<<“SALUTAM PROGRAMATORII IN LIMBAJUL C++ !!!“<<endl;
}
3. Elemente introductive ale limbajului
C++
3.1. Programarea şi limbaje de programare
3.2. Limbajul C
3.3. Elemente de bază ale limbajului C++
3.3.1. Tipuri de date
3.3.2. Modificatorii de tip
3.3.3. Constante
3.3.4. Variabile
3.4. Operatorii limbajului C++
3.4.1. Operatori aritmetici
3.4.2. Operatori relationali
3.4.3. Operatori de egalitate
3.3.2. Modificatorii de tip
Limbajul C++ oferă pe lîngă cele 5 tipuri de bază
prezentate mai sus, un set de modificatori de tip:
1. unsigned (fără semn)
2. long (lung) Exemplu: unsigned int numar;
3. signed (cu semn) register int i;
4. register (registru) long int numar_foarte_mare;
5. short (scurt)
Un modificator de tip schimbă domeniul valorilor pe
care o variabilă le poate păstra, sau modul în care
compilatorul păstrează o variabilă. Pentru a se modifica un
tip de data, se va plasa modificatorul în faţa tipului respectiv.
3. Elemente introductive ale limbajului
C++
3.1. Programarea şi limbaje de programare
3.2. Limbajul C
3.3. Elemente de bază ale limbajului C++
3.3.1. Tipuri de date
3.3.2. Modificatorii de tip
3.3.3. Constante
3.3.4. Variabile
3.4. Operatorii limbajului C++
3.4.1. Operatori aritmetici
3.4.2. Operatori relationali
3.4.3. Operatori de egalitate
3.3.3. Constante
Sunt date a căror valoare nu poate fi
modificată în timpul execuţiei programului.
659898650 A b b A
3. Elemente introductive ale limbajului
C++
3.1. Programarea şi limbaje de programare
3.2. Limbajul C
3.3. Elemente de bază ale limbajului C++
3.3.1. Tipuri de date
3.3.2. Modificatorii de tip
3.3.3. Constante
3.3.4. Variabile
3.4. Operatorii limbajului C++
3.4.1. Operatori aritmetici
3.4.2. Operatori relationali
3.4.3. Operatori de egalitate
3.3.4. Variabile
Exemplu:
int i;
int j, k, l;
double a, b;
float x, y;
char m, n, t;
3.3.4. Variabile
Variabilele tablou
Prin tablou înţelegem o mulţime ordonată
de acelaşi tip; accesul la elementele tabloului
făcându-se cu ajutorul indicilor.
Declaraţia este:
tip nume_tablou[dimensiune];
Exemplu:
int v[5];
float x[15];
double a[3];
3.3.4. Variabile
Observaţie:
Numerotarea elementelor unui tablou în
limbajul C++ începe cu indicele 0.
Elementele lui int v[5] vor fi:
v[0],v[1],v[2],v[3],v[4];
Indice poate să fie orice expresie întreagă.
Putem avea chiar şi tablouri de şiruri de
caractere: char t[20];
Numele tabloului este de fapt adresa
primului său element.
3.3.4. Variabile
Iniţializarea variabilelor
Poate fi făcută chiar pe linia de declarare a variabilelor:
Exemplu: int i=5;
float x=7.8;
int v[5]={1,2,7,10,-5};
float y[3]={-9.034,89,2};
char c=’B’;
Expresii
• O expresie poate să fie un operand sau mai
mulţi operanzi legaţi prin operatori.
• Orice expresie are tip şi valoare care sunt date
după evaluarea expresiei.
3.4. OPERATORII LIMBAJULUI C++
Operatori
• Operatorii folosiţi în limbajul C++ au o asociere
de la stânga la dreapta – în general – cu excepţia
operatorilor unari (se aplică la un singur
operand), relaţionali şi de atribuire, la care
asocierea se face de la dreapta la stânga.
3.4. OPERATORII LIMBAJULUI C++
Operatorii sunt împărţiţi în 11 categorii:
Operatori
1 aritmetici
2 relaţionali
3 de egalitatite
4 logici
5 logici pe biţi
6 de atribuire
7 de incrementare şi decrementare
8 de conversie explicită (cast)
9 de lungime (sizeof)
10 condiţional
11 virgulă
3. Elemente introductive ale limbajului
C++
3.1. Programarea şi limbaje de programare
3.2. Limbajul C
3.3. Elemente de bază ale limbajului C++
3.3.1. Tipuri de date
3.3.2. Modificatorii de tip
3.3.3. Constante
3.3.4. Variabile
3.4. Operatorii limbajului C++
3.4.1. Operatori aritmetici
3.4.2. Operatori relationali
3.4.3. Operatori de egalitate
3.4.1. Operatori aritmetici
OPERATOR FUNCŢIE
+ Adunare
- Scădere
* Înmulţire
/ Împărţire
% Restul împărţirii
+ adunare unară
- scădere unară
Exemplu:
int i=3, j=8;
Atunci pentru expresia i < j avem valoarea 1
Iar pentru expresia i >= j avem valoarea 0
3. Elemente introductive ale limbajului
C++
3.1. Programarea şi limbaje de programare
3.2. Limbajul C
3.3. Elemente de bază ale limbajului C++
3.3.1. Tipuri de date
3.3.2. Modificatorii de tip
3.3.3. Constante
3.3.4. Variabile
3.4. Operatorii limbajului C++
3.4.1. Operatori aritmetici
3.4.2. Operatori relationali
3.4.3. Operatori de egalitate
3.4.3. Operatori de egalitate
În programe, prin aplicarea acestor operatori de egalitate se
pot obţine două valori posibile, la evaluarea expresiilor care îi
conţin:
0 – ceea ce înseamnă că expresia este falsă
1 – ceea ce înseamnă că expresia este adevărată
OPERATOR FUNCŢIE
== egal
!= diferit
Exemplu:
int i=2, j=5, k=2;
Atunci pentru expresia i!=j avem valoarea 1
Pentru expresia i==j avem valoarea 0
Iar pentru expresia i==k avem valoarea 1
3. Elemente introductive ale limbajului
C++
3.4. Operatorii limbajului C++
3.4.1. Operatori aritmetici
3.4.2. Operatori relaţionali
3.4.3. Operatori de egalitate
3.4.4. Operatori logici
3.4.5. Operatori logici pe biţi
3.4.6. Operatorul de atribuire
3.4.7. Operatori de incrementare şi de decrementare
3.4.8. Operatorul de conversie explicită (cast)
3.4.9. Operatorul de lungime (sizeof)
3.4.10. Operatorii condiţionali
3.4.11. Operatorul virgulă
3.4.4. Operatori logici
În limbajul C/C++ nu există valori speciale pentru adevărat
sau fals şi de aceea:
- valoarea de fals este reprezentată prin zero (0)
- iar valoarea de adevarat este reprezentată prin orice număr
diferit de zero (0) OPERATOR FUNCŢIE
! negare
&& şi logic
|| sau logic
Observaţie:
Din punct de vedere al priorităţii, operatorii unari au cea mai
mare prioritate şi de aceea, în acest caz, operatorul ‘!’ are
prioritatea cea mai mare, urmat în ordine de operatorul ‘&&’ şi
de operatorul ‘||’.
3.4.4. Operatori logici
Reamintim tabele de adevăr ale celor trei operatori
logici:
&& 0 0 || 0 0 !0 1
0 0 0 0 0 1
0 0 1 ! 0 0
0 1 1
Exemplu:
expresia !0 are valoarea 1
expresia !5 are valoarea 0
expresia !(a==b) are valoarea 1 sau 0 în funcţie de valorile lui
a, respectiv b.
3.4.4. Operatori logici
Prezentăm mai Expresie Valoare
jos, un exemplu mai
amplu cu câteva i && j 0
expresii la care le !i && j 1
evaluăm valorile: i || j 1
i ||!j 0
Presupunem că avem !(i && j) 1
variabilele întregi: !i || !j 1
• i=0
!i && j || !j && i 1
• j0
• k0 i <= j || j <= k O sau 1
3. Elemente introductive ale limbajului
C++
3.4. Operatorii limbajului C++
3.4.1. Operatori aritmetici
3.4.2. Operatori relaţionali
3.4.3. Operatori de egalitate
3.4.4. Operatori logici
3.4.5. Operatori logici pe biţi
3.4.6. Operatorul de atribuire
3.4.7. Operatori de incrementare şi de decrementare
3.4.8. Operatorul de conversie explicită (cast)
3.4.9. Operatorul de lungime (sizeof)
3.4.10. Operatorii condiţionali
3.4.11. Operatorul virgulă
3.4.5. Operatori logici pe biţi
Operatorii logici pe biţi se pot folosi în limbajul C++, pentru a
mări performanţele unui program sau pentru a-i reduce consumul
de memorie utilizată.
Acest tip de operatori se aplică unuia sau mai multor biţi
dintr-o expresie.
OPERATOR FUNCŢIE
~ negație logică pe biţi
& şi pe biţi
| sau pe biţi
^ sau exclusiv pe biţi
<< deplasare la stânga pe biţi
>> deplasare la dreapta pe biţi
3.4.5. Operatori logici pe biţi
010 = 000000002
OPERATOR FUNCŢIE
++i incrementare prefixată
--i decrementare prefixată
i++ incrementare postfixată
i-- decrementare postfixată
3.4.7. Operatori de incrementare (++) şi de
decrementare (--)
De fapt:
++i i = i + 1 - incrementarea se face înainte de
evaluarea expresiei în care apare ++
i++ i = i + 1 - incrementarea se face după evaluarea
expresiei în care apare ++
--i i = i - 1 - decrementarea se face înainte de
evaluarea expresiei în care apare --
i-- i = i - 1 - decrementarea se face după evaluarea
expresiei în care apare --
Instrucţiunea expresie:
a) instrucţiunea de atribuire
b) instrucţiunea de apel de funcţie
c) instrucţiunea de incrementare / decrementare
5.3. Instrucţiunea expresie
a) instrucţiunea de atribuire
variabila = expresie;
sau
variabila operator = expresie;
Exemplu:
int x, y, z;
z = x + 5 * y;
x + = 10; (semnificație: x = x + 10;)
5.3. Instrucţiunea expresie
b) instrucţiunea de apel de funcţie
c) instrucţiunea de incrementare/decrementare
Exemplu:
int i, j, k; variabila ++;
i++; ++ variabila;
--j; variabila --;
k++ + --i; -- variabila;
5. Instrucţiunile limbajului C++
if (expresie) instructiune;
Are două forme:
if (expresie)
instructiune1;
else
instructiune2;
5.4. Instrucţiunea if
Instrucţiunea if
Observaţie:
În limbajul C++, spre deosebire de limbajul
PASCAL, nu există cuvântul cheie THEN.
Exemple de programe C++
Enunţ:
Să se calculeze perimetrul şi aria unui triunghi
oarecare dacă se cunosc laturile triunghiului.
Pas 1: Stabilim care sunt datele de intrare, adică cele
care vor fi prelucrate cu ajutorul algoritmului,
împreună cu datele de ieşire.
În cazul problemei date, avem:
Date de intrare: a, b, şi c numere reale ce reprezintă
laturile triunghiului.
Date de ieşire: p şi S numere reale ce reprezintă
perimetrul si aria triunghiului dat.
Exemple de programe C++
Pas 2: Analiza problemei
Stabilim condiţiile pe care trebuie să le
îndeplinească datele de intrare pentru a fi
prelucrate în cadrul algoritmului.
În cadrul problemei pe care o avem de rezolvat,
cunoaştem formula lui Heron pentru calculul ariei
unui triunghi dacă se cunosc laturile sale:
S p( p a)( p b)( p c)
unde p reprezintă semiperimetrul triunghiului.
Exemple de programe C++
Dati numarul n = 5
Suma primelor 5 numere intregi este 15
5.5. Instrucţiunea while
#include<iostream.h>
Folosind int main(void)
facilităţile limbajului
{
C/C++, se poate
scrie aceeaşi int i=1, n, s=0;
secvenţă de cout<<"Dati numarul n = ";
program într-o cin>>n;
formă prescurtată şi while(i<=n) s+=i++;
chiar mai eficientă: cout<<"Suma primelor
"<<n<<" numere intregi este
"<<s<<endl;
}
5.5. Instrucţiunea while
Observaţie:
Pentru ca un ciclu repetitiv să se execute
încontinuu (la infinit), se poate utiliza o buclă
infinită prin introducerea ca expresie a unei
valori diferite de 0.
while (1) este o buclă infinită care se va
executa până când de la tastatură se va
întrerupe execuţia prin apăsarea tastelor
CTRL+C.
Exemple de programe C++
Enunţ:
Să se citească un număr natural n. Să se scrie un
algoritm care afişează toţi divizorii numărului dat.
Exemplu: Pentru n = 12, mulţimea divizorilor este formată
din valorile 1, 2, 3, 4, 6, 12.
Pas 1: Stabilim care sunt datele de intrare, adică cele care vor fi
prelucrate cu ajutorul algoritmului, împreună cu datele de ieşire.
În cazul problemei date, avem:
Date de intrare: n număr natural
Date de ieşire: număr prim sau nu
Exemple de programe C++
Pas 2: Analiza problemei
Vom presupune, la începutul problemei, că numărul
n dat este prim, şi vom specifica acest lucru cu ajutorul
unei variabile de tip logic, căreia îi vom da valoarea
‘adevărat’.
Apoi vom evalua, pe rând, toate valorile începând cu
valoarea 2 şi până la n-1, ca să determinăm dacă sunt
divizori ai numărului n dat.
Dacă găsim un singur divizor printre aceste numere,
atunci vom acorda valoarea ‘fals’ variabilei de tip logic.
La sfârşit vom verifica care este valoarea variabilei
de tip logic şi vom afişa un mesaj corespunzător.
Exemple de programe C++
natural n, i
logic p
citeşte n
p <- adevărat
Pas 3: i <- 2
cât timp i <= n-1 execută
Scrierea dacă n % i = 0 atunci
algoritmului în p <- fals
sfârşit dacă
pseudocod: i <- i + 1
sfârşit cât timp
dacă p = adevărat atunci
scrie ‘Numarul este prim’
altfel
scrie ‘Numarul NU este prim’
sfârşit dacă
stop
Exemple de programe C++
#include<iostream.h>
int main(void)
{
int n, i, p;
cin>>n;
Pas 4: p = 1;
Implementarea i = 2;
while( i <= n-1 )
algoritmului în
{
limbajul de if( n % i == 0 ) p = 0;
programare C++: i = i + 1;
}
if( p == 1 ) cout<<"Numarul este PRIM";
else cout<<"Numarul NU este PRIM";
}
Exemple de programe C++
Date de intrare: 8
Date de ieşire: 21 (1,1,2,3,5,8,13,21)
Probleme propuse spre rezolvare:
Exemplu:
Date de intrare: 12 32 38
Date de ieşire: 2
Probleme propuse spre rezolvare:
Exemplu:
Date de intrare: 10
Date de ieşire: 1 3 7 9
Pentru alte informații teoretice și practice legate
de acest capitol se recomandă următoarele referințe
bibliografice:
1. Adrian Runceanu, Mihaela Runceanu, Noțiuni de
programare în limbajul C++, Editura Academica
Brâncuși, Târgu-Jiu, 2012 (www.utgjiu.ro/editura)
2. Adrian Runceanu, Programarea şi utilizarea
calculatoarelor, Editura Academica Brâncuși, Târgu-Jiu,
2003 (www.utgjiu.ro/editura)
3. Octavian Dogaru, C++ - teorie şi practică, volumul I,
Editura Mirton, Timişoara, 2004
(www.utgjiu.ro/editura)
5. Instrucţiunile limbajului C++
do
instructiune
while (expresie);
expresie1;
while(expresie2)
{
instructiune;
expresie3;
}
5.7. Instrucţiunea for
while (expresie)
instructiune;
for( ;expresie; )
instructiune;
5.7. Instrucţiunea for
Observaţie:
expresia1, expresia2, expresia3 pot să lipsească,
dar este obligatorie prezenţa semnelor: “;”.
natural n, p, i
citeşte n
Pas 3: p <- 1
Scrierea pentru i=1,n execută
algoritmului în p <- p * i
sfârşit pentru
pseudocod:
scrie p
stop
Exemple de programe C++
#include<iostream.h>
int main(void)
{
int n, p, i;
Pas 4: Implementarea
cin>>n;
algoritmului în
limbajul de p = 1;
programare C++: for(i = 1; i<=n; i++)
p = p * i;
cout<<p;
}
Exemple de programe C++
Exemplu:
Exemplul 1:
Pentru valoarea n=123 obţinem următorul rezultat:
6
Exemplul 2:
Pentru valoarea n=5378 obţinem următorul rezultat:
23
Exemple de programe C++
Enunţ:
Să se scrie un program care generează toate
numerele perfecte până la o valoare dată, n.
Un număr perfect este egal cu suma divizorilor
lui, inclusiv 1 (exemplu: 6=1+2+3).
Exemplu:
Pentru n = 1000, se vor afişa valorile 6, 28, 496
Exemple de programe C++
Exemplu:
for(;;)
{
.....
break;
}
5.9. Instrucţiunea break
#include<iostream.h>
Exemplu: int main(void)
Prezentăm în {
continuare, un program int numar;
care folosind for(numar = 1; numar<=100; numar++)
instrucţiunea break, {
if(numar == 50) break;
numără numerele întregi
cout<<" "<<numar;
aflate între 1 şi 100 şi
}
apoi de la 100 la 1. cout<<"\nCel de-al doilea ciclu
De fiecare dată când repetitiv";
număr ajunge la valoarea for(numar = 100; numar>=1; numar--)
50, instrucţiunea break {
face ca execuţia ciclului if(numar == 50) break;
cout<<" "<<numar;
să se oprească:
}
}
5. Instrucţiunile limbajului C++
Exemplu:
Exemplu:
Date de intrare: -
Date de ieşire: 95 96 99 si 95 97 99 sunt
ultimele doua triplete
Probleme propuse spre rezolvare:
3) Să se afişeze toate numerele de două cifre care
adunate cu răsturnatul lor dau 55.
Exemplu:
Date de intrare: -
Date de ieşire: 14 41; 23 32; 32 23; 41 14
Capitolul 6
6.1. Preprocesare
6.2. Structura unui program C++
6.3. Probleme propuse spre rezolvare
6.1. Preprocesare
va folosi
int main(void)
aceste două {
macro-uri: cout<<“Maximul valorilor 10.0 si 25.0
este “ <<MAX(10.0, 25.0)<<endl;
cout<<“Minimul valorilor 3.4 si 3.1
parametri actuali este ” <<MIN(3.4, 3.1)<<endl;
}
Capitolul 6
6.1. Preprocesare
6.2. Structura unui program C++
6.3. Probleme propuse spre rezolvare
6.2. Structura unui program C++
/*-- nume.cpp -- comentariu iniţial --*/
#include <iostream.h>
#include <math.h>
. . . . /*-- alte directive include --*/
[ declaraţii şi definiţii globale ]
int main(void) optional
{
[ declaraţii locale ]
< instrucţiuni >
}
6.5. Probleme rezolvate
1) Se introduce un număr natural cu maxim 9 cifre. Să se
determine şi să se afişeze numărul de cifre, cea mai mare
cifră, cea mai mică cifră şi suma tuturor cifrelor acestui
număr.
Date de intrare: 24356103
Exemplu:
Date de ieşire:
Numarul de cifre 8
Cea mai mare cifra 6
Cea mai mica cifra 0
Suma cifrelor 24
#include<iostream.h> while(n!=0)
int main() {
{ cif=n%10;
long int n; nr_cifre++;
int nr_cifre=0; if(cif>max) max=cif;
int min=100;
int max=-100; if(cif<min) min=cif;
int suma=0; suma=suma+cif;
int cif; n=n/10;
cout<<"Dati numarul }
(maxim 9 cifre) "; cout<<"\n numarul de cifre
cin>>n; "<<nr_cifre;
cout<<"\n cea mai mare cifra "<<max;
cout<<"\n cea mai mica cifra "<<min;
cout<<"\n suma cifrelor "<<suma;
}
6.5. Probleme rezolvate
Exemplu:
2) Dat un număr intreg de Date de intrare 364901211
maxim 9 cifre, să se Date de ieşire:
afişeze numărul de apariţii 0 apare de 1 ori
1 apare de 3 ori
al fiecărei cifre. 2 apare de 1 ori
3 apare de 1 ori
4 apare de 1 ori
5 apare de 0 ori
6 apare de 1 ori
7 apare de 0 ori
8 apare de 0 ori
#include<iostream.h>
int main()
{
long int n;
int n0,n1,n2,n3,n4,n5,n6,n7,n8,n9;
n0=n1=n2=n3=n4=n5=n6=n7=n8=n9=0;
cout<<"Dati numarul (cu maxim9 cifre) = "; cout<<"\n 0 apare de "<<n0<<" ori";
cin>>n;
cout<<"\n 1 apare de "<<n1<<" ori";
while(n!=0) {
switch(n%10){ cout<<"\n 2 apare de "<<n2<<" ori";
case 0: n0++;break; cout<<"\n 3 apare de "<<n3<<" ori";
case 1: n1++;break; cout<<"\n 4 apare de "<<n4<<" ori";
case 2: n2++;break; cout<<"\n 5 apare de "<<n5<<" ori";
case 3: n3++;break;
cout<<"\n 6 apare de "<<n6<<" ori";
case 4: n4++;break;
case 5: n5++;break; cout<<"\n 7 apare de "<<n7<<" ori";
case 6: n6++;break; cout<<"\n 8 apare de "<<n8<<" ori";
case 7: n7++;break; cout<<"\n 9 apare de "<<n9<<" ori";
case 8: n8++;break;
}
case 9: n9++;break;
}
n=n/10;
}
Capitolul 7. Tablouri
tip nume_tablou[dimensiune_maximă];
Exemplu:
Declarări de tablouri unidimensionale:
int a[25]; // declararea unui tablou unidimensional cu maxim 25 de
// elemente, fiecare de tip întreg
float x[30]; // declararea unui tablou unidimensional cu maxim 30 de
// elemente, fiecare de tip real simplă precizie
char s[40]; // declararea unui tablou unidimensional cu maxim 40 de
// elemente, fiecare de tip caracter
7.2. Tablouri unidimensionale (vectori)
• Compilatorul C++ alocă un spaţiu de memorie
egal cu numărul maxim de elemente ale
tabloului, rezervând bineînţeles octeţi în funcţie
de tipul de bază al fiecărui tablou.
• Accesul la fiecare element al tabloului se face
prin numele acestuia urmat între paranteze, de
indicele său (adică poziţia pe care o ocupă în
tablou).
• În limbajul C++, indicii tablourilor încep
numărătoarea de la valoarea 0.
7.2. Tablouri unidimensionale (vectori)
Exemplu:
Modalităţi de acces la elementele ce pot fi
memorate în tablourile unidimensionale
declarate anterior:
a[0] – reprezintă elementul aflat pe prima poziţie în tablou
a[24] - reprezintă elementul aflat pe ultima poziţie în tablou
Problema 1:
Se consideră n numere reale. Se cere să se
determine valoarea minimă şi valoarea maximă.
Exemplu:
Date de intrare:
n=5 si x={10, -2, 34, -198, 4}
Date de ieşire:
minim=-198, maxim=34
7.2. Tablouri unidimensionale (vectori)
#include<iostream.h>
int main(void) Citirea numarului de
{ elemente ce vor fi
int i, n; prelucrate in vector - n
float x[50], min, max;
cout<<"Dati numarul de elemente ale tabloului ";
cin>>n;
for( i = 1; i <= n; i++ )
{
Citirea elementelor si
cout<<"x["<<i<<"]= ";
memorarea lor in
cin>>x[i];
vectorul x
}
7.2. Tablouri unidimensionale (vectori)
tip nume_tablou[dim_linie][dim_coloana];
Exemplu:
Declarări de tablouri bidimensionale:
Problema 1:
Se consideră o matrice A cu nm numere
întregi. Se cere să se obţină transpusa sa.
Exemplu:
Date de ieşire:
Date de intrare: Matricea transpusa B:
n=3, m=4 si matricea A: n=4 si m=3
1234 159
5678 2 6 10
9 10 11 12 3 7 11
4 8 12
7.3. Tablouri bidimensionale (matrici)
#include<iostream.h>
int main(void) Citirea numarului de linii – n
{ si de coloane - m ale matricei
int a[10][10], b[10][10];
int n, m, i, j;
cout<<"Dati dimensiunile matricei A \n";
cout<<"Dati numarul de linii n = "; cin>>n;
cout<<"Dati numarul de coloane m = "; cin>>m;
for(i=1; i<=n; i++)
for(j=1; j<=m; j++)
{
cout<<"a["<<i<<", "<<j<<"] = ";
Citirea elementelor si
cin>>a[i][j]; memorarea lor in
} matricea a
7.3. Tablouri bidimensionale (matrici)
Problema 3:
Exemplu:
Date de intrare:
n=2, m=3 si matricea a: Date de iesire:
123 n=2 si p=3 si matricea
456 produs c:
m=3, p=4 si matricea b:
1 2 3 4 38 44 50 56
5 6 7 8 83 98 113 128
9 10 11 12
7.3. Tablouri bidimensionale (matrici)
#include<iostream.h> Citirea numarului de linii – n
int main(void)
{
si de coloane - m ale matricei
int a[10][10], b[10][10], c[10][10];
int n, m, i, j, k, p;
cout<<"Dati dimensiunile matricei A \n";
cout<<"Dati numarul de linii n = "; cin>>n;
cout<<"Dati numarul de coloane m = "; cin>>m;
for(i=1; i<=n; i++)
for(j=1; j<=m; j++)
{
cout<<"a["<<i<<", "<<j<<"] = ";
Citirea elementelor si
cin>>a[i][j]; memorarea lor in
} matricea a
7.3. Tablouri bidimensionale (matrici)
Matricea rezultat
7.3. Tablouri bidimensionale (matrici)
for(i=1; i<=n; i++)
for(j=1; j<=p; j++) Calculul
{ elementelor
c[i][j] = 0; matricei produs c
for(k=1; k<=m; k++)
c[i][j] = c[i][j] + a[i][k] * b[k][j];
}
7.3. Tablouri bidimensionale (matrici)
Enunt:
#include<iostream.h>
int main(void)
{
// declaram variabilele pe care le vom utiliza in program
int x[30];
long int n, i, m;
cout<<"Dati numarul natural n = ";
cin>>n;
Probleme rezolvate – tablouri unidimensionale
i = 1;
while(n != 0){
x[i] = n % 10;
i++;
n = n / 10;
}
m = i-1;
cout<<"\nVectorul cu cifrele numarului este \n";
for(i = 1; i <= m; i++){
cout.width(3); cout<<x[i];
}
}
Probleme rezolvate – tablouri unidimensionale
Date de intrare:
n = 5 si temperaturile: 23 24 23 25 22
Date de iesire:
23.40
Capitolul 7. Tablouri
Exemplu:
Program care afişează numărul de octeţi
alocaţi pentru:
• un tablou unidimensional
• un tablou bidimensional
• un tablou multidimensional (cu trei dimensiuni)
utilizând operatorul sizeof:
7.4. Tablouri multidimensionale
#include <iostream.h>
int main(void)
{
int a[20];
float x[3][4];
char t[20][30][40];
cout<<"\nNumărul de octeţi pentru tabloul unidimensional
int a[20] este "<< sizeof(a);
cout<<"\nNumărul de octeţi pentru tabloul bidimensional
float x[3][4] este "<< sizeof(x);
cout<<"\nNumărul de octeţi pentru tabloul
multidimensional char t[20][30][40] este "<< sizeof(t);
}
7.4. Tablouri multidimensionale
După compilarea şi execuţia programului, pe ecran
vor apărea următoarele valori:
Capitolul 7. Tablouri
Problema 1:
Enunţ:
Se citeşte un tablou unidimensional cu
n (1<=n<=100) componente numere
naturale.
Se cere să se construiască şi să se
afişeze un nou vector cu componentele
pătrate perfecte ale vectorului iniţial.
Probleme rezolvate cu vectori
Problema 2:
Enunţ:
Se citeşte un tablou unidimensional cu n
(1<=n<=100) componente numere naturale.
Se cere să se calculeze şi să se afişeze
suma elementelor din vector care sunt
divizibile cu o valoare naturală dată a.
Probleme rezolvate cu vectori
#include<iostream.h>
int main(void)
{
unsigned int x[100], a, n, i, s;
cout<<"\nDati numarul de elemente ale
tabloului n = ";
Citirea numarului de
cin>>n; elemente ce vor fi
prelucrate in vector n
Probleme rezolvate cu vectori
cout<<"Dati elementele tabloului \n";
for(i = 1; i <= n; i++)
{
cout<<"x["<<i<<"]="; Citirea
elementelor si
cin>>x[i];
memorarea lor in
} vectorul x
cout<<"\nDati valoarea a = ";
cin>>a;
Citirea valorii a
Probleme rezolvate cu vectori
Problema 3:
Enunţ:
Să se scrie un program C++ care să realizeze
inversarea unui vector:
a) în acelaşi vector şi fără a utiliza un vector
suplimentar
b) într-un alt vector
Probleme rezolvate cu vectori
suma=0;
for(i=1; i<=n; i++)
for(j=1; j<=n; j++)
if( i == j ) suma = suma + a[i][j];
produs=1;
for(i=1; i<=n; i++)
for(j=1; j<=n; j++)
if( i + j == n+1) produs = produs * a[i][j];
Problema 2:
Enunţ:
Se consideră o matrice An*m (1 n, m 30)
având componente numere întregi.
Să se determine maximul fiecărei coloane şi
minimul fiecărei linii.
Probleme rezolvate cu matrici
#include <iostream.h> Citirea numarului
int main(void) de linii ale
{ matricei – n si a
int n, m, i, j, a[30][30], min, max;
cout<<"Dati dimensiunile matricei \n"; numarului de
cout<<"Dati numarul de linii n = "; coloane - m
cin>>n;
cout<<"Dati numarul de linii m = "; Citirea
cin>>m; elementelor si
for(i=1; i<=n; i++) memorarea lor in
for(j=1; j<=m; j++) { matricea a
cout<<"a["<<i<<"]["<<j<<"]= ";
cin>>a[i][j];
}
Probleme rezolvate cu matrici
cout<<"Elementele matricei A sunt: \n";
for(i=1; i<=n; i++)
{
for(j=1; j<=m; j++)
{
cout.width(4); Afisarea
cout<<a[i][j]; elementelor din
} matricea a
cout<<"\n";
}
Probleme rezolvate cu matrici
// calculam minimele de pe fiecare linie
for(i=1; i<=n; i++)
{
min = a[i][1];
for(j=2; j<=m; j++)
if( a[i][j] < min )
min = a[i][j];
cout<<"Minimul de pe linia "<<i<<" este
"<<min<<"\n";
}
Probleme rezolvate cu matrici
// calculam maximele de pe fiecare coloana
for(j=1; j<=m; j++)
{
max = a[1][j];
for(i=2; i<=n; i++)
if( a[i][j] > max )
max = a[i][j];
cout<<"Maximul de pe coloana "<<j<<"este
"<<max<<"\n";
}
}
Executia programului pe o serie de date de test:
Probleme rezolvate cu matrici
Problema 3:
Enunţ:
Se consideră o matrice An*m (1 n, m 30)
având componente numere întregi.
Să se determine suma elementelor de pe
marginea (rama) matricei.
Probleme rezolvate cu matrici
#include <iostream.h> Citirea numarului de linii ale
int main(void) matricei – n si a numarului de
{ coloane - m
int n, m, i, j, a[30][30], suma;
cout<<"Dati dimensiunile matricei \n";
cout<<"Dati numarul de linii n = "; cin>>n;
cout<<"Dati numarul de coloane m = "; cin>>m;
for(i=1; i<=n; i++)
for(j=1; j<=m; j++) {
cout<<"a["<<i<<"]["<<j<<"]= ";
cin>>a[i][j]; Citirea
} elementelor si
memorarea lor in
matricea a
Probleme rezolvate cu matrici
cout<<"Elementele matricei A sunt: \n";
for(i=1; i<=n; i++)
{
for(j=1; j<=m; j++)
{
cout.width(4); Afisarea
cout<<a[i][j]; elementelor din
} matricea a
cout<<"\n";
}
Probleme rezolvate cu matrici
// calculam suma elementelor de pe linia 1
suma = 0;
for(j=1; j<=m; j++)
suma = suma + a[1][j];
// calculam suma elementelor de pe linia n
for(j=1; j<=m; j++)
suma = suma + a[n][j];
Probleme rezolvate cu matrici
Date de intrare:
Exemplu:
n = 2, m = 4, k = 3 si matricea
4368
7490
Date de ieşire:
s = 15
Capitolul 8. Şiruri de caractere
Exemple:
char sir[20]; // tablou de 20 de caractere
char t[10]; // tablou de 10 caractere
8.1. Formă generală. Declarare
Pr o g r a m a r e a c a l c u l a t o a r e l o r \0
cin.getline(variabila_sir, dimensiune_maxima);
Exemplu:
char variabila_sir[120];
cin.getline(variabila_sir, 120);
8.2. Funcţii specifice şirurilor de caractere
Funcţiile pentru operaţii cu şiruri ce se
găsesc în header-ul <string.h>.
strlen (nume_şir)
Returnează un număr întreg ce reprezintă
lungimea unui şir de caractere, fără a număra
terminatorul de şir.
Exemplu: 10
cout <<strlen("sir corect");
8.2. Funcţii specifice şirurilor de caractere
Exemplu:
"carte_informatica"
char sir[20];
cout <<strcpy(sir, "carte_informatica");
8.2. Funcţii specifice şirurilor de caractere
strchr(sir, caracter)
strstr(sir1, sir2)
Returneaza o valoare pozitiva daca un
sir apare intr-un alt sir, 0 in caz contrar.
Exemplu:
char sir1="primul sir", sir2="sir";
if (strstr(sir1,sir2)) cout <<"Am gasit subsirul!"
8.2. Funcţii specifice şirurilor de caractere
Exemplu 1:
#include <iostream.h>
#include <string.h> -1, daca sir1<sir2
strcmp(sir1,sir2)= 0, daca sir1=sir2
int main() 1, daca sir1>sir2
{
char sir1[] = "abcd", sir2[] = "abcde";
cout<<strcmp(sir1, sir2)<<"\n";
// afişare: -1
8.2. Funcţii specifice şirurilor de caractere
cout<<strcmp(sir2, sir1)<<"\n";
// afişare: 1
char str1[20]="hello";
char str2[20]="goodbye";
char str3[20]="";
int diferenta, lungime;
cout<<"str1="<<str1<<" str2="<<str2<<"\n";
8.2. Funcţii specifice şirurilor de caractere
diferenta = strcmp(str1, str2);
if (diferenta == 0)
cout<<"Siruri echivalente! "<<"\n";
else
if (diferenta > 0)
cout<<str1<<" mai mare (d.p.d.v.
lexicografic) decât "<<str2<<"\n";
else
cout<<str1<<" mai mic (d.p.d.v. lexicografic)
decât "<<str2<<"\n";
8.2. Funcţii specifice şirurilor de caractere
cout<<"str1="<<str1<<"\n";
cout<<"str3="<<str3<<"\n";
strcpy (str3, str1);
cout<<"str1="<<str1<<"\n";
cout<<"str3="<<str3<<"\n";
strcat (str3, str1);
cout<<"str1="<<str1<<"\n";
cout<<"str3="<<str3<<"\n";
}
8.2. Funcţii specifice şirurilor de caractere
Executia programului:
8.2. Funcţii specifice şirurilor de caractere
Exemplu 2:
Executia programului:
8.2. Funcţii specifice şirurilor de caractere
Funcţie la ce foloseşte
itoa converteşte un număr întreg într-un şir de caractere
ftoa converteşte un număr real simplă precizie într-un şir de caractere
ultoa converteşte un număr de tip long unsigned într-un şir de caractere
8.2. Funcţii specifice şirurilor de caractere
#include<iostream.h>
#include<stdlib.h>
int main()
{
int numar_int = 6789;
long numar = 1234567890L;
char sir[25];
itoa(numar_int, sir, 10);
cout<<" numar = "<< numar_int<<" sir = "<<sir;
ltoa(numar, sir, 10);
cout<<" numar = "<< numar<<" sir = "<<sir;
}
8.2. Funcţii specifice şirurilor de caractere
Executia programului:
Capitolul 8. Şiruri de caractere
Problema 1:
Enunţ:
Să se afişeze numărul de vocale dintr-un text
scris cu litere mici, memorat intr-o variabilă de tip
șir de caractere.
Exemplu:
Date de intrare: Programarea calculatoarelor
Date de ieșire: Exista 12 vocale in text
8.3. Probleme cu şiruri de caractere
#include <iostream.h>
#include <string.h>
int main()
{
char text[100];
char vocale[] = "aeiou";
int contor = 0;
cout<<"Introduceti text: ";
cin.getline(text, 100);
8.3. Probleme cu şiruri de caractere
for (int i=0; i<strlen(text); i++)
for (int j=0; j<strlen(vocale); j++)
if (text[i] == vocale[j])
contor++;
cout<<"Exista "<<contor<<" vocale in text. ";
}
8.3. Probleme cu şiruri de caractere
Problema 2:
Enunţ:
Să se afişeze cu litere mari un text dat, de
maxim 255 caractere.
Exemplu:
Date de intrare text: liMBajUl c++
Date de ieşire LIMBAJUL C++
8.3. Probleme cu şiruri de caractere
#include <iostream.h>
int main()
{
char sir[255];
cout<<"Introduceti textul: ";
cin.getline(sir, 255);
for (int i=0; sir[i]!=0; i++)
if (sir[i] >= 'a' && sir[i] <= 'z') sir[i] = sir[i] - 'a' + 'A';
cout<<sir; Codurile ASCII:
[‘a’, ’z’] = [97, 122]
} [‘A’, ‘Z’] = [65, 90]
8.3. Probleme cu şiruri de caractere
Problema 3:
Enunţ:
Se citește un șir de caractere. Să se afișeze
litera cea mai des întâlnită.
Exemplu:
Date de intrare text: carte de informatica si
programare
Date de ieşire: a apare de 5 ori
8.3. Probleme cu şiruri de caractere
#include <iostream.h>
#include <string.h>
int main()
{
char sir[1000], carac_max, c;
int i, frecv[256], max=0; // frecv - vector de frecvente
cout<<"Dati sirul de caractere: ";
cin.getline(sir,1000);
for (i=0; i<256; i++) frecv[i] = 0;
8.3. Probleme cu şiruri de caractere
for (i=0;i<strlen(sir);i++)
{
c=sir[i];
frecv[c]=frecv[c]+1;
if (frecv[c]>max){
max=frecv[c];
carac_max=c;
}
}
cout<<carac_max<<" apare de "<<max<<" ori";
}
8.3. Probleme cu şiruri de caractere
Probleme propuse spre rezolvate – șiruri de
caractere
1. Să se afișeze toate prefixele și sufixele unui cuvânt
citit de la tastatură.
Exemplu:
Date de intrare: informatica
Date de ieşire: i a
in ca
inf ica
info tica
infor atica
inform matica
informa rmatica
informat ormatica
informati formatica
informatic nformatica
Probleme propuse spre rezolvate – șiruri de
caractere
2. Se citește de la tastatură un caracter c și un text de
maxim 100 de carectere. Afișați de câte ori apare
caracterul c în cadrul textului. Literele mari se vor
considera diferite de literele mici.
Exemplu:
Date de intrare:
Acesta este un simplu exemplu
Caracterul e
Exemplu:
Date de intrare:
S-a nascut la Targu Jiu in 1968 pe 21 martie
• Efecte:
- realizarea unor programe eficiente, clare, ușor de urmarit
- ușurează întregul proces de realizarea a unei aplicații software:
editare, compilare, depanare (corectare) erori, testare
reutilizare cod, modificarea facilă a aplicatiilor
Structura unui program in C++
Limbaj / Programare structurata
Un program în C++ este alcătuit din una sau mai multe funcții, dintre
care, în mod obligatoriu, una este funcția principală, main().
Funcția = bloc de instrucțiuni care poate fi apelat din orice alta parte a
programului, inclusiv din interiorul funcției respective
Structura unui program in C++
Obs.:
C++ nu recunoaşte spaţiile libere, tab-urile şi sfârşitul de linie ca
terminator şi ca urmare nu exista constrângeri în ceea ce priveşte
poziţia unei instrucţiuni în linie. De asemenea, tot ca urmare a
acestei reguli, se pot plasa două sau mai multe instrucţiuni pe
aceeaşi linie.
Structura unui program in C++
{
declaraţii de variabile locale blocului
instrucţiune 1;
instrucţiune 2;
……………………….
{ BLOC
}
……………………….
instrucţiune N;
}
Structura unui program in C++
Funcția = bloc de instrucțiuni căruia i se asociază un nume, are o lista
de parametrii (argumente) de apel si poate returna un rezultat.
→ poate fi apelată prin numele său de oriunde din program
Declaratiile pot
fi făcute
tip_returnat nume_funcţie (listă parametrii) oriunde in bloc
{
secvenţă de declaraţii variabile locale funcţiei
}
Structura unui program in C++
Structura unui program
main()
{
..................
}
fct_1()
{ ..................
}
........................
fct_N()
{ ..................
}
Structura unui program in C++
Descriere:
- Efectul includerea totala a fișierului sursa in locul directivei.
- Diferența intre cele doua forme este locul unde este căutat fișierul sursa:
< > fișierul este căutat in directoarele standard (specificate prin
opțiuni sau prin variabile de mediu in funcție de compilator).
" " fișierul este căutat întâi in directorul curent, apoi, daca nu este
găsit, in directoarele standard.
-> permite si specificarea caii complete către fișierul inclus; in
acest caz, nu se mai face căutarea si in directoarele standard.
Limbajul de programare C++. Directive de preprocesare
#include Includerea fisierelor sursa
Exemple:
// include fisierul iostream.h
// din directoarele standard
#include <iostream.h>
// include fiserul ListeSimple.h;
// cautarea se face intai in directorul curent
// apoi in directoarele standard
#include “liste.h”
// include fisierul Masive.cpp din directorul
// c:\Biblioteci; daca fisierul nu exista nu
// mai este cautat in alta parte si se genereaza
// o eroare de compilare
#include "C:\\Biblioteci\\Functii1.cpp"
Limbajul de programare C++. Directive de preprocesare
#include Includerea fisierelor sursa
Descriere:
- Efectul înlocuirea la nivel de text (înaintea compilarii) a șirului de
caractere nume_macro cu șirul de caractere
sir_caractere
Reguli:
-> pentru introducerea unui sir_caractere pe mai multe linii, se
va folosi caracterul \ la sfarsitul fiecarei linii ce urmeaza a fi
continuata
-> daca sir_caractere lipsește, atunci textul specificat
prin nume_macro va fi eliminat din codul sursa
Reguli:
-> Valabilitatea unei definiri se încheie in următoarele cazuri:
• la sfârșitul fișierului sursa
• la invalidarea simbolului prin intermediul directive:
#undef nume_macro
Limbajul de programare C++. Directive de preprocesare
#define Constante simbolice
Exemplu: #include <iostream>
#define PI 3.14159
int main()
{ cout << “PI este: ”<< PI << endl;
Exemplu:
#define MAX(x,y) (x>y ? x : y)
int a = 7, b = 10, c;
c = MAX(a,b);
c = (a>b ? a : b);
Limbajul de programare C++. Directive de preprocesare
#define Macrodefiniții
Exemplu:
#define PATRAT(x) x*x;
int x = 2, y;
Exemplu:
#define PATRAT(x) x*x;
int x = 2, y;
#define ATENTIONARE(EXPRESIE) \
if (EXPRESIE) \
cerr << "ATENTIE: "#EXPRESIE << endl;
int main()
{ int nc = 0; // = 10 ?
ATENTIONARE(nc == 0)
. . . . . . . . .
Limbajul de programare C++. Directive de preprocesare
#define Macrodefiniții
In cadrul corpului macrodefinițiilor de pot utiliza operatori speciali:
##param nume -> operator de concatenare pentru simboluri; permite
crearea de simboluri noi (nume de funcții sau de variabile) pe baza
parametrului nume
Exemplu:
#define FUNCTIE_SUMA(TIP) \
TIP suma_##TIP(TIP vector[], int nrElem) \
{ TIP suma = 0; \
for (int i = 0; i < nrElem; i++) \
suma += vector[i]; \
return suma; \
}
Se vor genera functiile suma_int si suma_double, folosind sintaxa
FUNCTIE_SUMA(int)
FUNCTIE_SUMA(double)
Limbajul de programare C++. Directive de preprocesare
#if ... Compilare condiționată
Sintaxa: #if expresie_1
sectiune_1
#elif expresie_2
sectiune_2
. . . . . . . .
#else
sectiunie_n
#endif
expresie_i este o expresie formata din constante sau simboluri
definite cu #define; expresia este considerata adevărată daca este
diferita de 0;
părțile #elif si #else sunt opționale;
sectiune_n reprezintă o secvență de cod de inclus in codul sursa
al programului in funcție de valoarea expresiei;
Limbajul de programare C++. Directive de preprocesare
#if ... Compilare condiționată
Exemplu:
#define DIM_VECTOR 21
int main()
{ int nc = 0;
int main ()
{
cout << MKSTR(HELLO C++) << endl;
return 0;
}
B. #define concat(a, b) a ## b
int main()
{
int xy = 100;
cout << concat(x, y);
return 0;
}
Limbajul de programare C++. Directive de preprocesare
Obs.: C++ oferă urmatoarele macrodefiniții predefinite:
Macro Descriere
__LINE__ Numarul liniei curente la momentul compilarii
return 0;
}
Structura unui program in C++
namespace = Spații de nume
Un program folosește diverse nume (identificatori) asociate variabilelor,
funcțiilor, etc.
Problema: Odata cu creșterea complexității aplicațiilor, cu
administrarea distribuită a dezvoltării acestora (echipe de
dezvoltatori), a aparut problema posibilității de a se suprapune
(defini, folosi) aceleași nume definite in diverse module de catre
diverși membri ai echiupelor de dezvoltare => dorința de izola spațiile
de definiție/acces la numele proprii, definite de fiecare programator,
de elimina posibilitățile de utilizare incrucișată.
using numeSpatiu::nume_def_in_Spatiu
Structura unui program in C++
namespace = Spații de nume
Exemple:
#include <iostream.h>
void main()
{ int a;
std::cin >> a;
std::cout << “a = “ << a << std::endl;
}
sau:
#include <iostream.h>
using namespace std;
void main()
{ int a;
cin >> a;
cout << “a = “ << a << endl;
}
Structura unui program in C++
Exemple:
#include <iostream>
using namespace std;
int var = 98;
namespace Constante
{ const double PI = 3.14159;
const double E = 2.71828;
int var = 8;
double d = 72.9;
void TiparesteValori();
namespace Sp_Interior
{ int var = 2;
}
}
namespace
{ double d = 88.22;
}
Structura unui program in C++
int main()
Exemple: { cout << "d= " << d; //TEMA
cout << "\n(global) var = " << var;
#include <iostream> cout << "\n PI = " << Constante::PI
<< "\n E = "<< Constante::E
using namespace std;
<< "\n var = “ << Constante::var
int var = 98; << "\n Nume sp interior = "
<< Constante::Sp_Interior::var
namespace Constante
<< endl;
{ const double PI = 3.14159;
const double E = 2.71828; Constante ::TiparesteValori();
int var = 8; return 0;
double d = 72.9; }
Unde:
• tip – reprezintă tipul valorii returnate de funcţie
• lista parametri formali – reprezintă variabilele
folosite in cadrul funcţiei împreună cu tipul
fiecaruia dintre ele, dar care au nume (denumiri)
generice – formale – care nu trebuie neapărat să
coincidă cu denumirile variabilele folosite în alte
funcţii sau chiar în funcţia principală.
9.1. Declararea funcţiei
• declaraţii variabile locale - reprezintă zona de
declarare a variabilelor folosite doar în cadrul corpului
funcţiei respective şi care nu se pot folosi în alte funcţii.
• instrucţiuni – reprezintă secvenţa de instrucţiuni care
formează funcţia considerată.
Observaţie:
Dacă lista parametrilor formali este vidă, atunci
reprezentarea declarării ei se face astfel:
tip nume_funcţie(void)
Capitolul 9. Functii
De reținut:
Apelul poate să apară într-o instrucţiune de apel dacă
funcţia returnează sau nu o valoare.
Apelul unei funcţii poate să apară într-o expresie numai
dacă funcţia returnează o valoare.
Capitolul 9. Functii
Problema 1:
#include<iostream.h>
Prototipul funcției intreg_la_cub
int intreg_la_cub(int);
float real_la_cub(float); Prototipul funcției real_la_cub
a b a b a b
r r r
Problema 2:
Enunţ:
Exemplu:
int main()
{
int a[10][10], i, j, n, u;
cout<<"Dati numarul de linii si coloane n = ";
cin>>n;
cout<<"Dati elementele matricei \n";
for(i=1; i<=n; i++)
for(j=1; j<=n; j++)
cin>>a[i][j];
9.8.1. Funcţii definite de utilizator
cout<<"Matricea data este: \n";
for(i=1; i<=n; i++)
{
for(j=1; j<=n; j++) {
cout.width(4);
cout<<a[i][j];
}
cout<<"\n";
}
u = urma(a,n);
cout<<"Urma matricei este "<<u;
}
9.8. Probleme rezolvate cu ajutorul funcţiilor
9.8.1. Funcţii definite de utilizator
9.8.2. Funcţii de tip void
9.8.2. Funcţii de tip void
Problema 1:
Enunţ:
Să se scrie o funcţie care să rezolve o
ecuaţie de gradul II, unde coeficienţii ecuaţiei
sunt daţi ca parametri.
Funcţia principală va citi coeficienţii a două
ecuaţii şi va afişa soluţiile pentru fiecare
ecuaţie în parte.
#include <iostream.h>
#include <math.h>
void ecuatie(float a, float b, float c)
{
float delta, x1, x2;
delta = b * b – 4 *a* c;
if( delta < 0 ) cout<<"ecuatia are solutii complexe";
else
if( delta == 0 )
{
cout<<"ecuatia are doua radacini egale\n";
x1 = x2 = -b / ( 2 * a );
cout<<"x1= "<<x1<<"\n";
cout<<"x2= "<<x2<<"\n";
}
else
{
x1 = ( -b + sqrt(delta) ) / ( 2 * a );
x2 = ( -b - sqrt(delta) ) / ( 2 * a );
cout<<"ecuatia are urmatoarele radacini: \n";
cout<<"x1= "<<x1<<"\n";
cout<<"x2= "<<x2<<"\n";
}
return;
}
int main()
{
int a1, b1, c1, a2, b2, c2;
cout<<"Dati coeficientii primei ecuatii \n";
cout<<"Dati coeficientul a1 "; cin>>a1;
cout<<"Dati coeficientul b1 "; cin>>b1;
cout<<"Dati coeficientul c1 "; cin>>c1;
ecuatie(a1, b1, c1); Instructiune de apel
cout<<"\n";
cout<<"Dati coeficientii celei de-a doua ecuatie \n";
cout<<"Dati coeficientul a2 "; cin>>a2;
cout<<"Dati coeficientul b2 "; cin>>b2;
cout<<"Dati coeficientul c2 "; cin>>c2;
ecuatie(a2, b2, c2); Instructiune de apel
}
9.8.2. Funcţii de tip void
9.8.2. Funcţii de tip void
Problema 2:
Enunţ:
Se consideră un vector x cu n numere întregi. Să
se verifice dacă x reprezintă o mulţime.
Se vor construi:
– funcţie care să citească vectorul de la tastatură
– o funcţie care să afişeze vectorul
– şi a treia funcţie care să tipărească mesajul
“Vectorul dat reprezinta o multime” sau
“Vectorul dat NU reprezinta o multime”, în caz
contrar.
#include <iostream.h>
int x[100], n;
int main()
{
cout<<"Dati n = ";
cin>>n;
citire(x,n);
afisare(x,n); Instructiuni de apel
multime(x,n);
}
9.8.2. Funcţii de tip void
Functii in C++
Functiile sunt instrumete ale limbajului de programare C++ care permit modularizarea programelor.
Atunci cand se observa ca o anumita secventa de instructiuni se poate repeta de mai multe ori in
cadrul unui program, atunci aceasta se inglobeaza in cadrul unei functii, care urmeaza a se apela in
cadrul programului principal ori de cate ori va fi nevoie.
• declararea functiei
• prototipul functiei
• apelul functiei in cadrul programului principal sau in cadrul altei functii
• parametrii formali ai functiei
• parametrii efectivi ai functiei
• variabile locale vs variabile globale
Pentru ca o functie sa poata fi utilizata (apelata) in cadrul unui program, este nevoie ca aceasta sa fie
declarata.
• tipul functiei
• numele functiei
• lista de parametri formali
Exemplu:
Explicatii:
• void
• unul din tipurile de baza ale variabilelor: char, int, float, etc.
Numele functiei este reprezentat de un sir de caractere alfanumerice prin intermediul careuia functia
va fi recunoscuta pe parcursul progrmului
Lista de parametri formali este constituita dintr-o lista de variabile reprezentand valorile care vor fi
preluate din programul principal si transmise functiei. Parametrii formali sunt niste copii sau alias-uri
ale parametrilor efectivi din apelul functiilor.
Prototipul functiei
In anumite cazuri, este necesar sa lucram cu mai multe functii care se apeleaza reciproc. In aceste
cazuri se se declara prototipul functiilor utilizate, care introduc tipul si numele functiilor, precum si
parametrii cu care acestea opereaza. In felul acesta, atunci can o functie apeleaza pe alta, aceasta va
sti care sunt tipul, numele si parametrii functiei apelate
Prototipul functiei este amplasat inaintea functiei principale, acesta mai putand fi denumit si declaratia
forward a functiei in sine, aceasta fiind declarata dupa functia main.
Prototipul fiunctiei, spre deosebire de declaratia finctiei, se termina cu (;), iar lista parametrilor formali
este optionala, fiind necesar, in schimb, sa se specifice tipul acestora.
Exemplu:
Explicatii:
• numele functiei
• lista de parametri efectivi - constituita dintr-o lista de variabile reprezentand valorile din
programul principal care vor fi transmise functiei pentru a fi prelucrate in scopul producerii unui
anumit rezultat.
• Parametrii formali
o se gasesc la nivelul declaratiei functiilor: int suma (int x, int y);
o preiau valorile date in apelul functiei: suma(a,b) prin intermediul parametrilor efectivi:
valoarea data parametrului efectiv: a (in cadrul programului principal: cin>>a;) - este
transmisa parametrului formal: x, iar valoarea data parametrului efectiv: b (in cadrul
programului principal: cin>>b;) - este transmisa parametrului formal: y
o parametrii formali pot fi considerati niste copii sau alias-uri ale parametrilor efectivi.
• Parametrii efectivi
o se gasesc la nivelul apelului functiei: suma(a,b);
o sunt preluati din cadrul programului apelant (in cazul nostru chiar functia main -
cin>>a; respectiv cin>>b;), valorile acestora transmitandu-se parametrilor formali.
o int suma (int x, int y) - declara functia de tip int avand numele suma, respectiv un
numar de 2 parametri formali de tip int: x si y. Acestia vor prelua valorile variabilelor a
si b transmise in cadrul apelului functiei:
cout<<"Suma patratelor numerelor este: "<<suma(a,b);
o {
int rez=x+y;
return (rez);
}
reprezinta corpul functiei suma - locul unde se prelucreaza (insumeaza) valorile date
(prin variabilele / parametrii formali x, respectiv y si se returneaza rezultatul - rez -
catre programul apelant: functia main.
o void patrat(int *z) - declara functia de tip void avand numele patrat, respectiv un
parametru formal de tip pointer de tip intreg: *z.
o {
*z = *z * *z;
}
• patrat(&a); respectiv patrat(&b); - reprezinta apelul functiei patrat, utilizate pentru a prelucra
cele 2 valori ale celor doua variabile: a si b
• suma(a,b); - reprezinta apelul functiei suma, utilizate pentru calcularea sumei valorilor sticate
in variabilele a si b
Observatie: In cadrul exemplului de mai sus, apelul functiei patrat este un apel prin referinta, in timp
ce apelul functiei suma este un apel prin valoare.
1 #include <iostream>
2 using namespace std; a=2
3 int a, b, s; b=3
4 int suma (int, int); Primul numar la patrat este: 4
5 void patrat(int *); Al doilea numar la patrat este: 9
6 int main() Suma patratelor numerelor este: 13
7 {
8 cout<<"a=";cin>>a;
9 cout<<"b=";cin>>b;
10 patrat(&a);
11 patrat(&b);
12 cout<<"Primul numar la patrat este: "<<a<<endl;
13 cout<<"Al doilea numar la patrat este: "<<b<<endl;
14 cout<<"Suma patratelor numerelor este: "<<suma(a,b);
15 }
16 int suma (int x, int y)
17 {
18 int rez=x+y;
19 return (rez);
20 }
21 void patrat(int *z)
22 {
23 *z = *z * *z;
24 }
Explicatii:
• patrat(&a); respectiv patrat(&b); - reprezinta apelul functiei patrat, utilizate pentru a prelucra
cele 2 valori ale celor doua variabile: a si b
• suma(a,b); - reprezinta apelul functiei suma, utilizate pentru calcularea sumei valorilor sticate
in variabilele a si b
o int suma (int x, int y) - declara functia de tip int avand numele suma, respectiv un
numar de 2 parametri formali de tip int: x si y. Acestia vor prelua valorile variabilelor a
si b transmise in cadrul apelului functiei:
cout<<"Suma patratelor numerelor este: "<<suma(a,b);
o {
int rez=x+y;
return (rez);
}
reprezinta corpul functiei suma - locul unde se prelucreaza (insumeaza) valorile date
(prin variabilele / parametrii formali x, respectiv y si se returneaza rezultatul - rez -
catre programul apelant: functia main.
o {
*z = *z * *z;
}
Asa cum am mai mentionat si in cadrul capitolului Variabile si tipuri de date, pentru a rezolvarea
problemelor avem nevoie de variabile, in functie de locul in care sunt declarate, acestea clasificandu-
se in:
• variabile globale
• variabile locale
Variabilele globale sunt variabilele declarate in afara functiei main, si sunt "recunoscute" atat in
programul principal cat si in functiile adiacente acestuia. Variabilele globale sunt initailizate in
momentul declararii cu valoarea 0.
Variabilele locale sunt variabilele declarate in interiorul unei functii (inclusiv in nteriorul functiei main)
si sunt "recunoscute" doar la nivelul functiilor in care acestea au fost declarate. In absenta unei
initializari prealabile, valoarea unei variabile locale este una aleatoare, aflata la momentul respctiv la
adresa de memorie corespunzatoare variabilei declarate.
1 #include <iostream>
2 using namespace std; 4286094
3 int a, b; 0
4 int suma (int x, int y) 0
5 { a=2
6 int rez=x+y; b=3
7 //cout<<s; Suma numerelor este: 5
8 return (rez); 4286094
9 }
10 int main()
11 {
12 int s;
13 cout<<s<<endl;
14 cout<<a<<endl;
15 cout<<b<<endl;
16 cout<<"a=";cin>>a;
17 cout<<"b=";cin>>b;
18 cout<<"Suma numerelor este: "<<suma(a,b)<<endl;
19 //cout<<rez;
20 cout<<s<<endl;
21 }
Explicatii:
CUPRINS
Generalităţi 1
Cap.2 Conţinutul unui program 4
2.1. Spaţiul de lucru în Mathcad 4
2.2. Regiuni 6
2.3. Completarea spaţiilor text 9
Cap.3 Managementul foilor de lucru 10
3.1. Foi de lucru şi modele 10
3.2. Modificarea aspectului foilor de lucru 12
3.3. Dimensionarea foilor de lucru 13
3.4. Protecţia spaţiilor pe foia de lucru 16
3.5. Superlegături 18
3.6. Printarea şi expedierea foilor de lucru 19
Cap.4 Lucrul cu structuri text 21
4.1. Inserarea textelor 21
4.2. Proprietăţile structurilor text 23
4.3. Stilul structurilor text 24
4.4. Ecuaţii în structuri text 26
4.5. Căutarea şi înlocuirea în structurile text 27
Cap.5 Lucrul cu structuri matematice 29
5.1. Calcule simple 29
5.2. Crearea ecuaţiilor simple în Mathcad 30
5.3. Inserarea numerelor, variabilelor, vectorilor, matricilor,
31
şirurilor de caractere, operatorilor
5.4. Crearea expresiilor matematice 37
5.5. Editarea expresiilor matematice 40
5.6. Calcule iterative 43
5.7. Stilul elementelor matematice 46
Cap.6 Operatori 48
6.1. Operatori booleeni 48
6.2. Operatori pentru vectori şi matrici 49
6.3. Operatori tip sumă şi produs 51
6.4. Operatori pentru derivare numerică 52
6.5. Operatori pentru integrare numerică 53
Cap.7 Funcţii 56
I
MATHCAD - proiectare interactivă şi prelucrarea datelor experimentale
II
Generalităţi
GENERALITĂŢI
− b + b2 − 4 ⋅ a ⋅ c (1.2)
x=
2⋅a
1
MATHCAD - proiectare interactivă şi prelucrarea datelor experimentale
Tabelul 1.1
Pro şi
Facilitatea oferită Standard
Academic
Calcul matematic
- calcul vectorial şi matricial * *
- rezolvarea ecuaţiilor şi sistemelor de
ecuaţii liniare, neliniare şi diferenţiale * *
- rezolvarea ecuaţiilor şi sistemelor de
ecuaţii cu derivate parţiale
*
- calcul derivaţional şi integral * *
- calcul polinomial * *
- evaluarea funcţiilor Airy, Bessel-Kelvin,
Bessel sferice etc. *
- calcul statistic * *
- calcul de optimizare * *
- recunoaşterea diferitelor sisteme de
unităţi de măsură (SI, MKS, CGS) * *
- livrarea rezultatelor în format zecimal,
binar, octal sau hexazecimal
* *
- lucrul cu seturi de date * *
Import - export
- introducerea ecuaţiilor în sintaxă
matematică, cu interfaţă vizuală * *
- interoperabilitate cu alte programe de calcul
matematic (Excel, Matlab etc.) *
- utilizarea automatizărilor bazate pe OLE
pentru dezvoltarea aplicaţiilor complexe *
2
Generalităţi
Grafică
- crearea reprezentărilor grafice 2D şi 3D * *
- crearea animaţiilor * *
- crearea reprezentărilor grafice 3D multiple * *
- înalt grad de personalizare a reprezentărilor * *
grafice
Programare
- crearea de librăriilor de funcţii personale *
- utilizarea procedurilor iterative, recursive şi
condiţionale *
- definirea structurilor complexe de date (tablorui,
string-uri etc.)
*
- importarea funcţiilor scrise în C sau C++ *
- crearea sintaxelor bazate pe simboluri personale *
3
MATHCAD - proiectare interactivă şi prelucrarea datelor experimentale
CAPITOLUL 2
CONŢINUTUL UNUI PROGRAM
Fig. 2.1
Fereastra de lucru pentru Mathcad
meniuri derulante, bare de unelte şi zona de lucru - corespunzătoare unei foi
de lucru.
Barele de unelte conţin butoane ce permit accesarea grafică a unor
serii de comenzi ale programului, ele putând fi vizibile sau invizibile.
Comenzile respective sunt organizate în mai multe categorii, fiecăreia
corespunzându-i o bara de unelte unică. Cele mai importante sunt:
4
Conţinutul unui program
2.2. Regiuni
6
Conţinutul unui program
a) b) c)
Fig. 2.5
Regiuni în Mathcad
a) început de regiune; b) regiune tip text; c) regiune tip calcul matematic
7
MATHCAD - proiectare interactivă şi prelucrarea datelor experimentale
8
Conţinutul unui program
CAPITOLUL 3
MANAGEMENTUL FOILOR DE LUCRU
11
MATHCAD - proiectare interactivă şi prelucrarea datelor experimentale
12
Managementul foilor de lucru
Fig. 3.5
Fereastra de control pentru fundalul
regiunilor
16
Managementul foilor de lucru
17
MATHCAD - proiectare interactivă şi prelucrarea datelor experimentale
3.5. Superlegături
19
MATHCAD - proiectare interactivă şi prelucrarea datelor experimentale
20
Lucrul cu structuri text
CAPITOLUL 4
LUCRUL CU STRUCTURI TEXT
21
MATHCAD - proiectare interactivă şi prelucrarea datelor experimentale
a) b) c) d)
Fig. 4.1
Introducerea unei litere greceşti în text
a) poziţionarea cursorului; b) activarea barei Greek; c) alegerea literei; d) textul
după introducere
La introducerea unei secvenţe de text într-o regiune aceasta îşi
ajustează automat dimensiunea după lungimea textului, fiind limitată numai
de marginile foii de lucru respective. Pentru prestabilirea unei dimensiuni
fixe a regiunii în care se introduce textul se procedează în felul următor: se
introduce secvenţa de text până la lungimea dorită şi apoi, după introducerea
unui spaţiu, se apasă combinaţia de taste Ctrl şi Enter, figura 4.2. În acest
mod lungimea regiunii devine fixă, textul fiind automat aliniat în rânduri
succesive.
Modificarea ulterioară a
dimensiunilor regiunii se poate face
a)
prin utilizarea punctelor de
redimensionare specifice.
b) Dacă se doreşte ca textul să
ocupe toată suprafaţa foii de lucru
Fig. 4.2 se execută, cu regiunea respectivă
Dimensionarea regiunilor tip text selectată, comanda Properties din
a) stabilirea lungimii dorite; meniul Format. Comanda are ca
b) fixarea prin combinaţia Ctrl şi Enter efect deschiderea unei ferestre de
dialog (figura 4.3) cu două pagini,
22
Lucrul cu structuri text
a) b)
Fig. 4.3
Fereastra de dialog activată de comanda Format - Properties, pentru regiuni text:
a) pagina pentru selectarea culorii de fundal;
b) pagina pentru dispunerea textului pe lăţimea foii de lucru
23
MATHCAD - proiectare interactivă şi prelucrarea datelor experimentale
24
Lucrul cu structuri text
a) b)
Fig. 4.7
Ferestre activate la crearea şi modificarea stilurilor de text
a) pentru crearea unui stil nou; b) pentru modificarea unui stil existent
25
MATHCAD - proiectare interactivă şi prelucrarea datelor experimentale
stil de bază (ales din lista celor existente) căruia i se modifică sau i se
adaugă elemente. Alegerea stilului de bază se poate face utilizând câmpul
Based On, activ în ambele ferestre.
a) b) c)
Fig. 4.8
Introducerea ecuaţiilor în text
a) regiune de tip text; b) activarea regiunii matematice; c) revenirea la regiunea text
26
Lucrul cu structuri text
28
Lucrul cu structuri matematice
CAPITOLUL 5
LUCRUL CU STRUCTURI MATEMATICE
458+589*(969/69sqrt789)=752,477 (5.1)
29
MATHCAD - proiectare interactivă şi prelucrarea datelor experimentale
a) b) c)
d) e)
Fig. 5.2
Aspecte grafice ale etapelor de calcul în Mathcad
În figura 5.2c este reprezentată relaţia după apăsarea butonului =
din bara de unelte Arithmetic. Cele două elemente de substituire reprezintă
poziţia rezultatului şi, respectiv, unităţilor de măsură corespunzătoare.
Rezultatul numeric este afişat în momentul părăsirii regiunii (executare clic
stânga-mouse în afara acesteia), figura 5.2e.
În cazul folosirii tastei "=" în locul butonului din bara de unelte
Arithmetic, se obţine rezultatul prezentat în figura 5.2d.
În situaţia afişării elementelor de substituire pentru rezultat şi
unităţi de măsură, formatul de prezentare al acestora poate fi modificat cu
ajutorul comenzilor Result Format şi, respectiv, Insert Unit, accesibile fie
din meniurile Format, respectiv Insert, fie prin executarea unui dublu clic
stânga-mouse pe elementul corespunzător.
O relaţie finalizată (figura 5.2e) poate fi modificată prin editare
(clic stânga-mouse în zona regiunii respective) şi ştergere sau adăugare de
componente. Pentru o nouă evaluare trebuie folosită fie tasta "=" fie butonul
corespunzător din bara Arithmetic.
32
Lucrul cu structuri matematice
a) b) c)
Fig. 5.6
Introducerea tablourilor cu ajutorul comenzii Matrix
a) activarea comenzii; b) fereastra de dialog; c) tabloul introdus
33
MATHCAD - proiectare interactivă şi prelucrarea datelor experimentale
34
Lucrul cu structuri matematice
în cele două câmpuri din partea inferioară a ferestrei sunt afişate expresia
matematică a funcţiei selectate şi, respectiv, o scurtă explicaţie referitoare la
efectele acesteia.
Nume de variabile şi funcţii definite de utilizator pot cuprinde:
litere majuscule şi minuscule, cifrele de la 0 la 9, simbolul _ (underscore),
simbolul ` (prime - a se remarca diferenţa faţă de apostrof - '), simbolul % şi
literele greceşti.
La definirea numelor variabilelor şi funcţiilor trebuie respectate
următoarele reguli:
- un nume nu poate începe cu o cifră (tot ce începe cu cifre este
interpretat de Mathcad ca un număr);
- simbolul ∞ poate apare într-un nume numai pe prima poziţie;
- toate caracterele introduse după punct sunt tratate ca indecşi;
- toate caracterele dintr-un nume trebuie să aibă acelaşi font,
mărime şi stil;
- Mathcad-ul nu poate diferenţia variabilele de funcţii după nume.
Deci, nu pot fi definite variabile şi funcţii cu acelaşi nume (de exemplu
funcţia f(x) şi variabila f);
- numele funcţiilor implicite pot fi redefinite dar după această
operaţie numele implicite nu mai sunt recunoscute.
- literele greceşti pot apare în orice nume, pe orice poziţie;
Pentru introducerea literelor greceşti Mathcad-ul dispune de un
tablou cu butoane, literele fiind introduse prin apăsarea corespunzătoare a
acestora. Activarea tabloului poate fi făcută
cu ajutorul butonului corespunzător din
bara Math, figura 5.10.
Înscrierea caracterelor la index în
numele variabilelor şi funcţiilor se face
prin tastarea anterioară a caracterului punct.
Nu este recomandabilă folosirea la index a
tablourilor, acestea având cu totul altă
semnificaţie atunci când sunt trecute la
index.
Numerele, variabilele şi funcţiile
sunt legate între ele, pentru a alcătui
expresii matematice, cu ajutorul
Fig. 5.10
operatorilor matematici.
Activarea tabloului cu litere
greceşti
36
Lucrul cu structuri matematice
37
MATHCAD - proiectare interactivă şi prelucrarea datelor experimentale
a)
b)
Fig. 5.15
Asigurarea precedenţei operaţiilor
a) cu ajutorul parantezelor; b) prin deplasarea manuală a cursorului.
mare de operanzi.
Pentru eliminarea ambiguităţilor referitoare la precedenţa
operaţiilor se pot folosi parantezele sau deplasarea manuală a cursorului în
interiorul expresiei, figura 5.15. Pentru exemplificarea celor arătate mai sus,
în figura 5.16 se prezintă etapele de introducere pentru o expresie cu un
nivel ridicat de complexitate.
38
Lucrul cu structuri matematice
a)
b)
Fig. 5.16
Etapele introducerii unei expresii matematice complexe în Mathcad
a) expresia matematică; b) etape de introducere.
39
MATHCAD - proiectare interactivă şi prelucrarea datelor experimentale
a)
b)
Fig. 5.20
Manipularea cursorului tip linie de editare în scopul marcării expresiilor:
a) efectul apăsărilor succesive pe tasta Space;
b) efectul apăsării tastei Insert şi apoi a apăsării repetate a tastei Space.
41
MATHCAD - proiectare interactivă şi prelucrarea datelor experimentale
Fig. 5.21.
Introducerea unui operator (adunare) ce are drept operand o porţiune de expresie
matematică
Pentru ştergerea unui operator dintr-o expresie matematică se
procedează în acelaşi mod ca la ştergerea unui caracter, prin manipularea
adecvată a cursorului şi utilizarea tastelor Backspace şi Delete De remarcat
faptul că, în cazul operatorului de împărţire, direcţiile de acţiune ale celor
două taste sunt mai puţin evidente decât în cazul celorlalţi operatori, figura
5.22.
Deşi Mathcad-ul introduce
automat paranteze ori de câte ori este
necesar pentru a asigura precedenţa
a) b) operatorilor (cum este în cazul
Fig. 5.22 introducerii unui operator nou într-o
Poziţionarea cursorului la ştergerea expresie matematică), uneori apare
operatorului de împărţire: necesitatea introducerii acestora de
a) folosind tasta Delete;
către utilizator. În acest scop pot fi
b) folosind tasta Backspace.
folosite două metode, fie introducerea
pe rând a parantezelor cu ajutorul
tastaturii (la începutul şi, respectiv, sfârşitul expresiei), fie marcarea
expresiei respective şi apăsarea butonului corespunzător parantezelor din
bara de unelte Arithmetic, figura 5.23. Se recomandă utilizarea celei de-a
doua metode, evitându-se astfel inserarea de paranteze fără pereche.
Pentru ştergerea parantezelor se procedează la fel ca în cazul
ştergerii caracterelor, poziţionându-se cursorul înainte sau după o paranteză
şi folosind, corespunzător, tastele Backspace şi Delete. De remarcat faptul
că Mathcad-ul şterge automat şi paranteza pereche.
Prin editare este posibilă şi transformarea unei porţiuni de expresie
matematică în argument pentru diferite funcţii. În acest scop, expresia
respectivă va fi marcată, va fi inclusă între paranteze, vor fi marcate şi
parantezele şi se va duce linia verticală a cursorului în partea stângă (prin
42
Lucrul cu structuri matematice
a)
b)
Fig. 5.27
Definirea variabilelor domeniu:
a) elemente introduse de la tastatură; b) elemente afişate în foia de lucru
44
Lucrul cu structuri matematice
a) b) c)
Fig. 5.29
Definirea şi evaluarea ecuaţiilor în Mathcad
De remarcat că, pentru evaluarea corectă a funcţiilor, este necesar
ca variabilele argument să fie definite anterior utilizării lor adică regiunile în
45
MATHCAD - proiectare interactivă şi prelucrarea datelor experimentale
care acestea sunt definite să fie amplasate mai sus sau mai la dreapta faţă de
regiunea funcţiei respective.
46
Lucrul cu structuri matematice
47
MATHCAD - proiectare interactivă şi prelucrarea datelor experimentale
CAPITOLUL 6
OPERATORI
48
Operatori
- "diferit" (figura 6.2f), dacă primul operand nu este egal cu cel de-
al doilea întoarce rezultatul "true".
În foia de lucru rezultatele "true şi "false" apar sub formă numerică
binară (1 şi, respectiv 0).
Operatorii booleeni "mai mare", "mai mic", "mai mare sau egal" şi
"mai mic sau egal" nu pot fi utilizaţi cu operanzi numere complexe, în
mulţimea numerelor complexe aceste concepte nu au sens.
Mathcad-ul poate utiliza operatorii booleeni pentru compararea
şirurilor de caractere. Comparaţia se execută caracter cu caracter, funcţie de
codul ASCII corespunzător.
49
MATHCAD - proiectare interactivă şi prelucrarea datelor experimentale
- A*v (produsul
dintre un vector şi o matrice
a) b) c) d) e) f) - figura 6.4a), numărul
coloanelor matricei A
trebuie să fie egal cu
numărul liniilor
g) h) i) j) k) l) (elementelor) vectorului v;
- A/z (împărţirea cu
Fig. 6.4 un scalar - figura 6.4b), se
Operatori pentru vectori şi matrici împarte fiecare element al
matricei A cu scalarul z,
rezultatul este o matrice;
- A+B (adunarea vectorilor sau matricilor - figura 6.4c), se adună
cele două tablouri element cu element, ele trebuind să aibă acelaşi număr de
linii şi coloane;
- A+z (adunarea cu un scalar - figura 6.4c), se adună elementele
matricei A cu scalarul z;
- A-B (scăderea vectorilor sau matricelor - figura 6.4d), se scad cele
două tablouri element cu element, ele trebuind să aibă acelaşi număr de linii
şi coloane;
- A-z (scăderea cu un scalar - figura 6.4d), se scade scalarul z din
fiecare dintre elementele matricei A;
- -A (schimbarea semnului unui vector sau matrice - figura 6.4d), se
schimbă semnul fiecărui element al tabloului A;
- Mn (ridicarea vectorilor sau matricelor la putere - figura 6.4e), se
ridică la puterea n matricea M, folosind produsul de matrici; M-1 reprezintă
inversul matricei M, alte numere negative folosite pentru exponent
conducând la puterile corespunzătoare ale matricei inverse;
- |v| (modulul unui vector - figura 6.4f), calculat ca radical din
produsul vectorului cu conjugatul complex al acestuia;
- |M| (determinantul - figura 6.4f), matricea M trebuie să fie pătrată;
- AT (transpusa - figura 6.4g), calculează transpusa matricei A,
schimbând rândurile cu coloanele acesteia;
- u x v (produs vectorial - figura 6.4h), calculează produs vectorial
al celor doi vectori;
- u+v (suma vectorială - figura 6.4i), calculează suma vectorială a
două tablouri;
- vectorizare (figura 6.4j), toate operaţiile efectuate cu matrice
respectivă sunt efectuate element cu element;
50
Operatori
51
MATHCAD - proiectare interactivă şi prelucrarea datelor experimentale
În cazul utilizării
operatorilor sumă şi produs,
Mathcad-ul ia în considerare
a) b) c) d)
fiecare valoare a indexului
Fig. 6.8 specificat de utilizator. Prin
Utilizarea operatorilor cu index real folosirea adecvată a operatorilor
booleeni se poate limita execuţia
operaţiei la anumite valori ale
indexului (figura 6.9).
a) b) c)
Fig. 6.9
Folosirea operatorilor booleeni pentru limitarea
evaluării sumelor:
a) definirea variabilei domeniu; b) definirea
funcţiei: c) evaluarea funcţiei
a) b) c) d)
Fig. 6.12
Utilizarea operatorului pentru derivare numerică de ordin superior
a) definirea funcţiei; b) stabilirea valorii de derivare; c) introducerea operatorului;
d) determinarea valorii numerice
a) b) c) d)
Fig. 6.13
Utilizarea operatorului pentru integrare numerică definită
a) definirea funcţiei; b) stabilirea valorii de integrare; c) introducerea
operatorului; d) determinarea valorii numerice
53
MATHCAD - proiectare interactivă şi prelucrarea datelor experimentale
a) b) c)
d) e)
Fig. 6.15
Utilizarea operatorului pentru integrare numerică cu limite variabile
a) definirea funcţiei; b) stabilirea valorii de integrare; c) definirea variabilei domeniu;
d) introducerea operatorului; e) determinarea valorii numerice.
54
Operatori
a) b) c)
d) e)
Fig. 6.16
Evaluarea numerică a integralelor duble
a) definirea variabilelor de integrare; b) definirea funcţiei; c) introducerea
operatorului (dublu); d) completarea elementelor de substituire; e) evaluare.
55
MATHCAD - proiectare interactivă şi prelucrarea datelor experimentale
CAPITOLUL 7
FUNCŢII
Funcţii trigonometrice
Tab. 7.1
Funcţia Acţiune
întoarce valoarea pozitivă (în radiani) a
1. angle(x,y) unghiului dintre axa 0-x şi punctul de
coordonate (x,y)
2. cos(x) întoarce valoarea cosinusului pentru x
3. sin(x) întoarce valoarea sinusului pentru x
4. tan(x) întoarce valoarea tangentei pentru x
5. cot(x) întoarce valoarea cotangentei pentru x
întoarce valoarea secantei pentru x
6. sec(x)
(sec(x)=1/cos(x))
7. csc(x) întoarce valoarea cosecantei pentru x
întoarce valoarea unghiului a cărui cosinus
8. acos(x)
este x
întoarce valoarea unghiului a cărui sinus este
9. asin(x)
x
întoarce valoarea unghiului a cărui tangentă
10. atan(x)
este x
întoarce valoarea pozitivă (în radiani)a
11. atan2(x) unhgiului dintre axa axa 0-x şi punctul de
coordonate (x,y)
56
Funcţii
Funcţii exponenţiale
Tab. 7.2
Funcţia Acţiune
întoarce valoarea constantei e ridicată la
1. exp(x)
puterea x
2. ln(x) întoarce valoarea logaritmului natural din x
întoarce valoarea logaritmului de bază b din
3. log(x, [b]) x (dacă b lispeşte, se întoarce valoarea
logaritmului zecimal)
Funcţii de rotunjire
Tab. 7.4
Funcţia Acţiune
întoarce valoarea celui mai mic întreg mai
1. ceil(x)
mare sau egal cu x
întoarce valoarea celui mai mare întreg mai
2. floor(x)
mic sau egal cu x
întoarce valoarea numărului x rotunjită cu n
3. round(x, n)
zecimale
5. trunc(x) întoarce partea întreagă a numărului x
57
MATHCAD - proiectare interactivă şi prelucrarea datelor experimentale
Funcţii logice
Tab. 7.5
Funcţia Acţiune
întoarce valoarea a, dacă condiţia cond este "true"
1. if(cond, a, b)
şi valoarea b dacă condiţia cond este "false"
funcţia delta a lui Kronecker, întoarce valoarea 1
2. (a, b)
dacă a = b şi valoarea 0 în rest (a şi b întregi)
tensorul antisimetric complet de rangul trei (i, j, k
trebuie să fie întregi şi cuprinse între 0 şi 2),
3. (i, j, k) întoarce valoarea 0 dacă sunt două argumente
egale, valoarea 1 pentru permutări pare şi -1
pentru permutări impare
funcţia lui Hearviside, întoarce 1 dacăx este mai
5. (x)
mare sau egal cu 0 şi 0 în rest
întoarce valoarea 0 dacă x = 0, valoarea 1 dacă x
6. sign(x)
> 0 şi -1 în rest
Tab. 7.6
Funcţia Acţiune
întoarce numărul combinaţiilor de n luate câte k,
1. combin(n, k)
n şi k întregi, cu n cuprins între 0 şi k
întoarce numărul permutărilor de n luate câte k, n
2. permut(n, k)
şi k întregi, cu n cuprins între 0 şi k
3. gcd(A) întoarce cel mai mare divizor comun
4. lcm(A) întoarce cel mai mic multiplu comun
5. mod(x, y) întoarce valoarea restului împărţirii lui x cu y
58
Funcţii
Funcţii speciale
Tab. 7.7
Funcţia Acţiune
1. erf(x) întoarce valoarea funcţiei de eroare în x, x real
întoarce valoarea complementului funcţiei de
2. erfc(x)
eroare în x, x real
întoarce valoarea funcţiei hypergeometrice
3. fhyper(a, b, c, x)
Gauss în punctul x, fiind daţi parametrii a, b, c
întoarce valoarea funcţiei clasice gamma-
4. Γ(x) Euler, pentru numere reale sau complexe,
nedefinită pentru x < 0
întoarce valoarea funcţiei extinse gamma-
5. Γ(x, y)
Euler, pentru numere reale, pozitive
întoarce valoarea polinomului lui Hermite de
6. Her(n, x)
gradul n în x
întoarce valoarea funcţiei beta incomplete
7. ibeta(a, x, y)
pentru x şi y cu parametrul a
întoarce valoarea polinomului lui Jacobi de
8. Jac(n, a, b, x)
grad n în x cu parametrii a şi b
întoarce valoarea polinomului lui Laguerre de
9. Lag(n, x)
grad n în x
întoarce valoarea polinomului lui Legendre de
10. Leg(n, x)
grad n în x
întoarce valoarea funcţiei hypergeometrice
11. mhyper(a, b, x) confluente în punctul x, fiind daţi parametrii a,
b
întoarce valoarea polinomului lui Chebyshev
12. Tcheb(n, x)
de grad n, de prim aspect, în x
întoarce valoarea polinomului lui Chebyshev
13. Ucheb(n, x)
de grad n, de aspect secund, în x
59
MATHCAD - proiectare interactivă şi prelucrarea datelor experimentale
60
Funcţii
62
Funcţii
foia de lucru de definirea unei valori iniţiale pentru x. Funcţia face evaluări
succesive şi întoarce rezultatul în momentul în care două evaluări sunt mai
apropiate de valoarea variabilei implicite Tol.
Mathcad-ul include o serie de rutine deosebit de eficiente pentru
rezolvarea sistemelor liniare şi optimizare. Pot fi tratate următoarele tipuri
de probleme:
- sisteme liniare de ecuaţii cu egalităţi sau cu inegalităţi;
- sisteme neliniare de ecuaţii;
- optimizarea unei funcţii obiectiv (maximizare sau minimizare);
- optimizarea unei funcţii obiectiv pornind de la condiţii iniţiale;
În funcţie de varianta programului Mathcad numărul de
necunoscute variază: pentru varianta profesională maximum 200 de
variabile în sisteme neliniare şi maximum 500 de variabile în sisteme liniare
Metoda optimă de a optimiza sistemele de ecuaţii este de ale
introduce într-un "bloc de optimizare".
Un bloc de optimizare poate fi creat prin parcurgerea a patru etape:
- Furnizarea unei valori iniţiale previzionate pentru fiecare dintre
necunoscute. Mathcad-ul rezolvă ecuaţiile pe cale iterativă, căutând o
convergenţă către soluţia corectă. Furnizarea unei valori iniţiale constituie
punctul de plecare pentru procesul iterativ.
- Introducerea cuvântului Given, într-o regiune matematică
separată, amplasată sub valorile iniţiale ale necunoscutelor.
- Introducerea condiţiilor iniţiale sub cuvântul Given, folosind
operatorii booleeni.
- Introducerea ecuaţiilor ce include una dintre funcţiile de
optimizare (prezentate în tabelul 7.10) sub condiţii.
În procesul de rezolvare Mathcad-ul urmăreşte încadrarea în două
toleranţe:
- toleranţa de convergenţă, se calculează valorile succesive până
când diferenţa dintre două valori este mai mică decât valoarea variabilei
implicite Tol;
- toleranţa impusă de condiţiile iniţiale, determinată de valoarea
variabilei implicite Ctol.
Ca şi în cazul integrării numerice şi în rezolvarea ecuaţiilor
Mathcad-ul foloseşte o serie de metode aproximative, alegerea metodei
optime fiind implicită. Dacă se doreşte impunerea unui anumit algoritm de
rezolvare, se poate valida opţiune corespunzătoare în meniul contextual
accesibil prin click dreapta-mouse pe blocul de optimizare
63
MATHCAD - proiectare interactivă şi prelucrarea datelor experimentale
Funcţii de optimizare
Tab. 7.10
Funcţia Acţiune
întoarce valorile x0, x1.. ce satisfac
1. Find(x0, x1, ..)
condiţiile dintr-un bloc de optimizare
întoarce valorile x0, x1.. ce conduc la
2. Maximize(f, x0, x1…)
valori maxime ale funcţiei f
întoarce valorile x0, x1.. ce conduc la
3. Minimize(f, x0, x1..)
valori minime ale funcţiei f
întoarce valorile x0, x1.. ce se apropie
4. Minerr(x0, x1..) cel mai mult de realizarea condiţiilor
dintr-un bloc de optimizare
Funcţii statistice
Tab. 7.11
Funcţia Acţiune
întoarce coeficientul de corelaţie Pearsons
1. corr(A, B)
pentru tablourile A şi B
întoarce covariantul elementelor tablourilor A şi
2. cvar(A, B)
B
întoarce media geometrică a elementelor
3. gmean(A)
tabloului A
întoarce un vector ce reprezintă frecvenţa cu car
4. hist(int, A) valorile din A se regăsesc în intervalele
reprezentate de vectorul int
întoarce media armonică a elementelor tabloului
5. hmean(A)
A
întoarce media aritmetică a elementelor
6. mean(A)
tabloului A
64
Funcţii
65
MATHCAD - proiectare interactivă şi prelucrarea datelor experimentale
Funcţii de interpolare
Tab. 7.12
Funcţia Acţiune
întoarce un vector al coeficienţilor unei
1. bspline(vx, vy, u, n) curbe spline de grad n, utilizat în funcţia
interp
întoarce un vector al coeficienţilor unei
2. cspline(vx, vy)
curbe spline cubice, utilizat în funcţia interp
întoarce valoarea interpolată y
corespunzătoare argumentului x, vs este un
3. interp(vs, vx, vy, x) vector cu rezultate intermediare obţinute
prin evaluări bspline, cspline, lspline sau
pspline
utilizează datele din vectoriivx şi vy pentru a
4. linterp(vx, vy, x) întoarce o valoare interpolată liniar y
corespunzătoare argumentului x
întoarce un vector al coeficienţilor unei
5. lspline(vx, vy)
curbe spline cubice, utilizat în funcţia interp
întoarce q valori prezise pe baza a p valori
6. predict(v, p, q)
consecutive din vectorul v
întoarce un vector al coeficienţilor unei
7. pspline(vx, vy)
curbe spline cubice, utilizat în funcţia interp
unde:
y = un vector cu n valori iniţiale, unde n este ordinul ecuaţiei sau
mărimea sistemului de ecuaţii rezolvat;
x1, x2 = punctele de capăt ale intervalului pe care se va evalua
soluţia ecuaţiei;
npoints = numărul de puncte dincolo de punctul initial în care
soluţia va fi aproximată;
D(x,y) = un vector cu n elemente, acestea fiind derivatele de
ordinul întâi ale funcţiilor necunoscute.
În cazul rezolvării ecuaţiilor de ordin superior apar unele diferenţe
faţă de situaţia precedentă:
- vectorul valorilor iniţiale y are acum două componente - valorile
funcţiei şi valorile primei derivate în punctele iniţiale, x1;
- funcţia D(t, y) are de asemenea două componente;
- matricea soluţiilor conţine acum trei coloane, cea din stânga
pentrui valorile t, cea din mijloc pentru valorile y(t) şi cea din dreapta pentru
valorile y'(t).
Rezolvarea sistemelor de ecuaţii diferenţiale este foarte
asemănătoare cu rezolvarea ecuaţiilor de ordin superior. În prima etapă
trebuie definit un vector conţinând valorile iniţiale pentru fiecare funcţie
necunoscută.
68
Funcţii
Funcţii de expresii
Tab. 7.16
Funcţia Acţiune
întoarce 1 dacă x este o matrice sau un
1. lsArray(x)
vector şi 0 în rest
întoarce 1 dacă x este un număr real
2. lsScalar(x)
sau complex şi 0 în rest
întoarce 1 dacă x este un şir de
3. lsString(x)
caractere şi 0 în rest
întoarce un şir de caractere obţinut prin
4. concat(S1, S2, [S3,..])
concatenarea argumentelor
întoarce un şir sub forma unui mesaj de
5. error(S)
eroare
întoarce un şir de caractere obţinut prin
6. num2str(x) convertirea numărului real sau complex
x în valoare decimală
întoarce un vector de coduri ASCII
7. str2vec(S)
corespunzătoare caracterelor din şirul S
întoarce poziţie de început a subşirului
8. search(S, S1, n)
S1 din şirul S, începând cu poziţia n
întoarce numărul de caractere din şirul
9. strien(S)
S
69
MATHCAD - proiectare interactivă şi prelucrarea datelor experimentale
70
Vectori, matrici, tablouri de date
CAPITOLUL 8
VECTORI, MATRICI, TABLOURI DE DATE
Matlab. Excel etc.) şi calea către locaţia unde se află acesta în memoria
calculatorului gazdă.
De remarcat faptul că matricile
astfel create nu sunt incluse efectiv în
foia de lucru, ele fiind re-importate din
fişierul sursă la fiecare recalculare a
documentului respectiv.
O altă posibilitate oferită de
a) b) c) Mathcad pentru crearea tablourilor de
date este introducerea elementelor
Fig. 8.2 componente ale acestora în tabele
Definirea unei matrici cu ajutorul
variabilelor domeniu
corespunzătoare. Pentru aceasta, în lista
a) declararea variabilelor; b) ecuaţia afişată în fereastra activată de comanda
elementelor matricei; c) matricea Insert - Object se validează opţiunea
rezultată Input Table. După apăsarea butonului
Finish în foaia de lucru este inserată o
regiune ce conţine un element de substituţie (ca nume de variabilă) şi un
tabel (figura 8.3). Prin atribuirea unui nume şi completarea celulelor
tabelului se obţine o variabilă corespunzătoare unui tablou de date cu
elementele identice cu cele introduse în tabel. Deplasarea în tabel se poate
face cu ajutorul tastelor săgeţi, dimensiunile acestuia crescând corespunzător
cu numărul valorilor introduse.
Celulele tabelului pot fi editate prin executarea unui click stânga-
mouse în celula respectivă.
a) b)
Fig. 8.3
Introducerea tablourilor de date prin tabele
a) tabel introdus în foia de lucru de comanda Input Table; b) tabel cu celule
editate
Comanda Input Table poate fi utilizată pentru importarea unică a
datelor dintr-un fişier extern. Pentru aceasta, după introducerea tabelului în
foaia de lucru şi atribuirea numelui variabilei corespunzătoare, din meniul
contextual (accesibil executând click dreapta-mouse pe tabel) se alege
72
Vectori, matrici, tablouri de date
a) b) c)
Fig. 8.4
Accesarea individuală a elementelor unui tablou de date
a) tablou de date; b) indici cu valori incorecte; c) indici cu valori corecte
Accesarea unor grupuri de elemente este posibilă prin utilizarea ca
indici a unor variabile domeniu corespunzătoare. În acest mod se poate
accesa numai o întreagă coloană sau numai un întreg rând dintr-un tablou.
a) b) c) d) e)
Fig. 8.5
Efectuarea de calcule individuale cu elementele tablourilor de date
a) definirea tablourilor; b) definirea ecuaţiei şi sublinierea cu ajutorul liniei de editarea
produsului de tablouri; c) accesarea operatorului Vectorize; d) ecuaţia cu operatorul
aplicat; e) tabloul rezultat.
Operatorul Vectorize are o serie de proprietăţi specifice:
- modifică semnificaţia operatorilor incluşi - obligă Mathcad-ul să
efectueze operaţiile cu scalari, element cu element;
- impune folosirea operanzilor cu structuri identice (acelaşi număr
de linii şi coloane;
74
Vectori, matrici, tablouri de date
75
MATHCAD - proiectare interactivă şi prelucrarea datelor experimentale
CAPITOLUL 9
FORMATAREA REZULTATELOR
77
MATHCAD - proiectare interactivă şi prelucrarea datelor experimentale
Fig. 9.4
Fereastra corespunzătoare comenzii Result Format
80
Lucrul cu grafice şi obiecte
CAPITOLUL 10
LUCRUL CU GRAFICE ŞI OBIECTE
a) b)
Fig. 10.2
Elemente de control ale graficelor 2D
82
Lucrul cu grafice şi obiecte
În fereastra următoare
(figura 10.3c), deschisă prin
apăsarea butonului Next, se pot
alege diferite variante de colorare
a graficului: corelarea culorii cu
valorile ecuaţiei reprezentate,
Color by height, variaţia
luminozităţii, color using lighting a)
sau colorarea fără umbre, Solid
color.
Odată cu apăsarea
butonului Next, în foaia de lucru,
la poziţia curentă a cursorului,
este introdusă o regiune ce
conţine un grafic 3D. Pe grafic
sunt reprezentate implicit cele b)
trei axe de coordonate, cu scări
valorice predefinite, figura 10.3d.
De remarcat faptul că
toate ferestrele ce compun
"vrăjitorul" sunt dotate cu un
câmp în care utilizatorul poate
controla alegerea făcută cu
ajutorul unei imagini c)
corespunzătoare tipului de grafic
ales, afişată în aceeaşi fereastră
de dialog.
Pentru reprezentarea
grafică a unei expresii este
suficientă plasarea acesteia în
locul elementului de substituire
din regiunea graficului şi
apăsarea tastei Enter.
Şi în cazul graficelor 3D
este posibilă reprezentarea mai d)
multor ecuaţii simultan, chiar cu Fig. 10.3
tipuri diferite de grafice. Ferestre consecutive deschise de comanda
Atât graficele 2D cât şi 3D Wizard
cele 3D pot fi manipulate
83
MATHCAD - proiectare interactivă şi prelucrarea datelor experimentale
a) b)
Fig. 10.5
Fereastra corespunzătoare comenzii de formatare a graficelor 2D
a) pagina Traces; b) pagina Labels.
a) b)
Fig. 10.7
Fereastra corespunzătoare comenzii de formatare a graficelor 3D
a) pagina General; b) pagina Axes.
a) b)
Fig. 10.8
Fereastra corespunzătoare comenzii de formatare a graficelor 3D
a) pagina Appearance; b) pagina Lighting.
87
MATHCAD - proiectare interactivă şi prelucrarea datelor experimentale
a) b)
Fig. 10.10
Fereastra corespunzătoare comenzii de formatare a graficelor 3D
a) pagina Backplanes; b) pagina Advanced.
a) b) c)
Fig. 10.11
Etapele creării unei reprezentări grafice 2D simple
a) introducerea ecuaţiei; b) introducerea graficului; c) afişarea graficului
88
Lucrul cu grafice şi obiecte
a) b) c)
Fig. 10.12
Etapele creării unei reprezentări grafice 2D multiple
a) introducerea ecuaţiilor; b) introducerea graficului; c) afişarea graficului
a) b) c)
Fig. 10.13
Etapele creării unei reprezentări grafice 2D cu două expresii
a) introducerea expresiilor; b) introducerea graficului; c) afişarea graficului
89
MATHCAD - proiectare interactivă şi prelucrarea datelor experimentale
a) b) c) d)
Fig. 10.14
Etapele creării unei reprezentări grafice 2D pentru un vector
a) declararea variabile domeniu şi introducerea expresiei vectorului; b) afişarea
vectorului - opţional; c) introducerea graficului; d) afişarea graficului
a) b)
Fig. 10.17
Ferestre activate de comanda Insert - Object
a) pentru obiecte nou create; b) pentru obiecte existente.
unei aplicaţii din listă şi a apăsării butonului O.K. aplicaţie respectivă este
lansată din interiorul foii de lucru, permiţând astfel crearea obiectului
respectiv.
Pentru introducerea unui obiect existent este necesară specificarea,
în pagina corespunzătoare, a locaţiei obiectului în memoria calculatorului
gazdă. În aceeaşi pagină se poate opta ca obiectul respectiv să fie introdus ca
atare în foaia de lucru sau numai ca referinţă (opţiunea Link). Se mai poate
opta ca obiectul să fie afişat sub forma unui simbol specific aplicaţiei
respective şi nu prin conţinutul său (opţiunea Display as Icon).
Mathcad-ul permite editarea obiectelor, în acest scop fiind suficient
executarea unui dublu click stânga-mouse pe obiectul respectiv. Obiectul va
fi editat într-o fereastră (cuprinsă în foia de lucru) a aplicaţiei sursă.
Pentru editarea referinţelor la obiecte existente este disponibilă
comanda Links amplasată în meniul Edit. Lansarea comenzii are drept
rezultat deschiderea unei ferestre de dialog (figura 10.18) în care utilizatorul
poate identifica, într-o listă
derulantă, toate referinţele din
foia de lucru. Pentru fiecare
referinţă selectată sunt
disponibile o serie de opţiuni:
- reîncărcarea sursei în
faoia de lucru (Update Now);
- deschiderea fişierului
sursă (Open Source);
- schimbarea fişierului
sursă pentru referinţa respectivă Fig. 10.18
Fereastra de dialog deschisă de comanda Edit -
(Change Source); Links
- eliminarea referinţei
respective (Break Link).
Există şi posibilitatea activării unui protocol de reîncărcare
automată a fişierului sursă pentru o referinţă, opţiunea Update - Automatic.
10.6. Animaţia
a) b)
Fig. 10.19
Ferestre de dialog corespunzătoare comenzii View - Animate
a) configurarea variabilei Frame; b) selectarea encoderului video
94
Introducere în Mathcad
Bucureşti 2014
Prefaţă
De ce acest titlu?
Titlul cărţii, Utilizarea calculatoarelor, preia denumirea cursului existent în
planul de învăţământ al anului întâi de la facultatea "Căi Ferate, Drumuri şi Poduri"
din Universitatea Tehnică de Construcţii Bucureşti. Cum un calculator se poate
folosi în foarte multe domenii de activitate, acest titlul general impune o precizare:
cartea este o introducere în utilizarea programului Mathcad™ 1. Ea reflectă
experienţa dobândită de autori în iniţierea studenţilor din anul întâi în utilizarea
acestui program.
Ce conţine cartea?
După o scurtă prezentare a interfeţei Mathcad făcută în capitolul 1, cititorul este
iniţiat în capitolele 2 şi 3 asupra modului în care se poate folosi programul
Mathcad pentru rezolvare problemelor de "Algebră liniară" sau "Analiză
matematică". Capitolul 4 este consacrat graficii în Mathcad. În capitolul 5 sunt
prezentate posibilităţile de calcul simbolic ale acestui program. Capitolele 6 şi 7
sunt dedicate rezolvării numerice sau simbolice a ecuaţiilor şi sistemelor de ecuaţii
neliniare folosind Mathcad. O scurtă introducere în posibilităţile de programare în
Mathcad este făcută în capitolul 8. În final, în capitolele 9 şi 10, sunt propuse
subiecte pentru aplicaţiile practice şi teste de verificare.
1
Mathcad este marcă înregistrată a firmei PTC (Parametric Technology Corporation), 140 Kendrick Street,
Needham, MA 02494 USA, http://www.ptc.com/product/mathcad/.
i
au fost scrise iniţial în Mathcad 11.2a, una dintre cele mai bune şi stabile versiuni
de Mathcad, şi apoi transformate în versiunea 14. Diferenţele între cele două
versiuni pot să apară la programele care folosesc calculul simbolic, deoarece
Mathcad până la versiunea 11 a folosit procesorul de calculul simbolic de la
Maple™ iar începând cu versiunea 12 a trecut la MuPad™. Pentru scrierea
programelor în Mathcad autorii recomandă versiunile 14, mai precis 14.03, sau 15.
ii
CUPRINS
Bibliografie ……………………………………………………………………..248
iii
1. MATHCAD – Ghid de utilizare
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
Apasarea butoanelor acestei bare duce la aparitia unor submeniuri (toolbars) care
contin operatori sau simboluri grupate pe domenii de utilizare.
2
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
Bara Calculator
Bara Graph
Butoanele care apar pe aceasta bara folosesc pentru crearea graficelor 2-D sau
3-D in Mathcad.
3
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
Bara Matrix
Bara Evaluation
1
x dx 0.5
0
x
2
1
1
x dx x dx
2 0 2
4
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
De exemplu ORIGIN 1
Bara Calculus
Bara Boolean
5
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
Bara Programming
Bara Greek
6
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
7
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
2
Regiune de formule x 3 x 2 = 0
8
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
1
f ( x)
0 1 2 3
1
9
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
Exemplul 1
Perimbaza := 2 ( L + l) Perimbaza = 70 m
2
Ariabazei := L l Ariabazei = 300 m
5
Volumul := L l h Volumul = 2.4 10 L
2 2 2
Ldiagpara := L +l +h Ldiagpara = 25.013 m
2 2
Ldiagbaza := L +l Ldiagbaza = 25 m
Exemplul 2
R := 50cm
L := 2 π R L = 3.142 m
A := π R
2 2
A = 0.785 m
10
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
11
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
In Mathcad masura unui unghi se obtine in radiani. De multe ori avem nevoie de
a exprima acesta masura in grade, minute si secunde sexazecimale. In continuare
vom arata cum se poate face aceasta transformare si transformarea inversa.
Notatii folosite:
mung - masura unghiului (cand unitatea de masura este specificata dupa masura
unghiului)
mrad - masura unghiului in radiani
mdeg - numarul de grade din mausura unghiului in grade, minute si secunde
mmin - numarul de minute din masura unghiului in grade, minute si secunde
msec - numarul secundelor din masura unghiului in grade, minute si secunde
Fie dat un unghi a carei masura este
mung 1rad
12
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
mmin_int 17 minute
msec_int 45 secunde
msec
msecdeg msecdeg 0.013
60 60
mmin
mmindeg mmindeg 0.283
60
13
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
14
2. ALGEBRĂ LINIARĂ CU MATHCAD
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
Introducerea matricelor
A
16
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
A
4. Se completeaza pozitiile marcate cu valori numerice. Trecerea de la o pozitie la
alta se face cu ajutorul tastei Tab sau folosind mouse-ul si dand clic pe fiecare
pozitie.
3 6 8
A 5 7 2
10 12 9
17
Dan Caragheorghepol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
18
Dan Caragheorghepol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
ORIGIN 1
Observatie. Locul marcat (patratul negru) de langa numarul 1 arata ca in acest
caz instructiunea nu functioneaza fiind selectata optiunea "Disable Evaluation" .
Pentru a schimba acesta optiune in "Enable Evaluation" se selecteaza regiunea si
se da click cu butonul drept al mouse-ului pentru aparitia meniului contextual
unde apare aceasta.
19
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
Operatii cu matrice
1 3 2 9 8 7 2 1
A 6 5 4 B 6 5 4 C 4 3
8 9 7 3 2 1 6 5
Adunarea, scaderea si inmultirea matricelor folosesc
operatorii uzuali
10 11 9 8 5 5 26 20
A B 12 10 8 AB 0 0 0 A C 56 41
11 11 8 5 7 6 94 70
La inmultirea a doua matrice A(m,n) cu B(n,p) trebuie se tina seama ca
numarul de coloane din prima matrice sa fie egal cu numarul de linii din
matricea a doua. Rezultatul, matricea C, este o matricea de tipul (m,p).
Simbolic scriem A(m,n)*B(n,p) = C(m,p)
1 0 0 1 3 2 0.333 1 0.667
A 0 1 0 A 6 5 4 3.333 3 2.667
0 1 1
A
0 0 1 8 9 7 4.667 5 4.333
20
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
2 1
2 4 6
C 4 3
T
C
1 3 5
6 5
Daca elementele matricei date sunt numere compleze se poate determina
matricea conjugata, adica matricea care are toate elementele egale cu
conjugatele numerelor complexe din matricea data. Matricea conjugata se
obtine tastand dupa numele ei ". De exemplu, fie
1 2 i i 1 2 i 1 2i i 1 2i
D Atunci D
4 3i 1 4 3 i 1
3 9 6
3 A 18 15 12
24 27 21
21
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
De exemplu
1 3 2 3 5 4
A 6 5 4 A 2 8 7 6
8 9 7 10 11 9
in loc de
1 1 1 3 5 4
U 1 1 1 A 2 U 8 7 6
1 1 1 10 11 9
22
Dan Caragheorghepol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
Operatii cu vectori
Vectorii n dimensionali sunt matrice cu n linii si o singura coloana. Prin urmare,
toate operatiile prezentate pentru matrice se pot utiliza si pentru vectori.
In plus, pentru vectori se adauga unele operatii specifice acestora:
produsul scalar
calculul normei euclidiene
produsul vectorial (numai pentru vectorii cu trei componente).
x1 y1
ORIGIN 1 x2 y2
x y
x3 y3
x4 y4
Produsul scalar al celor doi vectori este definit prin formula
x y
x = x x
Pentru un vector x, real sau complex, norma euclidiana este egala cu radical din
suma patratelor modulelor componentelor vectorului x. Daca vectorul x este real,
atunci nu mai este nevoie de a modul elementelor deoarece patratul unui numar
real este egal cu patratul modulului sau.
x
23
Dan Caragheorghepol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
Pentru calculul normei euclidiene Mathcad foloseste operatorul care are aceeasi
forma grafica cu cel folosit pentru calculul valorii absolute a unui numar real sau
complex sau pentru calculul determinantului unei matrice patratice. Trebuie
precizat ca nu trebuie folosit operatorul din meniul Matrix (acesta fiind folosit
exclusiv de Mathcad pentru calculul determinantului unei matrice), ci doar cel
din meniul Calculator. De la tastatura combinatia de taste SHIFT+\ este
functionala atat pentru calculul normei euclidiene a unui vector, cat si pentru
determinantul unei matrici.
Observatie.
1. Daca pozitia marcata este completata cu o matrice patratica se calculeaza
determinantul acesteia.
2. Daca in pozitia marcata se scrie numele unui vector atunci se calculeaza norma
euclidiana a acestuia (cu conditia ca operatorul cu forma grafica anterioara sa fie
din meniul Calculator sau de la tastatura).
3. Daca pozitia marcata se completeaza cu un numar real sau complex atunci se
va calcula modulul acelui numar(cu conditia ca operatorul cu forma grafica
anterioara sa fie din meniul Calculator sau de la tastatura).
De exemplu
1 2 7
A 5 3 1
0 6 9
A 267 este valoarea determinantului matricei A
2
w 4
5
24
Dan Caragheorghepol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
Produsul vectorial se poate calcula numai pentru vectorii din R3. Rezultatul
este tot un vector din R3. Dati vectorii din R3
x1 y1
x x2 y y2
x y
3 3
produsul lor vectorial este un vector din R3, notat
xy
Exemplul 1.
Se dau vectorii
1 4 1
a 2 b 5 c 2
3 6 5
Calculati:
1) Produsul scalar si produsul vectorial dintre vectorii a si b.
2) Masura unghiului dintre vectrorii a si b.
3) Aria paralelogramului si aria triunghiului determinat de vectorii a si b.
4) Volumul paralelipipedului determinat de vectorii a,b si c.
Solutie.
1) Produsul scalar a b 32
25
Dan Caragheorghepol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
3
2) Produsul vectorial ab 6
3
Vabc a ( b c) Vabc 30
26
Dan Caragheorghepol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
u1 v1
u = u2 v = v2
u v
3 3
atunci produsul scalar este definit prin formula
u v = u1 v1 u2 v2 u3 v3
1 2 i i
u 3 v 2 3 i
2i 1
u 4.359
u1 u1 u2 u2 u3 u3 4.359
ORIGIN 1
27
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
de pe bara Matrix.
Coloanele unei matrice sunt indexate cu indici superiori incadrati de
paranteze unghiulare.
Pentru a scrie un astfel de indice cu ajutorul tastaturii se tasteaza Ctrl+6.
De exemplu, coloanele matricei
1 2 3
A 4 5 6
7 8 9
sunt
ORIGIN 1
1 2 3
1 2 3
A 4 A 5 A 6
7 8 9
Pentru extragerea liniilor se transpune matricea data, se extrag coloanele
matricei transpuse AT care se transpun din nou. Pentru transpunerea unei
matrice folosind tastatura se foloseste comanda CTRL+1.
1T 2T 3T
A
T
( 1 2 3) A
T
( 4 5 6) A
T
( 7 8 9)
Reciproc, daca se dau mai multi vectori cu ajutorul lor se poate obtine o
matrice, care are drept coloane vectorii dati. Pentru aceasta operatie se foloseste
functia din Mathcad numita augment.
De exemplu, fie vectorii
1 4 7 10
a 2 b 5 c 8 d 11
3 6 9 12
28
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
1 4 7 10
M 2 5 8 11
3 6 9 12
1 4 7 10
1 2 3 4
M 2 M 5 M 8 M 11
3 6 9 12
O alta metoda de a obtine o matrice din mai multi vectori este aceea de a da
vectorilor acelasi nume si de a folosi indicii superiori.
1 4 7 10
1 2 3 4
z 2 z 5 z 8 z 11
3 6 9 12
Matricea obtinuta are numele z.
1 4 7 10
z 2 5 8 11
3 6 9 12
1 2 3 4 5
M
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
29
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
Atunci
8 9 10
submatrix ( M 2 4 3 5) 13 14 15
18 19 20
10 9 8
submatrix ( M 2 4 5 3) 15 14 13
20 19 18
Exemplu
Fie matricea
5 4 3 2
A
4 5 3 2
ORIGIN 1 a A
3 4 5 2
2 3 4 5
Δ1 a1 1 Δ1 5
Δ4 A Δ4 84
30
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
Operatii cu matrice
1. Se dau matricele
1 2 5 2 7 5 8 2
A 3 4 7 B 3 2 1 C 3 5
6 9 8 4 6 9 1 4
3i i 2 3 i
D
2 4 3 i 7
3 2 1 2
3 A 2 B ( A B) C A B A C
T
D D A 2 B 2
T
C B
Solutie.
29 56 46 T 5 27i
D D
T 24
C B
5 20 51 5 27i 78
A 2 B 2 202925
31
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
2 5 2
x 3 y 3 z 1
7 1 2
Calculati:
a) Produsul scalar dintre vectorii x si y.
b) Produsul vectorial al vectorilor y si z (in aceasta ordine)
c) Norma euclidiana a vectorului x.
Solutie.
7
x y 8 y z 12 x 7.874
1
2 i 1i
v i w 2
3 i 2 3 i
32
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
Pentru rezolvarea sistemului in Mathcad acesta trebuie scris sub forma matriceala
sau
A x = b
unde
A este matricea sistemului;
x este vectorul necunoscutelor;
b este vectorul termenilor liberi.
a1 1 a1 2 .... a1 n x1 b1
a2 1 a2 2 .... a2 n x2 b2
A x b
.... .... .... .... .... ....
an 1 an 2 .... an n xn bn
Ax = b,
33
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
3
Se calculeaza solutia: x 2
1
0.000000000000000
Verificarea solutiei: A x b 0.000000000000000
0.000000000000000
2. Utilizarea matricei inverse. Calcul numeric
Daca matricea A este nesingulara, atunci exista matricea inversa A-1 si solutia
sistemului este data de formula
1
x= A b
34
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
5 x1 3 x2 6 x3 = 15
2 x1 8 x2 7 x3 = 17
4 x1 x2 9 x3 = 19
5 3 6 15
A 2 8 7 b 17
4 1 9 19
Calculam determinantul matricei A pentru a vedea daca matricea este inversabila.
A 713
Observatii.
10-15 inseamna "practic zero" sau "zero Mathcad".
Deoarece in calculul matricei inverse se fac mai multe erorii de rotujire decat
cele care se fac in metoda de rezolvare folosita de functia lsolve, se recomanda
ca sistemele liniare sa fie rezolvate cu lsolve si nu prin inversarea maticei.
35
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
Exemplul 3. Fie sistemul de ecuatii liniare in care termenii liberi sunt variabile
reale si nu numere.
5 x1 3 x2 6 x3 = α
2 x1 8 x2 7 x3 = β
4 x1 x2 9 x3 = γ
5 3 6 α
A 2 8 7 b β
4 1 9 γ
3 γ 21 β 79 α
31 713 713
s
3 β γ 2 α
31 31 31
2 γ 17 β 30 α
31 713 713
Verificarea solutiei.
0
A s b 0
0
36
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
37
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
A x = 0
admite intotdeauna solutia nula x = 0.
Daca determinantul sistemului este nenul, sigura solutie a sistemului este
solutia nula.
Daca determinatul sistemului este nul, sistemul admite si solutii diferite de
solutia nula.
Solutia admisa va depinde de un numar de parametrii egal cu diferenta
dintre dimensiunea matricei sistemului si rangul ei.
Determinarea solutiilor diferite de solutia banala se poate face in Mathcad
folosind functia rref.
Exemplul 1
38
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
1 2 3
Matricea sistemului este A 2 6 11
1 2 7
Calculam determinntul ei A 0
1 0 2
R rref ( A) R 0 1 2.5
0 0 0
Forma matricei reduse arata ca primele doua coloane sunt liniar independenete
iar necunoscutele x si y sunt necunoscute principale. Notam necunoscuta
secundara z cu si trecem termenii care o contin in membrul drept. Atunci
solutia sistemului este functie de parametrul si este data de formula
ORIGIN 1
0
3
S ( λ) λ R 0
λ
2 λ
5 λ
S ( λ)
2
λ
39
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
0
Verificare A S ( λ) 0
0
Exemplul 2
In acest exemplu dorim sa rezolvam sistemul liniar si omogen
xyz=0
2 x 2 y 2 z = 0
3 x 3 y 3 z = 0
1 1 1
Matricea sistemului A 2 2 2 are determinantul nul A 0
3 3 3
40
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
μ λ
sol ( λ μ) λ
μ
0
Verificare A sol ( λ μ) 0
0
41
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
sau
A x = b
unde
a1 1 a1 2 .... a1 n b1 x1
a2 1 a2 2 .... a2 n b2 x2
A b x
.... .... .... .... .... ....
am 1 am 2 .... am n bm xn
Daca matricea sistemului este dreptunghiulara, pentru a decide daca sistemul
este compatibil sau nu folosim urmatorul rezultat:
42
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
1. Daca rank(A) < rank(AE), atunci sistemul nu are solutii, deci este un
sistem incompatibil.
2. Daca rank(A) = rank(AE), atunci sistemul are solutii, deci este un sistem
compatibil.
Mai precis:
2.1. Daca rank(A) = cols(A), atunci sistemul are solutie unica, deci
este un sistem compatibil determinat.
2 x 3 y 4 z = 4
3 x 5 y 6 z = 13
4 x y 3 z = 13
x 6 y 9 z = 0
43
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
2 3 4 4
5 6
A1 b1
3 13
4 1 3 13
1 6 9 0
Matricea extinsa a sistemului este A1E augment ( A1 b1)
2 3 4 4
6 13
A1E
3 5
4 1 3 13
1 6 9 0
x 2 y 3 z 4
Given
2 x 3 y 4 z = 4
3 x 5 y 6 z = 13
4 x y 3 z = 13
x 6 y 9 z = 0
44
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
Verificare
0
A1 s1 b1
0
0
0
1 2 4 0
A2 7 4 0 b2 8
3 1 2 4
1 2 4 0
A2E augment ( A2 b2) A2E 7 4 0 8
3 1 2 4
Calculam valorile necesare pentru a testa compatibilitatea sistemului.
45
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
Forma matricei reduse arata ca primele doua coloane sunt liniar independenete
iar necunoscutele x si y sunt necunoscute principale. Notam necunoscuta
secundara z cu si trecem termenii care o contin in membrul drept. Atunci
solutia sistemului este functie de parametrul si este data de formula
ORIGIN 1
0
4 3
S2 ( λ) R λ R 0
λ
8 λ 8
5 5
S2 ( λ) 14 λ 4
5 5
λ
0
Verificare A2 S2 ( λ) b2 0
0
Pentru orice valoare reala data parametrului se obtine o solutie a sistemului. De
exemplu, pentru = 0.5 solutia sistemului este
0.8
S2 ( 0.5) 0.6
0.5
46
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
3. Sistem incompatibil.
Exemplul 3.
x 2 y z = 1
3 x 7 y 4 z = 1
2 x 4 y 3 z = 3
4 x 11 y 9 z = 9
5 y 2 z = 1
1 2 1 1
3 7 4
1
A3 2 4 3 b3 3
4 11 9 9
0 5 2 1
Matricea extinsa a sistemului este:
1 2 1 1
3 7 4 1
A3E augment ( A3 b3) A3E 2 4 3 3
4 11 9 9
0 5 2 1
Calculam rank ( A3) 3 si rank ( A3E) 4
47
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
1. 5 x 3 y 6 z = 15 2. x y 2 z = 1
2 x 8 y 7 z = 17 2 x y 4 z = 4
4 x y 9z = 19 4x y 4 z = 2
3. 2 x 3 y 10 z = 5 4. x 5 y 4 z 13 t = 3
x 7 y 14 z = 1 3 x y 2 z 5 t = 2
3 x 8 y 9 z = 3 2 x 2 y 3 z 4 t = 1
5. 2 x y z = 1 6. x 2 y z = 1
3 x 3 y z = 2 3 x 7 y 4 z = 1
2 x 4 y = 3 2 x 4 y 3 z = 3
4 x 11 y 9 z = 9
5 y 2 z = 1
7. 2 x y 3 z = 4 8. x 2 y 4 z = 0
3 x 4 y z = 5 7 x 4 y = 8
x 5 y 4 z = 9 3 x y 2 z = 4
48
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
Solutie. ORIGIN 1
1. Fie sistemul
5 x 3 y 6 z = 15
2 x 8 y 7 z = 17
4 x y 9z = 19
5 3 6 15
A1 2 8 7 b1 17
4 1 9 19
5 3 6 15
A1E augment ( A1 b1) A1E 2 8 7 17
4 1 9 19
Calculam rangul matricei A1, rangul matricei extinse A1E si determinam numarul
de coloane ale matricei A1.
3
s1 lsolve ( A1 b1) s1 2
1
Verificare 15 15
A1 s1 17 b1 17
19 19
49
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
4. Fie sistemul
x 5 y 4 z 13 t = 3
3 x y 2 z 5 t = 2
2 x 2 y 3 z 4 t = 1
1 5 4 13 3
A4 3 1 2 5 b4 2
2 2 3 4 1
1 5 4 13 3
A4E augment ( A4 b4) A4E 3 1 2 5 2
2 2 3 4 1
Deoerece rangul matricei sistemului este strict mai mic decat rangul matricei
extinse sistemul este incompatibil.
7. Fie sistemul
2 x y 3 z = 4
3 x 4 y z = 5
x 5 y 4 z = 9
Notam
2 1 3 4
A7 3 4 1 b7 5
1 5 4 9
50
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
2 1 3 4
A7E augment ( A7 b7) A7E 3 4 1 5
1 5 4 9
Calculam
Deoerece rangul matricei sistemului este egal cu rangul matricei extinse sistemul
este compatibil, dar nedeterminat pentru ca rangul matricei este strict mai mic
decat numarul de coloane al matricei sistemului.
Numarul de parametrii de care depinde solutia sistemului este
cols ( A7) rank ( A7) 1
Determinam solutia sistemului folosind functia rref aplicata matricii extinse A7E.
1 0 1 1
R rref ( A7E) R 0 1 1 2
0 0 0 0
0
4 3
Solutia depinzand de parametrul λ este S7 ( λ) R λ R 0
λ
1 λ
S7 ( λ) λ 2
λ
0
Verificarea solutiei A7 S7 ( λ) b7 0
0
51
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
1 0 1 1
1 2 3 1 4 1
a a a a
0 0
0 0 1 1
1 1 1 1
Demonstrati ca multimea B = [a<1>, a<2>, a<3>, a<4>] este o baza a spatiului
vectrial R4 si determinati scrierea vectorului
1
v
0
1
1
in aceasta baza,
Solutie.
Multimea B = [a<1>, a<2>, a<3>, a<4>] este o baza pentru R4 daca
determinantul matricei formate cu componentele celor patru vectori este
nenul. Daca notam matricea respectiva cu A, atunci
1 0 1
1
1 2 3 4
A augment a a a a A
0 0 1 1
0 0 1 1
1 1 1 1
are determinatul A 2
52
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
λ1
λ
Notam cu λ =
2
λ
3
λ4
vectorul componentelor lui v in baza B = [a<1>, a<2>, a<3>, a<4>]
A λ = v
1
λ
1
Solutia acestuia este λ lsolve ( A v)
0.5
0.5
Prin urmare, vectorul v are in baza B = [a<1>, a<2>, a<3>, a<4>] scrierea
53
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
1 0 1
1 2 3
x 0 x 1 x 1
1 1 1
1 1 0
1 2 3
y 1 y 0 y 0
0 0 1
1) Demonstrati ca multimile B = [x<1>, x<2>, x<3>] si B' = [y<1>, y<2>, y<3>] sunt
baze pentru R3 si determinati matricea de trecere de la baza B la baza B'.
2) Daca vectorul v din R3 are in baza B scrierea v = 3x<1> - x<2> +2x<3>, care
este scrierea lui v in baza B'?
Solutie.
1) Multimea B = [x<1>, x<2>, x<3>] este o baza pentru R3 daca determinantul
matricei formate cu componentele celor trei vectori este nenul. Daca notam
matricea respectiva cu B, atunci
1 0 1
1 2 3
B augment x x x B 0 1 1
1 1 1
are determinatul B 1
Analog avem
1 1 0
1 2 3
B' augment y y y B' 1 0 0 B' 1
0 0 1
54
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
c1 1
1 1 2 3
y = x x x 2 1
c
c
3 1
Daca notam
c1 1
1
c = c2 1
c
3 1
atunci forma matriceala de mai sus se poate scrie
1 1
y = B c
1
1 1 1 1
c B y c 1
2
Analog obtinem
0
2 1 2 2
c B y c 1
1
1
3 1 3 3
c B y c 1
1
55
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
C= c
1 2 3
c c
Prin urmare
1 0 1
C 1 1 1
2 1 1
2) Daca vectorul v se scrie in baza B sub forma v = 3x<1> - x<2> +2x<3>, atunci
scrierea matriceala a lui v in baza B este
3
v 1
2
Scrierea lui v in noua baza B' este
1
v' 4
1
v' C v
4
Prin urmare, v se scrie in baza B' sub forma v = y<1> - 4y<2> + 4y<3>.
56
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
1 2 2 2
1 2 3 3 4 3
b b b b
0 2
3 5 5 4
3 4 4 4
1) Demonstrati ca multimile B1 = [a<1>, a<2>, a<3>, a<4> ] si
B2= [b<1>, b<2>, b<3>, b<4> ] sunt baze pentru R4 si determinati matricea de
trecere de la baza B1 la baza B2.
1 1 1 1
A augment a a a a A
1 2 3 4 1 2 1 3
1 1 2 2
1 1 1 3
are determinantul A 2
57
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
Analog avem
1 2 2 2
1 2 3 4
B augment b b b b B
0 3 2 3
B 2
3 5 5 4
3 4 4 4
2 0 1 1
3 2
C
1 1 1
C A B
1 2 2 1
1 1 1 1
4
λ
3
2
6
15
μ
1 25
μ C λ
33
1
Prin urmare, vectorul v se scrie in baza B2 sub forma v = -15 b<1> + 25b<2> +
33b<3> - b<4>
58
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
Definitii
Fie A o matrice patratica cu n linii si n coloane cu elemente reale.
x1
x2
x=
...
xn
pentru care exista un numar real astfel incat are loc egalitatea
A x = λ x
Numarul real pentru care are loc egalitatea de mai sus se numeste
valoarea proprie corespunzatoare vectorului propriu x.
Se considera matricea
3 1 0
ORIGIN 1 A 4 1 0
4 8 2
59
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
Rezultatul executiei este un vector de acelasi ordin cu matricea A care are drept
componente valorile proprii ale matricei.
2
eigenvals ( A) 1
1
2
λ eigenvals ( A) λ 1
1
Functia Mathcad
eigenvec ( A z)
60
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
0
A x1 λ1 x1 0
0
3.057 10 13
A x2 λ2 x2 6.114 10 13
1.223 10 12
7.423 10 13
A x3 λ3 x3 1.485 10 12
2.969 10 12
0 0.218 0.218
eigenvecs ( A) 0 0.436 0.436
1 0.873 0.873
Observatie.
Functia eigenvals se poate folosi in calculul simbolic atat pentru matrice
reale cat si complexe.
Functia eigenvals se poate folosi in evaluarea numerica numai pentru
matrice reale.
61
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
1 3 1
A 3 5 1
3 3 1
Pentru a cereceta daca matricea A este diagonalizabila determinam vectorii
proprii ai maticei A si stabilim daca ei formeaza sau nu o baza a spatiului
vectorial Rn. Notam cu C matricea care are drept coloane vectorii proprii ai
matricei A si calculam determinantul acesteia.
ORIGIN 1
1 1.332 10
15
0
1
C A C 1.554 10 15 2 0
0 0 2
62
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
1
eigenvals ( A) 2
2
Exemplul 2. Sa se cerceteze daca matricea reala data mai jos este diagonalizabila
si in caz afirmativ sa se aduca la forma diagonala punandu-se in evidenta
matricea diagonalizatoare.
4 5 2
A 5 7 3
6 9 4
Procedam ca mai sus si determinam matricea vectorilor proprii ai matricei A.
C eigenvecs ( A)
9
C 9.711i 10
Dupa cum se observa matricea C (in care elementele sunt afisate cu trei zecimale)
are doua coloane egale. Prin urmare, nu exista o baza a lui R3 formate cu vectori
proprii ai matricei A. Deci A nu este diagonalizabila.
63
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
1 0 3
Fie matricea A 3 2 3
3 0 1
1) Determinati valorile si vectorii ai matricei A.
2) Cercetati daca matricea A este diagonalizabila. In caz afirmativ aduceti
matricea A la forma diagonala.
Solutie folosind calculul numeric.
ORIGIN 1
2
λ eigenvals ( A) λ 2
4
0 0.5 0.577
C eigenvecs ( A) C 1 0.707 0.577
0 0.5 0.577
In continuare determinam vectorii proprii care corespund fiecarei valori proprii
si verificam acest lucru pornind de la definitie.
64
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
0 0
1 1 1
λ1 2 C 1 A C λ1 C 0
0 0
0.5 0
2 2 2
λ2 2 C 0.707 A C λ2 C 0
0.5 0
0.577 0
3 3 3
λ 3 4 C 0.577 A C λ3 C 0
0.577 0
Observatie O eventuala evaluare simbolica a verificarii faptului ca fiecarui
vector propriu aflat ii corespunde valoarea proprie respectiva poate produce erori
in Mathcad 14. De exemplu in cazul nostru:
6
1 1
A C λ1 C 6
6
Din aceasta cauza se recomanda doar folosirea calculului numeric pentru
verificarea respectiva.
3. Diagonalizarea matricei A
C 0.577
Deoarece determinantul lui C este nenul, matricea A este diagonalizabila.
65
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
2 0 0
C A C 0 2 0
1
0 0 4
66
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
1 2 1
1 2 3
x 0 x 1 x 3
1 0 1
2
v 1
3
in baza B'?
Solutie.
1 2 1
1 2 3
B augment x x x B 0 1 3 ORIGIN 1
1 0 1
B are determinantul B 6
2) Construim mai intai o baza ortogonala [y<1>, y<2>, y<3>] folosind procedeul
de ortogonalizare Gram-Schmidt.
1 1 1
y x 1
y 0
1
67
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
2 1 1
2 2 x y 1 2
y x y y 1
y 1 y 1
1
Baza ortonormata B' = [z<1>, z<2>, z<3>] se obtine impartind fiecare vector y<1>,
y<2>, y<3> la norma sa.
0.707
1 y1 1
z z 0
y1
0.707
0.577
2 y2 2
z z 0.577
y2
0.577
0.408
3 y3 3
z z 0.816
y3
0.408
3) Vectorul v are in baza B' scrierea v = λ1 z 1 λ2 z 2 λ3 z 3 unde
1
λ1 v z λ1 3.536
2
λ2 v z λ2 0
3
λ3 v z λ3 1.225
68
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
Q x1 x2 x3 = x A x
T
5 2 2
A 2 6 0
2 0 4
Mai precis, forma patratica are expresia analitica generala
T
x1 x1
Q ( x1 x2 x3) x2 A x2
x3 x3
2 2 2
Q ( x1 x2 x3) simplify 5 x1 4 x1 x2 4 x1 x3 6 x2 4 x3
Problema
1) Determinati expresia canonica a formei patratice Q folosind metoda lui
Jacobi.
2) Precizati care este natura formei patratice: pozitiv definita, negativ definita
sau nedefinita ca semn.
3) Determinati baza in raport cu care forma patratica Q are expresia analitica
canonica determinata la punctul 1).
69
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
Notam a A
Δ1 a1 1 Δ1 5
a1 1 a1 2
Δ2 Δ2 26
a 2 1 a 2
2
Δ3 A Δ3 80
Deoarece toti minorii principali sunt nenuli, conform teoremei lui Jacobi, exista
o baza B' a spatiului R3 formata din vectorii
f1 f2 f3
1 1 0 0
Δ1 0 0 5
0.2 0 0
B 0 0 B 0 0 B 0 0.192 0
Δ1 5
Δ2 26
Δ2 13
0 0 0.325
0 0 0 0
Δ3 40
70
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
Notam cu x'1
x' = x'2
x'3
scrierea unui vector oarecare in raport cu noua baza. Atunci forma patratica are
expresia analitica
T
x'1 x'1
Q ( x'1 x'2 x'3) x'2 B x'2
x'3 x'3
2 2 2
x'1 5 x'2 13 x'3
Q ( x'1 x'2 x'3) simplify
5 26 40
Deoarece toti coeficientii expresiei analitice canonice sunt pozitivi, forma
patratica Q este pozitiv definita.
f1 = c1 1 e1
unde
1 0 0
e1 0 e2 1 e3 0
0 0 1
71
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
1 1
c1 1 c1 1 c1 1 0.2
a1 1 5
1
c1 2 a1 1 a1 2 0
2 2 2 1 2 2 1
c a a
1
c1 2 13 c1 2 0.077
2 2 5
c 2 2 0.192
c
26
1
c1 3 a1 1 a1 2 a1 3 0
2 3 2 1 2 2 2 3 0
c a a a
c a
3 3 3 1 a3 2 a3 3 1
3
20
c1 3 c1 3 0.15
1
c 2 3 20 c 2 3 0.05
c c 0.325
3 3 13 3 3
40
Atunci vectorii noii baze sunt
f1 c1 1 e1
72
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
3
1 20
1 13 0.15
5 0.2
0.077
f1 0 f2 5 0.192 f3
1
0.05
0 20
0 0 26 0 13 0.325
0
40
1 1 3
5 13 20
0.2 0.077 0.15
C augment f1 f2 f3 C 0
5 1
C 0 0.192 0.05
26 20
13
0 0 0.325
0 0
40
Verificarea calculelor
1 0 0 1 0 0
5 5
C A C 0 0 B 0 0
T 5 5
26 26
13 13
0 0 0 0
40 40
73
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
Q x1 x2 x3 = x A x
T
5 2 2
A 2 6 0
2 0 4
Mai precis, forma patratica are expresia analitica generala
T
x1 x1
Q ( x1 x2 x3) x2 A x2
x3 x3
2 2 2
Q ( x1 x2 x3) simplify 5 x1 4 x1 x2 4 x1 x3 6 x2 4 x3
Problema
1) Determinati expresia canonica a formei patratice Q folosind metoda valorilor
proprii.
2) Precizati care este natura formei patratice: pozitiv definita, negativ definita
sau nedefinita ca semn.
3) Determinati baza ortonormata in raport cu care forma patratica Q are
expresia analitica canonica determinata la punctul 1.
74
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
1 1 2
1 0.5 2
2
C eigenvecs ( A) C 1 0.5 1 2
1 2
2 1 1 1
1 1 1
1
1 0
1
C 0.5
1
λ1 8 1 1
2 A C λ1 C 0
1 1 0
1
0.5 0
2 2
λ2 5 C 1 2 2
A C λ 2 C 0
1
1 1 0
75
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
2 2 0
3 3 3
λ3 2 C 2 2 A C λ 3 C 0
1 1 0
1 0 0 1 0 0 0 0 0
C C 0 1 0 C C 0 1 0 C C 0 0 0
T T T 1
0 0 1 0 0 1 0 0 0
8 0 0
diag ( λ) 0 5 0
0 0 2
Notam cu
x'1
x' = x'2
x'3
T
x'1 x'1
Q ( x'1 x'2 x'3) x'2 diag ( λ) x'2
x'3 x'3
2 2 2
Q ( x'1 x'2 x'3) simplify 8 x'1 5 x'2 2 x'3
76
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
Deoarece matricea A are toate valorile proprii pozitive, forma patratica Q este
pozitiv definita.
Verificarea calculelor.
2 0 0
C A C 0 8 0
T
0 0 5
77
3. ANALIZĂ MATEMATICĂ CU MATHCAD
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
Exemplul 1
sin ( x) 1 cos ( x) 1 1
lim 1 lim lim x sin 0
x 2 x 0 x
2
x 0 x 0 x
x 3 2
e 1 x 2 x 3 x 5
lim 1 lim 1
x 0 x x 2 4 2
x 3 x 1
Exemplul 2
79
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
1
Reprezenatrea grafica a functiei f ( x) ilustreaza cel mai bine
x1
fenomemul care are loc.
10
1
5
1
x1 1 0 1 2 3
5
10
Exemplul 3
1 1 1
x x x
lim
x e ∞ lim
x e 0 lim x e undefined
x 0 x 0 x 0
30
20
x exp
1
10
x
4 2 0 2 4
10
80
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
f ( x)
2 2
x 1 ln x 1 x atan ( x)
2. Se tasteaza Shift + / sau se da clic cu mouse-ul pe simbolul operatorului de
derivare aflat pe bara Calculus.
d
d
3. Se completeaza pozitiile marcate cu numele functiei de derivat si variabila in
raport cu care se face derivata.
d
f ( x)
dx
5. Se da comanda de calcul simbolic Ctrl + . (Ctrl + punct) sau se apasa
butonul corespunzator aflat pe bara Evaluation. La terminare se apasa Enter
sau se da clic in afara zonei de editare. Se obtine
d
f ( x) atan ( x)
x 2 x
x ln x 1
2
dx 2 2 2
x 1 x 1 x 1
81
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
2 4 6
d
6 144 2448 x 6144 x 3840 x
g ( x)
x2 1 x2 1 x2 1 x2 16
6 3 4 5
dx
f ( x)
2 2
x 1 ln x 1 x atan ( x)
x 7
d
f ( x)
dx
82
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
Pentru a calcula derivate de ordin mai mare ca 5 se scriu mai multi operatori de
derivare de ordin superior inclusi unul in altul. Exemple
2 3 4
d d d
f ( x) 0.29471 f ( x) 0.04390 f ( x) 0.01310
2 3 4
dx dx dx
5 5 1 5 2
d d d d d
f ( x) 0.00585 f ( x) 0.00346 f ( x) 0.00254
5 5 1 5 2
dx dx dx dx dx
Pentru a calcula derivata unei functii in mai multe puncte se defineste variabila in
raport cu care se calculeaza derivata ca o variabila domeniu care are ca valori
acele puncte sau ca un vector care are drept componente punctele date.
Ne propunem sa calculam derivata de ordinul trei al functiei
h ( x) x ln x 1 2
in punctele 2, 3, 7, 15. Pentru aceasta definim varibila domeniu xk.
k 1 4 xk
2
3
7
15
Pentru obtinerea formei de mai sus dupa scrierea fiecarei valori 2, 3, 7 se tasteaza
virgula.
Se defineste apoi functia derivata
3
d
Dh3 ( x) h ( x)
3
dx
Pentru a obtine valorile functiei si ale derivatei de ordinul trei in punctele 2, 3, 7,
13 se scrie
83
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
n rows ( v) n4 k 1 n
84
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
2 2
F ( s t) s t
s t
F ( s t) F ( s t)
s s t
2 2 t 2
s t
2
1
2 2 2
2 2 s
F ( s t) s t
2 3
s
s2 t2 2
1
2 2 2
2 2 t
F ( s t) s t
2 3
t
s2 t2 2
s t
F ( s t)
s t 3
s2 t2 2
Daca se indica valorile numerice ale variabilelor in care se face calculul derivatei
atunci, folosind procedeul de calcul simbolic, se determina valorile numerice ale
drivatelor asa cum se vede in exemplul de mai jos.
Ca exemplu calculam derivatele partiale de ordinul unu si doi ale functiei de mai
sus in punctul P(3,4).
85
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
2 2
F ( s t) s t
s 3 t 4
3 4
F ( s t) F ( s t)
s 5 t 5
2 2
16 9 12
F ( s t) F ( s t) F ( s t)
2 2
s 125 t 125 s t 125
Calculul numeric ale derivatelor partiale ale unei functii de mai multe
variabile
Se procedeaza ca mai sus indicand valorile numerice ale variabilelor in care se
face calculul derivatei, dar se da comanda de calcul numeric nu de calcul simbolic.
2 2
F ( s t) s t
s 3 t 4
F ( s t) 0.6 F ( s t) 0.8
s t
2 2
F ( s t) 0.128 F ( s t) 0.072 F ( s t) 0.096
2 2
s t s t
86
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
Dupa cum se stie simbolul f ( x) dx desemneaza multimea tuturor
primitivelor functiei f ( x). Mathcad determina numai o primitiva a functiei
f ( x), celelalte obtinandu-se din aceasta prin adaugarea unei constante
oarecare. Determinarea primitivei se face folosind calculul simbolic.
Calculul integralei nedefinite f ( x) dx, (ceea ce inseamna determinarea
unei primitive a functiei f ( x)) se face folosind operatorul de integrare
nedefinita
d
87
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
3
De exemplu, pentru a determina o primitia a functiei f ( x) x se procedeaza
astfel:
1. Se stabileste locul unde se calculeaza integrala si se introduce operatorul
pentru calculul integralei nedefinite
d
3
x dx
3 x
4
x dx
4
Alte exemple
x
e ( cos ( x) sin ( x) )
sin ( x) exp ( x) dx
2
atan x dx atan x x x atan x
2 3 x 1
3
2
2
ln x
1
3 atan
ln ( x 1)
1
d x
2 4
3
3 3 6 3
1x
88
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
Daca functia de integrat este de mai multe variabile atunci integrarea se face in
raport cu variabila indicata, cealalta fiind considerata o constanta.
2 3 2 4
x y
x y dy
4
b
Valoarea integralei definite f ( x) dx este un numar care se obtine folosind
a
calculul numeric sau simbolic.
Folosirea operatorului de integrare pentru functii de o variabila este extrem de
simplu. Se completaeza locurile marcate cu limitele de integrare, functia de
integrat si variabila in raport cu care se face integrarea. Pentru realizarea
calculului numeric se tasteaza semnul = . De exemplu
1 π 2
2
x 1 dx 1.148 sin ( x) 2 dx 1.571 x atan ( x) dx 1.482
0 0 1
ln 2 1
1
2 2
x 1 dx
0 2 2
π
π
sin ( x) 2 dx
0 2
89
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
2
5 atan ( 2) π 1
x atan ( x) dx
1 2 4 2
Din punct de vedere practic rezultatele sub aceasta forma sunt mai putin
utilizabile deoarece pentru folosirea lor in calcule ulterioare necesita aducerea
acestora la forma numerica. Aceasta se poate face selectand rezultatul obtinut
simbolic si tastand apoi = .
ln 2 1
1
2 2
x 1 dx 1.148
0 2 2
90
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
( n!)
( 2n)!
n=1
2
( n!)
Se noteaza cu a ( n) := si se aplica criteriul raportului.
( 2 n)!
a ( n + 1) 1
lim
n ∞ a ( n) 4
( 2 n)!
Se noteaza cu a ( n) := si se incearca din nou aplicarea
n 2
4 ( n!)
criteriului raportului:
a ( n + 1)
lim 1
n∞ a ( n )
n a ( n) − 1 1
lim
n∞ a ( n + 1) 2
Cum limita aflata anterior este mai mica strict decat 1, seria data este
divergenta conform criteriului Raabe-Duhamel.
91
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
∞ n2
n + 5 n + 1
2
3.
n + 3
2
n=1
n2
n + 5n + 1 2
Se noteaza cu a ( n) := si se aplica criteriul radacinii.
n 2 + 3
n 5
lim a ( n) e
n∞
Deoarece limita aflata anterior este strict mai mare decat 1, seria este
divergenta conform criteriului radacinii.
∞
4. 1 − sin 1
n=1
n
n
1
.
3
n=1 n
Notand
1
u ( n) :=
1
− sin si v ( n) :=
1
, se evalueaza limita
n n n
3
u ( n) 1
lim .
n ∞ v ( n) 6
1
Dar este un caz particular al seriei armonice generalizate
3
n=1 n
92
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
∞ ∞
1 1
cu α > 1 , deci este convergenta. Asadar si
α 3
n=1 n n=1 n
∞
1 − sin 1
n=1
n
n
este convergenta.
93
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
Exemplul 1
n ( n!)
( −1) x
( 2 n)!
n=1
2
n ( n!)
Se noteaza sirul coeficientilor seriei de puteri cu a ( n) := ( −1)
( 2 n)!
Se determina raza de convergenta a seriei de puteri ca fiind limita din
modulul raportului a doi termeni consecutivi ai sirului a(n)
a ( n)
R := lim 4
n ∞ a ( n + 1)
Cum valoarea razei de convergenta este 4, seria de puteri este absolut
convergenta pe (-4,4) si este uniform si absolut convergenta pe orice
subinterval [a,b] al intervalului (-4; 4). Se analizeaza in mod separat
convergenta seriei numerice obtinute pentru valorile lui x in capetele
intervalului (-4,4).
∞ ( n!) 2 n
Astfel pentru x=-4, seria devine:
n=1
4
( 2 n)! . Seria numerica astfel
2
( n!) n
obtinuta are termenul general b ( n) := 4 pozitiv.
( 2 n)!
b ( n + 1) 1
Cum simplify + 1 >1, deducem ca sirul b(n) este
b ( n) 2n + 1
crescator. In plus, b ( 1) = 2 si deci sirul b(n) nu tinde la zero. Asadar nu
este indeplinita conditia necesara de convergenta a unei serii numerice. Se
concluzioneaza ca pentru valoarea x=-4, seria este divergenta.
∞ n
2
n ( n!)
Pentru x=4, seria de puteri devine: ( −1) 4
( 2 n)!
n=1
94
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
Seria astfel obtinuta este o serie alternata si, pastrand notatiile anterioare, de
forma:
∞
n=1
( −1) n b ( n)
95
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
Exemplul 1
Sa se afle punctele de extrem local ale functiei: f ( x , y) := x 3 + y3 − 3 x y
2
f ( x , y) 3 x − 3 y
x
2
f ( x , y) 3 y − 3 x
y
Egalarea derivatelor partiale de mai sus cu 0, conduce la un sistem
neliniar, corespunzator intersectiei urmatoarelor curbe:
2
3x − 3y = 0
2
3y − 3x = 0
Aplicand metodele folosite la rezolvarea sistemelor neliniare, determinam
pentru inceput numarul si valoarea aproximativa a solutiilor sistemului
dat folosind metoda grafica. Se poate observa cu usurinta ca cele doua
ecuatii ale sistemului sunt ecuatiile unor parabole si ele se pot exprima in
forma explicita in felul urmator:
2
Prima ecuatie y1 ( x) := x
A doua ecuatie y2 ( x) := x sau y3 ( x) := − x
y1( x)
2
y2( x)
y3( x)
−2 0 2
−2
96
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
Graficele celor doua functii au doua puncte comune din care in mod
evident unul este originea sistemului de axe.
Aflarea punctelor de intersectie se face cu blocul Given- Find
x := 0 y := 0
Given
2
3x − 3y = 0
2
3y − 3x = 0
M1 := Find ( x , y)
0
M1 =
0
x := 1 y := 1
Given
2
3x − 3y = 0
2
3y − 3x = 0
M2 := Find ( x , y)
1
M2 =
1
2
f ( u , v) f ( u , v)
u 2
u v 6 u −3
Hf ( u , v) := Hf ( u , v)
2 −3 6 v
f ( u , v ) f ( u , v )
2
u v v
97
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
0 −3
Hf ( 0 , 0)
−3 0
Cum Hf ( 0 , 0) = −9 , rezulta ca matricea Hf calculata in M1 este nedefinita
ca semn, deci M1(0,0) nu este punct de extrem.
6 −3
Hf ( 1 , 1) ORIGIN 1
−3 6
Hf1 := submatrix ( Hf ( 1 , 1) , 1 , 1 , 1 , 1)
Hf1 = 6
Hf2 := Hf ( 1 , 1) = 27
Cum ambii minori sunt pozitivi rezulta ca Hf(1,1) este pozitiv definita,
asadar M2(1,1) este punct de minim local.
Reprezentarea grafica de mai jos confirma rezultatul obtinut:
M := CreateMesh ( f , −1 , 2 , −1 , 2 , 12 , 12)
98
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
Exemplul 2
Sa se afle punctele de extrem local ale functiei:
3 2
f ( x , y) := x + 3 x y − 30 x − 18 y + 5
Aflarea punctelor stationare:
2 2
f ( x , y) 3 x + 3 y − 30
x
f ( x , y) 6 x y − 18
y
Egalarea derivatelor partiale de mai sus cu 0, conduce la un sistem
neliniar, corespunzator intersectiei urmatoarelor curbe:
2 2
3 x + 3 y − 30 = 0
6 x y − 18 = 0
99
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
2
Y( t)
yy( x) −4 −2 0 2 4
−2
−4
X( t) , x
x := 0.98 y := 3.06
Given
2 2
x + y = 10
xy = 3
1
M1 := Find ( x , y) M1 =
3
x := 3.06 y := 0.98
Given
2 2
x + y = 10
xy = 3
3
M2 := Find ( x , y) M2 =
1
100
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
x := −0.98 y := −3.06
Given
2 2
x + y = 10
xy = 3
−1
M3 := Find ( x , y) M3 =
−3
x := −3.06 y := −0.98
Given
2 2
x + y = 10
xy = 3
−3
M4 := Find ( x , y) M4 =
−1
M1, M2, M3, M4 aflate reprezinta punctele stationare ale functiei f.
Pentru a verifica care dintre aceste puncte sunt puncte de extrem,
scriem expresia matricii hessiene in fiecare din cele patru puncte si
verificam daca matricea este pozitiv definita, negativ definita, sau
nedefinita ca semn. Deoarece pe parcursul acestui exercitiu
variabilelor x si y le-au fost atribuite diferite valori numerice, se
renoteaza in expresia hessienei variabila x cu a si y cu b.
2
f ( a , b) f ( a , b)
a 2
a b
Hf ( a , b) :=
2
f ( a , b ) f ( a , b )
2
a b b
6a 6b
Hf ( a , b)
6b 6a
101
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
Pentru M1(1,3):
6 18
Hf ( 1 , 3)
18 6
Hf ( 1 , 3) = −288
Cum minorul principal de ordin unu este 6, iar minorul principal de ordin 2
este negativ, rezulta ca M1 nu este punct de extrem.
Pentru M2(3,1):
18 6
Hf ( 3 , 1)
6 18
Hf ( 3 , 1) = 288
Minorul principal de ordin unu este 18 (pozitiv), iar minorul principal de
ordin 2 este 288 (pozitiv), deci Hf(3,1) este pozitiv definita, de unde rezulta
ca M2 este punct de minim local.
Pentru M3(-1,-3):
−6 −18
Hf ( −1 , −3)
−18 −6
Hf ( −1 , −3) = −288
Ambii minori fiind negativi rezulta ca Hf(-1,-3) este nedefinita ca semn,
deci M3 nu este punct de extrem.
Pentru M4(-3,-1):
−18 −6
Hf ( −3 , −1)
−6 −18
Hf ( −3 , −1) = 288
Minorul principal de ordin unu este -18, negativ, iar minorul de
ordin doi este pozitiv, atunci Hf(-3,-1) este negativ definita, deci
M4(-3,-1) este punct de maxim local.
102
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
M := CreateMesh ( f , −4 , 4 , −2 , 2 , 16 , 8)
103
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
f ( x , y , z) 2 x − y + 1
x
f ( x , y , z) 2 y − x
y
f ( x , y , z) 2 z − 2
z
Se observa ca, prin egalarea cu 0 a fiecarei derivate partiale a functiei f,
se obtine un sistem liniar de trei ecuatii cu trei necunoscute.
2 −1 0
A := −1 2 0
0 0 2
Determinantul sistemului este nenul: A =6
−1
b := 0
2
Solutia unica a acestui sistem va fi punct stationar pentru functia data.
104
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
−2
3
M := lsolve ( A , b) M 1
−3
1
2
f ( x , y , z)
x 2 f ( x , y , z) f ( x , y , z)
x y x z
2
Hf ( x , y , z) := f ( x , y , z) f ( x , y , z) f ( x , y , z)
2
x y y y z
f ( x , y , z) 2
x z f ( x , y , z) 2
f ( x , y , z)
y z z
2 −1 0
Hf ( x , y , z) −1 2 0
0 0 2
2 −1 0
Valoarea hessienei in M este: Hf − , − , 1 −1 2 0
2 1
3 3
0 0 2
Trebuie verificat daca matricea hessiana calculata in M este pozitiv
definita, negativ definita sau nedefinita ca semn. Pentru aceasta se
calculeaza semnul minorilor principali.
ORIGIN 1
105
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
2 1
Hf1 := submatrix Hf − , − , 1 , 1 , 1 , 1 , 1
3 3
2 1
Hf2 := submatrix Hf − , − , 1 , 1 , 2 , 1 , 2
3 3
2 1
Hf3 := submatrix Hf − , − , 1 , 1 , 3 , 1 , 3
3 3
Hf1 = 2
Hf2 = 3
Hf3 = 6
Cum toti minorii principali sunt pozitivi, matricea hessiana calculata in M
este pozitiv definita, punctul M fiind astfel punct de minim local. Valoarea
minima a functiei f se obtine calculand valoarea acesteia in punctul M.
2 1
f − , − , 1 −
4
3 3 3
106
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
F ( x , y , λ) λ + 2 x − 1
x
F ( x , y , λ) λ + 2 y − 1
y
F ( x , y , λ) x + y − 1
λ
Se obtine sistemul liniar:
2x + λ = 1
2y + λ = 1
x+y=1
2 0 1
Matricea sistemului este: A := 0 2 1 A = −4
1 1 0
1
Vectorul termenilor liberi este b := 1
1 .
1 2
Solutia acestui sistem este M := lsolve ( A , b) M 1
2
0
107
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
2
g2x ( x , y) := g ( x , y)
2
x
2
g2y ( x , y) := g ( x , y)
2
y
g2xy ( x , y) := g ( x , y)
x y
Diferentiala de ordin 2 a functiei g calculata in M1, aplicata unei perechi
(h1, h2) va fi:
1 1 1 1 1 1
d2gM1 ( h1 , h2) := g2x , h1 + 2 g2xy , h1 h2 + g2y , h2
2 2
2 2 2 2 2 2
2 2
d2gM1 ( h1 , h2) 2 h1 + 2 h2
Cum diferentiala de ordin 2 a functiei g calculata in M1 este pozitiv definita
(suma unor patrate perfecte), rezulta ca punctul M1 este punct de minim
conditionat al functiei initiale f.
108
4. GRAFICĂ ÎN MATHCAD
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
GRAFICA IN MATHCAD
Reprezentarea grafica a functiilor de o variabila
110
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
4. Cele doua locuri marcate care apar la colturile laturii de jos se completeaza
cu limitele intervalului de pe axa Ox pe care se doreste reprezentarea grafica.
Daca aceste locuri marcate sunt lasate necompletate programul foloseste
valorile setate implicit si va reprezenta grafic functia pe intervalul [-10, 10].
1
0.5
f ( x) 0
0.5
1
10 5 0 5 10
x
111
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
112
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
Dupa efectuarea celor doua modificari mentionate mai sus reprezentarea grafica
capata forma
1
0.5
f ( x)
10 5 0 5 10
0.5
1
2
1
f x 1 0 2 4 6
2
3
4
113
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
f ( x)
0 2 4 6
1
1 1
f ( x)
0 2 4 6
1 1
114
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
Pentru a reprezenta grafic doua (sau mai multe) functii in acelasi sistem de
axe, dupa ce s-a scris numele primei functii se tasteaza virgula si se scrie
numele urmatoarei functii.
Ca exemplu, reprezezentam grafic in acelasi sistem de axe, pe intervalul
[0, 2] functiile cos(x), sin(x), sin(2x).
1.2
0.9 1
cos ( x) 0.6
0.3
sin ( x)
0 2 4 6
sin ( 2 x) 0.3
0.6
0.9 1
1.2
Acest tip de reprezentare este este util pentru rezolvarea grafica a ecuatiilor
transcendente.
115
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
GRAFICA IN MATHCAD
Reprezentarea grafica a functiilor de o variabila
x
1. Se defineste functia F ( x)
2
x 1
ba
h h 0.1
n
i 0 n xi a i h
Fi F xi
116
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
3
2
1
Fi
2 1 0 2
2
3
xi
Fi
2 0 2
1
2
xi
117
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
GRAFICA IN MATHCAD
Reprezentarea grafica a functiilor de o variabila
lim f ( x) = c
x ∞
lim f ( x) 2 lim f ( x) 2
x ∞ x ∞
Deoarece limita functiei la minus infinit exista si este finita, graficul are
asimptota orizontala y = -2 la ramura spre minus infinit.
Deoarece limita functiei la plus infinit exista si este finita, graficul are
asimptota orizontala y = 2 la ramura spre plus infinit.
2 2
1
2 x
2
x 1 2 0 2
1
2 2
118
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
GRAFICA IN MATHCAD
Reprezentarea grafica a functiilor de o variabila
Exemplul 1
1
Se considera functia f ( x)
2
x 3 x 2
1
f ( x)
( x 1) ( x 2)
20
1 2
10
1
2
x 3 x2 0 1 2 3 4
10
20
119
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
Exemplul 2.
1
g ( x)
( x 1) ( x 2) ( x 3)
y 20 19.9 20
20
g ( x) 10
y
y
0 1 2 3 4
y
10
20
120
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
GRAFICA IN MATHCAD
Reprezentarea grafica a functiilor de o variabila
lim f ( x) lim f ( x)
x a x a
este infinita.
Asimptote orizontale
121
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
lim f ( x) ∞ lim f ( x) ∞
x ∞ x ∞
lim [ f ( x) ( m x n) ] = 0
x ∞
f ( x)
m= lim
x ∞ x
n= lim ( f ( x) m x)
x ∞
Definitie si formule analoage pentru cazul cand se inlocuiste plus infinit cu minus
infinit.
Pentru functia data se obtine
f ( x)
m lim 3 n lim ( f ( x) m x) 6
x ∞ x x ∞
deci functia f(x) are ca asimptota oblica la ramura spre plus infinit dreapta
y ( x) 3 x 6
Rezultat analog pentru ramura spre minus infinit.
122
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
Reprezentarea grafica
100
2
50
f ( x)
y ( x) 4 2 0 2
50
100
123
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
GRAFICA IN MATHCAD
Reprezentarea grafica a functiilor de o variabila
x
sin ( x) =
10
0.75
0.5
sin ( x) 0.25
x
10 9 8 7 6 5 4 3 2 1 0 1 2 3 4 5 6 7 8 9 10
10 0.25
0.5
0.75
1
x
Variabila x
Pentru obtinerea reprezentarii grafice de mai sus graficul trebuit formatat asa
cum se arata in ferestrele de mai jos.
Axele sunt in cruce (crossed).
La ambele axe se selecteaza "Grid lines" si se deselecteaza "Auto Grid"
La axa Ox se completeaza "Number of Grids" (numarul de linii paralele cu
axa Ox) cu 20.
124
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
125
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
GRAFICA IN MATHCAD
Reprezentarea grafica a curbelor in spatiu
a cos ( t)
a 2 b 3 F ( t) a sin ( t)
b t
Pentru aparitia liniilor care unesc punctele se da dublu click pe zona grafica pentru
aparitia ferestrei 3-D Plot Format. In aceasta se apasa butonul Appearance si se
activeaza optiunile Lines si Colormap.
126
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
127
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
GRAFICA IN MATHCAD
Reprezentarea grafica a curbelor in spatiu
Functia CreateSpace
unde:
F - este numele unei functii vectoriale de variabila reala t.
t0 - este limita inferioara a domeniului variabilei independente t (valoarea
implicita este -5).
t1 - este limita superioara a domeniului variabilei independente t (valoarea
implicita este 5).
tgrid - reprezinta numarul intreg de puncte create pentru variabila t (valoare
implicita 20).
fmap - este o functie care defineste o transformare de coordonate de la oricare
alt sistem la sistemul cartezian (implicit este functia identica).
a cos ( t)
a 2 b 3 F ( t) a sin ( t)
b t
t0 10 t1 10 tgrid 100
128
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
129
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
GRAFICA IN MATHCAD
Reprezentarea grafica a suprafetelor
3. Se scrie numele functiei (fara variabile) in locul marcat aflat in partea stanga
jos a zonei grafice.
130
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
131
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
In acest mod de reprezentare grafica (QuickPlot), dupa cum s-a mentionat si mai
sus, Mathcad-ul foloseste setarile implicite de care dispune. Acesta inseamna ca
variabilele x si y iau valori de la -5 la 5 cu pasul de crestere 0.5. Valorile de pe axa
Oz sunt calculate cu formula de definitie a functiei F in punctul (x,y), adica z =
F(x,y).
132
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
GRAFICA IN MATHCAD
Reprezentarea grafica a suprafetelor
Functia CreateMesh
unde:
F - este numele unei functii reale de doua variabile reale x si y.
x0 - este limita inferioara a domeniului variabilei independente x (valoarea
implicita este -5).
x1 - este limita superioara a domeniului variabilei independente x (valoarea
implicita este 5).
y0 - este limita inferioara a domeniului variabilei independente y (valoarea
implicita este -5).
y1 - este limita superioara a domeniului variabilei independente y (valoarea
implicita este 5).
xgrid - reprezinta numarul intreg de puncte create pentru variabila x (valoare
implicita 20).
ygrid - reprezinta numarul intreg de puncte create pentru variabila y (valoare
implicita 20).
fmap - este o functie care defineste o transformare de coordonate de la oricare
alt sistem la sistemul cartezian (implicit este functia identica)
133
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
134
5. CALCUL SIMBOLIC ÎN MATHCAD
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
1
2
1 − x dx = 0.7854
0
Semnul de evaluare simbolica are functii analoage semnului egal " = " din
calculele numerice. Este comanda pentru evaluarea simbolica a unei expresii.
136
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
Diferenta dintre cele doua butoane asemanatoare care se vad pe aceasta bara
este urmatoarea:
Daca s-a scris o expresie si se doreste evaluarea sa simbolica se apasa
butonul .
137
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
138
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
139
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
3
2 2
x dx yields x
3
d2 −1
x yields
dx
2 3
2
4x
n
1 2 1 1
k yields ( n + 1) − n −
2 2 2
k=1
10
k=1
k yields 3628800
1
π
acos ( 0) yields
2
140
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
−1 −b
a b d
yields
c d ( a d − b c) ( a d − b c)
−c a
( a d − b c) ( a d − b c)
Cuvantul cheie float din Symbolic Keyword Tookbar realizeaza acelasi tip
de evaluare.
float ,
Primul loc marcat se completeaza cu expresia de evaluat, iar in al doilea se
indica numarul de zecimale care trebuie sa fie afisat dupa punctul zecimal.
acos ( 0) float ,
e float , 30 2.71828182845904523536028747135
141
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
) + i − signum ( i) π
ln ( i) evaluation over the complex plane ( 1 1
ln i
yields 2 2
142
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
143
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
simplify
2 2 2
2 sin ( x) + 3 cos ( x) simplify cos ( x) + 2
2
x − 3x − 4
+ 2 x − 5 simplifies to 3x − 4
x−4
2 ln ( x) 2
e simplifies to x
2
1125 a b simplifies to 15 5 a b
5! simplifies to 120
1
asin ( 1) simplifies to π
2
3 5 13
+ simplifies to
4 2 4
144
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
6
( x + y) expands to
6 5 4 2 3 3 2 4 5 6
x + 6 x y + 15 x y + 20 x y + 15 x y + 6 x y + y
( x 2 + 1) ( y2 + 2) expands to 2 2
x y + 2x + y + 2
2 2
3
cos ( 3 x) expands to 4 cos ( x) − 3 cos ( x)
2 3
sin ( 3 x) expand , x 3 cos ( x) sin ( x) − sin ( x)
3 3 2 2 3
( a + b) expand , a a + 3 a b + 3 a b + b
145
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
4 3 2 2 3 4 4
x + 4x y + 6x y + 4xy + y by factoring, yields ( x + y)
2 2 2
x y + 2x + y + 2
2
by factoring, yields ( x 2 + 1) ( y2 + 2)
Daca expresia de factorizat este un intreg, atunci acesta este descompus in
factori primi (adica este scris ca produs de puteri de numere prime).
3
375 by factoring, yields ( 3) ( 5)
3
145750 by factoring, yields ( 2) ( 5) ( 11) ( 53)
4 3
x +x −x +x−2
2
by factoring, yields (
( x − 1) ( x + 2) x + 1
2 )
1
+
x
−
2x
by factoring, yields
( 2
− 2x − 9x − 6 + x
3 )
x−1 x+3 x+2 [ ( x − 1) [ ( x + 3) ( x + 2) ] ]
146
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
a b + a c + x by factoring, yields a b + a c + x
a b + a c + x by factoring, yields a ( b + c) + x
In expresia de mai jos, care contine suma a trei fractii, pentru a aduce la acelasi
numitor pe primele doua acestea se selecteaza aceste fractii si se da comanda
Factor.
1
+
x
−
2x
by factoring, yields
(3 + x 2) −
2x
x−1 x+3 x+2 [ ( x + 3) ( x − 1) ] x+2
147
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
Comanda Collect din meniul Symbolics grupeaza termenii care contin puterile
asemenea ale expresiei selectate. Expresia poate sa fie o variabila sau o functie
impreuna cu argumentul sau. Rezultatul este un polinom in expresia selectata.
2 2 2
De exemplu, fie expresia x − a y x + 2 y x − x y
2 2 2
x − a y x + 2 y x − x y by collecting terms, yields
2 ( 2
( 1 − a y) x + 2 y − y x )
In schimb, daca selectam variabila y, avem
2 2 2
x − a y x + 2 y x − x y by collecting terms, yields
2 ( 2 )
2 y x + −a x − x y + x
2
2 2 2 2 (
x − a y x + 2 y x − x y collect , x ( 1 − a y) x + 2 y − y x
2 )
2 2 2 2 ( 2
x − a y x + 2 y x − x y collect , y 2 x y + −a x − x y + x ) 2
148
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
0
3 2
2 ( x + y) − 5 ( x + y) + 4 ( x + y) has coefficients 4
−5
2
0
cos ( x) + 4 cos ( x)
3
has coefficients 1
0
4
149
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
3
−7
5 x − 2 x + x − 7 x + 3 coeffs , x −2
4 2 3
1
5
4x + 4y
2 ( x + y) − 5 ( x + y) + 4 ( x + y) coeffs , x + y
3 2 0
−5
2
150
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
Symbolics/Variable/Solve
Solve - gaseste valorile variabilei selectate care face egala cu zero expresia
din care face parte variabila. Cu alte cuvinte rezolva in raport cu variabila
respectiva ecuatia data de expresia considerata egalata cu zero. Daca variabila
selectata face parte dintr-o ecuatie sau inecuatie aceasta comanda rezolva
ecuatia sau inecuatia respectiva. Raspunsurile care constau in mai multe
valori sunt afisate sub forma unui vector.
* Se scrie expresia.
* Se selecteaza variabila in raport cu care se doreste determinarea solutiilor
expresiei date.
* Se da comanda comanda Symbolics/Variable/Solve sau se foloseste
cuvantul cheie solve din Symbolic Keyord Toolbar.
Observatie. Nu este necesar ca expresia care da ecuatia sa fie egalata cu zero.
Daca nu gaseste semnul egal Mathcad persupune ca expresia este egala cu
zero.
2 1
x − 4 x + 3 solve , x
3
(
1 −b + b 2 − 4 a c )
2
a x + b x + c has solution(s) ( 2 a)
1
( 2 )
( 2 a) −b − b − 4 a c
151
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
Symbolic/Variable/Substitute
2 2 2 2
z + by substitution, yields ( x + 3 a) +
z ( x + 3 a)
2 2 3 − cos ( 2 x)
y + y + 1 substitute , y = sin ( x) sin ( x) +
2
Symbolic/Variable/Differentiate
2 5 2 4
x y by differentiation, yields 5x y
2 5
x y by differentiation, yields 2xy
5
152
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
Symbolic/Variable/ Integrate
2 3 2 3 3
2x + y by integration, yields x + xy
3
1 1 1
expands in partial fractions to −
2
x − 3x + 2 x−2 x−1
5 1
( x 3 − 5 x 2 + 4 x − 2) expands in partial
2x −
2
−
x−
2
4 2 2 2
x +x +1 fractions to x +x+1 x −x+1
Acelasi rezultat se poate obtine si folosind cuvantul cheie parfrac din bara
Symbolic.
5 1
( x 3 − 5 x 2 + 4 x − 2) parfrac
2x −
2
−
x−
2
4 2 2 2
x +x +1 x +x+1 x −x+1
49
5 4 3 x−
x − 3x + 2x − 1 8 1 97
parfrac x − − + −3
4
x − 16
2
x +4 32 ( x − 2) 32 ( x + 2)
153
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
Exemple
sin ( x) converts to the x−
1 3
x +
1 5
x + O x
6 ( )
series 6 120
cos ( x) converts to the
series
1−
1 2 1 4
x + x −
1 6
x +
1 8
x + O x
10 ( )
2 24 720 40320
Observatii:
Comanda Expand to Series... este limitata la seriile de o singura variabila.
Orice alta variabila din expresie este tratata ca o constanta.
154
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
sin ( x)
converts to the x
( − 1) − 1 x + 1 x 3 + O ( x 4)
2 6 120
x series
Cuvantul cheie series - dezvolta in serie o expresie de una sau mai multe
variabile in jurul punctelor specificate. Implicit dezvoltarea este un polinom
de grad mai mic ca sase.
series , ,
Locurile marcate se completeaza, in ordine, cu:
• numele functiei
• punctul in jurul caruia se dezvolta functia
• numarul de termeni ai dezvoltarii
2 4
x x
cos ( x) series , x = 0 1 − +
2 24
2 4
x x
cos ( x) series , x = 0 , 6 1 − +
2 24
2 4 6
x x x
cos ( x) series , x = 0 , 7 1 − + −
2 24 720
x − π x − π
3 5
π π 2 2
cos ( x) series , x = −x+ −
2 2 6 120
x − π
3
π π 2
cos ( x) series , x = , 4 − x +
2 2 6
2 3
2 x −
1
8 x −
1
1 2x
1 3
ln ( 1 + x) series , x = , 4 ln − + −
2
+
2
2 2 3 3 9 81
155
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
Dezvoltarea aceleiasi functii in jurul punctului (1, 2), cu grad mai mic ca 2.
x+y 3 3 3
e series , x = 1 , y = 2 , 2 e + e ( y − 2) + e ( x − 1)
156
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
Calculul sumelor
Aceasta nu este altceva decat dezvoltarea conform binomului lui Newton a lui
3
( x 2) .
Pentru a evalua numeric aceasta functie trebuie data valoarea lui x in care se
face calculul. De exemplu
F ( 3) 125 F ( 3) 1
Evaluarea simbolica a aceleiasi expresii conduce insa la obtinerea dezvoltarii lui
3
( x 2) .
3
3 k 3k
3 2
k ( 3 k) x 2 x 6 x 12 x 8
k0
157
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
2 3 n
1 q q q .... q
100
1 773066281098016996554691694648431909053161283001
k
515377520732011331036461129765621272702107522001
1.5
k0 3
100
1
k
1.5
k0 3
Obtinem ∞
k
x ∞ if 1 x
k0 1
if x 1 x 1
x1
158
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
De exemplu
∞ k ∞ k
1 2 1 3
2
3
4
k0 k0
∞ ∞
k k
1 ∞ 2 ∞ Rezultate corecte!
Seriile sunt divergente si au suma infinita.
k0 k0
∞ ∞
k k
( 1) undefined ( 2) undefined
k0 k0
Rezultate corecte!
Seriile sunt divergente si nu au suma pentru x 1
2 3 n
x x x x
1 .... ....
1 2 3 n
∞ n
x
x
e
n
n0
159
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
2 4 6 8 n 2 n
x x x x ( 1) x
1 .... ....
2 4 6 8 ( 2 n)
∞ n 2 n
( 1) x
( 2 n)
cos ( x)
n0
3 5 7 8 n 2 n1
x x x x ( 1) x
x .... ....
3 5 7 8 ( 2 n 1)
∞ n 2 n1
( 1) x
( 2 n 1)
sin ( x)
n0
160
Dan Caragheorgheopol Nicolae Danet Daniel Tudor
UTILIZAREA CALCULATOARELOR
Calculul produselor
=
Exemple.
k =0
( 2 k + 1) 654729075
k =1
( 2 k) 3715891200
k =1
k 3628800
Daca in loc de un numar concret, cum este mai sus 10, se considera un numar
natural n atunci se obtine:
n
k =1
k n!
161