Upload
others
View
7
Download
0
Embed Size (px)
Citation preview
Universitatea Transilvania din BrasovFacultatea de Stiinte
Catedra de Informatica
E. SCHEIBERS. DUMITRESCU V. MONESCU
Laborator de ANALIZA NUMERICA
SCILAB & MathCAD
Brasov
2
Cuprins
I Scilab 5
1 Elemente de programare ın SCILAB 71.1 Obiecte Scilab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71.2 Elemente de programare in Scilab . . . . . . . . . . . . . . . . . . . . 121.3 Functii(subprograme) ın Scilab . . . . . . . . . . . . . . . . . . . . . 131.4 Grafica ın Scilab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141.5 Java cu Scilab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2 Rezolvarea sistemelor algebrice de ecuatii liniare 21
3 Rezolvarea sistemelor si ecuatiilor algebrice 253.1 Rezolvarea sistemelor algebrice de ecuatii neliniare . . . . . . . . . . 253.2 Rezolvarea ecuatiilor algebrice . . . . . . . . . . . . . . . . . . . . . . 273.3 Rezolvarea ecuatiilor polinomiale . . . . . . . . . . . . . . . . . . . . 28
4 Rezolvarea problemelor de interpolare 314.1 Interpolare polinomiala . . . . . . . . . . . . . . . . . . . . . . . . . 314.2 Interpolare cu functii spline cubice . . . . . . . . . . . . . . . . . . . 33
5 Metoda celor mai mici patrate 35
6 Integrare numerica 396.1 Integrarea functiilor de o variabila reala . . . . . . . . . . . . . . . . 396.2 Calculul numeric al integralelor duble . . . . . . . . . . . . . . . . . 41
7 Integrarea numerica a e.d.o. 477.1 Rezolvarea problemelor Cauchy . . . . . . . . . . . . . . . . . . . . . 47
7.1.1 Aplicatie: rezolvarea sistemelor algebrice neliniare . . . . . . 497.2 Rezolvarea problemelor bilocale . . . . . . . . . . . . . . . . . . . . . 51
8 Tranformata Fourier discreta 57
3
4 CUPRINS
II MathCAD 59
9 Prezentare generala 619.1 Efectuarea calculelor numerice . . . . . . . . . . . . . . . . . . . . . 62
9.1.1 Operatori MathCAD . . . . . . . . . . . . . . . . . . . . . . . 629.1.2 Identificatori MathCAD . . . . . . . . . . . . . . . . . . . . . 639.1.3 Constante MathCAD . . . . . . . . . . . . . . . . . . . . . . 639.1.4 Tipuri de date MathCAD . . . . . . . . . . . . . . . . . . . . 649.1.5 Vectorizare . . . . . . . . . . . . . . . . . . . . . . . . . . . . 699.1.6 Unitati de masura . . . . . . . . . . . . . . . . . . . . . . . . 70
9.2 Reprezentari grafice . . . . . . . . . . . . . . . . . . . . . . . . . . . 719.3 Crearea unei animatii . . . . . . . . . . . . . . . . . . . . . . . . . . 739.4 Editare de text . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 749.5 Salvarea / restaurarea datelor numerice . . . . . . . . . . . . . . . . 749.6 Instrumente de calcul simbolic . . . . . . . . . . . . . . . . . . . . . 769.7 Elemente de programare functionala . . . . . . . . . . . . . . . . . . 799.8 Elemente de programare procedurala . . . . . . . . . . . . . . . . . . 80
10 Sisteme algebrice liniare 85
11 Sisteme si ecuatii algebrice 8711.1 Sisteme algebrice neliniare . . . . . . . . . . . . . . . . . . . . . . . . 8711.2 Rezolvarea ecuatiilor algebrice . . . . . . . . . . . . . . . . . . . . . . 8911.3 Rezolvarea ecuatiilor polinomiale . . . . . . . . . . . . . . . . . . . . 89
12 Rezolvarea problemelor de interpolare 9112.1 Interpolare polinomiala . . . . . . . . . . . . . . . . . . . . . . . . . 9112.2 Interpolare cu functii spline cubice . . . . . . . . . . . . . . . . . . . 93
13 Metoda celor mai mici patrate 95
14 Integrare numerica 9714.1 Integrare numerica . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9714.2 Calculul numeric al integralelor duble . . . . . . . . . . . . . . . . . 98
15 Integrarea numerica a e.d.o. 10115.1 Rezolvarea problemelor Cauchy . . . . . . . . . . . . . . . . . . . . . 10115.2 Rezolvarea problemelor bilocale . . . . . . . . . . . . . . . . . . . . . 105
16 Transformarea Fourier discreta 109
Part I
Scilab
5
Capitolul 1
Elemente de programare ınSCILAB
Cap. 2
Prezentam pe scurt elemente ale limbajului de programare utilizat ın produsulScilab. Elementele prezentate ın sectiunile urmatoare reprezinta doar ghid de uti-lizare rapida. Se presupune ca utilizatorul poseda cunostinte de programare, avandexperienta de lucru ın cel putin un limbaj de programare procedural.
Scilab este un produs de calcul numeric produs de INRIA – Franta – disponibilın mediile Windows si Linux. Produsul este distribuit gratuit. Produsul este ınsotitde o documentatie cuprinzatoare.
Ca produs informatic Scilab are trasaturi comune cu produsul comercial Matlab.
1.1 Obiecte Scilab
• Constante
Tip Mnemonic Valoarereal %pi π
real %e e%inf ∞
complex %i iboolean %t trueboolean %f false
• Literali
7
8 CAPITOLUL 1. ELEMENTE DE PROGRAMARE IN SCILAB
– Literali numericiExemple:1. Numarul real 10,23 se poate scrie:10.23=0.1023e+2=0.1023E+2=1023e-2=1023E-2.2. Numarul complex 1 + 5i se scrie 1 + 5 ∗%i.
– Literali nenumericiUn caracter sau un sir se caractere – string – se defineste (scrie):
’c’ sau ”c”’string’ sau ”string”
• Polinoame si functii rationale
Scilab poseda o modalitate deosebita de lucru cu polinoame definite peste Rsau C.
Pentru a defini un polinom ın nedeterminata (variabila) X se poate defini ıntainedeterminata
X=poly(0,’X’);
iar apoi polinomul se introduce nemijlocit, de exemplu
p=X^2+3*X+2
Altfel, un polinom se defineste prin intermediul functiei Scilab poly
polinom=poly(vector, nedeterminata, [string ])
Daca vector = (a1, a2, . . . , an) si string=’coef’ atunci se obtine polinomul degrad n− 1
polinom = a1 + a2X + . . . + anXn−1,
iar daca string=’roots’ atunci se obtine polinomul de grad n
polinom = (X − a1)(X − a2) . . . (X − an)
A doua varianta este cea implicita.
v=[1,2,3];p=poly(v,’X’)p=
-6 + 11X - 6X^2 +X^3q=poly(v,’X’,’coef’)q=
1 + 2X + 3X^2
1.1. OBIECTE SCILAB 9
Daca A este o matrice patrata atunci poly(A, ’X’) genereaza polinomul car-acteristic matricei A, adica det(X · I −A).
Daca p si q sunt doua polinoame ın nederminata X atunci p/q defineste ofunctie rationala.
Scilab efectueaza operatiile uzuale cu polinoame si functii rationale ın modsimbolic.
Daca r este o functie rationala atunci r(’num’) furnizeaza numaratorul si r(’den’)furnizeaza numitorul lui r.
• Functii matematice uzuale:
Mnemonic Semnificatie Mnemonic Semnificatieabs(x) |x| exp(x) ex
log(x) ln(x) log10(x) lg(x)sin(x) sin(x) asin(x) arcsin(x)sinh(x) sh(x) asinh(x) arcsh(x)cos(x) cos(x) acos(x) arccos(x)cosh(x) ch(x) acosh(x) arcch(x)tan(x) tg(x) atan(x) arctg(x)tanh(x) th(x) atanh(x) arcth(x)cotg(x) ctg(x) coth(x) cth(x)erf(x) 2√
π
∫ x0 e−t2dt gamma(x) Γ(x) =
∫∞0 tx−1e−tdt
gammah(x) ln Γ(x) dlgamma(x) Γ′(x)Γ(x)
• Matrice
– Definirea unei matrice.Exemplu: Matricea
a =(
1 2 34 5 6
)se defineste ın Scilab prin
a=[1,2,3;4,5,6]
Elementele unei linii se pot separa prin virgula sau spatiu. Elementeleunei matrice pot fi: constante/variabile numerice, constante booleene,siruri de caractere, polinoame, functii rationale.O progresie aritmetica, interpretat ca un vector linie (adica o matrice cuo singura linie) se poate defini prin
prog=primulElement : pas : margine
10 CAPITOLUL 1. ELEMENTE DE PROGRAMARE IN SCILAB
Daca pas=1 atunci parametrul poate fi omis.Exemplu. Prograsiile aritmetice a = 0.2, 0.6, 1.0, 1.4, 1.8 si b = 0,−1,−2,−3,−4se obtin prin
a=0.2 : 0.4 : 2a=
! 0.2 0.6 1.0 1.4 1.8 !b=-1 : -1 : -4b=
! -1 -2 -3 -4 !
Functia Scilab size(variabilaMatrice) returneaza numarul liniilor si numarulcoloanelor variabileiMatrice.
– Definirea unei matrice rara se face cu functia Scilab
a=sparse([l1, c1; l2, c2; . . .], [v1, v2, . . .])
unde ali,ci= vi. ∀i.
Functia full(a) afiseaza o matrice rara a ın formatul obisnuit.
– Matrice speciale.
∗ zeros(m, n) defineste o matrice nula cu m linii si n coloane;∗ ones(m,n) defineste o matrice cu toate elementele egale cu 1 avand
m linii si n coloane;∗ eye(m,n) defineste o matrice unitate cu m linii si n coloane;
– Selectarea unui element se obtine prin sintaxa
variabilaMatrice(numarLinie, numarColoana)
Prima linie si prima coloana are numarul de ordine 1.
– Operatori matriceali.
Simbol Semnificatie+ adunare- scadere∗ ınmultire de matrice.∗ ınmultire pe componenteˆ ridicare la putere prin produs matriceal.ˆ ridicarea la putere a componentelor\ a\b = a−1 · b. \ a.\b = ( bi,j
ai,j)i,j
/ b/a = b · a−1
. / b/a = ( bi,j
ai,j)i,j
’ transpunere
1.1. OBIECTE SCILAB 11
– Extinderea unei matrice. Date fiind o matrice a si un vector linie v
∗ adaugarea liniei v ca prima linie a matricei a se obtine prin
[v; a]
∗ adaugarea liniei v ca ultima linie a matricei a se obtine prin
[a; v]
∗ adaugarea vectorului v ca prima coloana a matricei a se obtine prin
[v; a′]′
∗ adaugarea vectorului v ca ultima coloana a matricei a se obtine prin
[a′; v]′
– Extragerea unei submatrice. O zona compacta fixata prin liniile l1 : l2si coloanele c1 : c2, inclusiv, se extrage din matricea a prin
a(l1 : l2, c1 : c2)
Pentru extragerea unei zone necompacte – aflata la intersectia liniilorl1, l2, . . . , lp cu coloanele c1, c2, . . . , cq – dintr-o matrice a avand m linii sin coloane se definesc vectori linie
lin = (lini)1≤i≤m, lini ={
%t daca i ∈ {l1, . . . , lp}%f ın caz contrar
col = (colj)1≤j≤n, colj ={
%t daca j ∈ {c1, . . . , cq}%f ın caz contrar
Extragerea rezulta dina(lin, col)
Comenzile a(:, $) si a($, :) extrag din matricea a ultima coloana, respectivultima linie.
• Lista. O lista se defineste prin
list(e1, e2, . . . , en)
unde ei sunt obiecte Scilab.
Exemplu.
12 CAPITOLUL 1. ELEMENTE DE PROGRAMARE IN SCILAB
l=list(1,%t,’abc’,[1,2;3,4])l=
l(1)1
l(2)T
l(3)abc
l(4)! 1. 2. 3. 4. !
Al i-lea element al unei liste l este accesibil cu l(i).
l(i)=null sterge al i-lea element din lista l.
1.2 Elemente de programare in Scilab
• Instructiunea de atribuire
variabila = expresie
• Instructiuni conditionate
1.
if conditie theninstructiuni
elseif conditie theninstructiuni
elseinstructiuni
end
2.
select expresiecase expresie1 then instructiuni
...else
instructiuniend
case si then trebuie scrise pe aceeasi linie.
• Instructiuni de ciclare
1.
1.3. FUNCTII(SUBPROGRAME) IN SCILAB 13
for n = n1 : pas : n2, instructiuni, end
Daca pas = 1, atunci acest parametru este optional.
2.
while conditie
,dothen
instructiuni, end
while si do sau then trebuie scrise pe aceasi linie.
Instructiunea break realizeaza un salt neconditionat la prima instructiuneaflata dupa instructiunea de ciclare.
Pentru exprimarea conditiilor se utilizeaza
Operatori relationali Operatori logiciSimbol Semnificatie Simbol Semnificatie
== = & si∼= 6= | sau<= ≤ ∼ negatia< <
>= ≥> >
Fiecare instructiune introdusa ın dreptul promptului Scilab este executata sirezultatul este afisat. Incheierea unei comenzi cu ; are ca efect inhibarea afisarii.
1.3 Functii(subprograme) ın Scilab
Functie definita ın linie de comanda.
deff(’[y1, . . . , yn]=f(x1, . . . , xm)’,[’y1 = expresie1’,. . .,’yn = expresien’])
O functie definita ın linie de comanda se salveaza
save(’cale\f .bin’,f)
Reıncarcarea se realizeaza prin
load(’cale\f .bin’)
Functii definite ın exterior. Cu un editor de fisiere se creaza subprogramul
function [y1, . . . , yn]=f(x1, . . . , xm)instructiuni Scilab
care se salveaza obligatoriu cu numele f .sciPentru a putea fi utilizata functia exterioara trebuie ıncarcata prin
14 CAPITOLUL 1. ELEMENTE DE PROGRAMARE IN SCILAB
getf(’cale\f.sci’,’c’)
Semnificatia celui de al doilea parametru ’c’ este aceea ca Scilab foloseste ınexecutie o forma compilata a subprogramului. Daca se utilizeaza ’n’ atunci codulsubprogramului este interpretat.
Functiile definite ın exterior pot fi organizate ın biblioteci. Astfel functiile Scilab– deci avand extensia .sci – aflate ıntr-un catalog localizat prin cale sunt reuniteıntr-o biblioteca prin comanda
genlib(’numeBiblioteca’,’cale’)
Prin aceasta operatie are loc compilarea functiilor si crearea unui fisier names cucuprinsul bibliotecii.
O biblioteca odata creata, resursele ei pot fi utilizate dupa reancarcarea ei prin
numeBiblioteca=lib(’cale’)
1.4 Grafica ın Scilab
Din multimea functiilor grafice ale produsului Scilab amintim
• plot2d. Cea mai simpla forma de utilizare este
plot2d(x, y)
unde
x =
x1,1 . . . x1,n
. . . . . . . . .xm,1 . . . xm,n
y =
y1,1 . . . y1,n
. . . . . . . . .ym,1 . . . ym,n
sunt doua matrice de acelasi tip. Functia construieste ın acelasi panou (fer-eastra grafica) graficele a n curbe ce trec respectiv prin punctele
(xi,j , yi,j)1≤i≤m, j ∈ {1, . . . , n}.
• fplot2d. Utilizarea functiei este
fplot2d(x, f)
unde
– x este un sir de numere reale;
– f este o functie Scilab
iar rezultatul este graficul functiei f construit pe baza valorilor ei ın punctelelui x.
1.5. JAVA CU SCILAB 15
1.5 Java cu Scilab
Resursele Scilab pot fi apelate dintr-un program Java.Presupunem ca Scilab este instalat ın catalogul %SCILAB HOME%.Legatura Java – Scilab se bazeaza pe pachetul %SCILAB HOME%\bin\javasci.Compilarea necesita prezenta ın variabila sistem classpath a caii %SCILAB HOME%\bin.Executia presupune:
• ca variabila classpath sa contina %SCILAB HOME%\bin;
• sa fie definita variabila sistem SCI=%SCILAB HOME%;
• prezenta fisierului %SCILAB HOME%\bin\javasci.dll ın catalogul de lucru.
Pachetul javasci contine clasele
• Scilab
• SciDouble
• SciDoubleArray
• SciString
• SciStringArray
Clasa Scilab
Clasa Scilab contine metodele statice
• public static void Event()
Genereaza un eveniment Scilab.
• public static boolean HaveAGrapg()
Returneaza true daca Scilab genereaza un grafic.
• public static boolean Exec(String job)
Executa o comanda Scilab. Returneaza true daca executia Scilab nu genereazaeroare.
16 CAPITOLUL 1. ELEMENTE DE PROGRAMARE IN SCILAB
Clasa SciDouble
Constructori
• public SciDouble(String name, SciDouble obj)
• public SciDouble(String name)
• public SciDouble(String name, double value)
Metode
• public String getName()
Returneaza numele obiectului din Scilab.
• public double getData()
Returneaza valoarea obiectului din Scilab.
• public void Get()
• public boolean Job(String job)
Executa job-ul ın Scilab.
• public void Send()
• public void disp()
Afiseaza obiectul.
Exemplul 1.1 de utilizarea a clasei SciDouble.
import javasci.*;
public class TstJavaSci1{
public static void main(String[] args) {
SciDouble U=new SciDouble("u");
System.out.println("Name : "+U.getName());
System.out.println("Value : "+U.getData());
SciDouble V=new SciDouble("v",1.0);
U.Job("u=v+1");
System.out.println("Value : "+U.getData());
U.disp();
SciDouble W=new SciDouble("w",V);
W.Job("w=10*w");
W.disp();
}
}
Exemplul 1.2 Calculul integralei unei functii.
1.5. JAVA CU SCILAB 17
import javasci.*;
public class TstJavaSci2{
public static void main(String[] args) {
SciDouble u=new SciDouble("U");
// Pentru ’ se tasteaza ’’ !
String scicomm="U=integrate(’’x.^2’’,’’x’’,0,1)";
boolean rez=Scilab.Exec(scicomm);
// Varianta
//boolean rez=u.Job(scicomm);
System.out.println("Error="+rez);
System.out.println("Integrala : "+u.getData());
}
}
Exemplul 1.3 Reprezentarea grafica a unei functii
import javasci.*;
public class TstJavaSci3{
public static void main(String[] args) {
String scicomm="x=-%pi:0.1:%pi;y=sin(x);plot(x,y)";
boolean rez=Scilab.Exec(scicomm);
System.out.println("Error="+rez);
try{
if(Scilab.HaveAGraph()){
System.out.println("Press a key to continue...");
System.in.read();
}
}
catch(Exception e){}
}
}
Clasa SciString
Constructori
• public SciString(String name, SciString obj)
• public SciString(String name)
• public SciString(String name, String string)
Metode
• public String getName()
Returneaza numele obiectului din Scilab.
• public String getData()
Returneaza valoarea obiectului din Scilab.
18 CAPITOLUL 1. ELEMENTE DE PROGRAMARE IN SCILAB
• public void Get()
• public boolean Job(String job)
Executa job-ul ın Scilab.
• public void Send()
• public void disp()
Afiseaza obiectul.
Exemplul 1.4 de utilizarea a clasei SciString.
import javasci.*;
public class TstJavaSci4{
public static void main(String[] args) {
SciString S=new SciString("s","String");
System.out.println("Name : "+S.getName());
System.out.println("Value : "+S.getData());
S.disp();
SciDouble U=new SciDouble("u");
S.Job("u=4*atan(1)");
System.out.println("Pi : "+U.getData());
}
}
Clasa SciDoubleArray
Constructori
• public SciDoubleArray(String name, SciDoubleArray obj)
• public SciDoubleArray(String name, int lin, int col)
• public SciDoubleArray(String name, int lin, int col, double[] vec-tor)
Metode
• public int getRow()
Returneaza numarul liniilor.
• public int getCol()
Returneaza numarul coloanelor.
• public String getName()
Returneaza numele obiectului din Scilab.
1.5. JAVA CU SCILAB 19
• public double[] getData()
Returneaza valoarea obiectului din Scilab.
• public void Get()
• public boolean Job(String job)
Executa job-ul ın Scilab.
• public void Send()
• public void disp()
Afiseaza obiectul.
• public double GetElement(int l, int c)
Returneaza elementul de pe pozitia (l, c).
Exemplul 1.5 de utilizarea a clasei SciDoubleArray.
import javasci.*;
public class TstJavaSci5{
public static void main(String[] args) {
double[] a={1,2,3,4,5,6};
// Atentie matricea se completeaza pe coloane !
SciDoubleArray A=new SciDoubleArray("a",2,3,a);
//SciDoubleArray A=new SciDoubleArray("a",2,3,new double[]{1,2,3,4,5,6});
System.out.println("Name : "+A.getName());
A.disp();
for(int i=1;i<=A.getRow();i++){
for(int j=1;j<=A.getCol();j++)
System.out.print(A.GetElement(i,j)+" ");
System.out.println();
}
SciDoubleArray B=new SciDoubleArray("b",3,2);
A.Job("b=a’’");
B.disp();
}
}
Clasa SciStringArray
Constructori
• public SciStringArray(String name, SciStringArray obj)
• public SciStringArray(String name, int lin, int col)
• public SciStringArray(String name, int lin, int col, String[] x)
20 CAPITOLUL 1. ELEMENTE DE PROGRAMARE IN SCILAB
Metode
• public int getRow()
Returneaza numarul liniilor.
• public int getCol()
Returneaza numarul coloanelor.
• public String getName()
Returneaza numele obiectului din Scilab.
• public String[] getData()
Returneaza valoarea obiectului din Scilab.
• public void Get()
• public boolean Job(String job)
Executa job-ul ın Scilab.
• public void Send()
• public void disp()
Afiseaza obiectul.
• public String GetElement(int l, int c)
Returneaza elementul de pe pozitia (l, c).
Capitolul 2
Rezolvarea sistemelor algebricede ecuatii liniare
Cap. 1 Cap. 3
Pentru rezolvarea unui sistem algebric de ecuatii liniare Ax = b, ın cazul ın care
• numarul ecuatiilor coincide cu numarul necunoscutelor;
• determinantul sistemului este diferit de zero;
se procedeaza dupa cum urmeaza:
1. se fixeaza matricele A si b;
2. se calculeaza x = A−1b.
Expresia A−1 se poate introduce ıntocmai (A^(-1)) sau se poate utiliza functiaScilab inv(A).
Functia Scilab det(A) calculeaza determinantul matricei A.
Exemplul 2.1 Sa se rezolve sistemul algebric de ecuatii liniarex1 + 2x2 + 3x3 + 4x4 = 112x1 + 3x2 + 4x3 + x4 = 123x1 + 4x2 + x3 + 2x4 = 134x1 + x2 + 2x3 + 3x4 = 14
21
22 CAPITOLUL 2. REZOLVAREA SISTEMELOR ALGEBRICE DE ECUATII LINIARE
Rezolvarea consta din
A = [1,2,3,4;2,3,4,1;3,4,1,2;4,1,2,3];b = [11;12;13;14];det(A)ans=
160x=inv(a)*bx=! 2 !! 1 !! 1 !! 1 !
In general, pentru sistemul algebric de ecuatii liniare Ax + b = 0, functia Scilab[x,k]=linsolve(A,b) calculeaza
1. x – o solutie particulara;
2. k – o baza a subspatiului liniar {x|Ax = 0}.
Solutia sistemului Ax + b = 0 este x + kc unde c este un vector oarecare a caruidimensiune coincide cu numarul coloanelor matricei k.
Daca sistemul este incompatibil atunci rezultatele sunt egale cu matricea vida[ ].
Exemplul 2.2 Sa se rezolve sistemul algebric de ecuatii liniarex + y + z + t = 10x + y − z + 2t = −85x + 5y − z − 4t = −4x + y + 3z + 4t = 28
Rezolvarea sistemului este
A=[1,1,1,1;1,1,-1,2;5,5,-1,-4;1,1,3,4];b=[10;-8;-4;28];det(A)ans=
0[x,k]=linsolve(A,-b)k=! .7071068 !
23
! - .7071068 !! 0. !! 0. !x=! .5 !! .5 !! 9. !! 0. !
24 CAPITOLUL 2. REZOLVAREA SISTEMELOR ALGEBRICE DE ECUATII LINIARE
Capitolul 3
Rezolvarea sistemelor siecuatiilor algebrice
Cap. 2 Cap. 4
3.1 Rezolvarea sistemelor algebrice de ecuatii neliniare
Pentru rezolvarea sistemului algebric de ecuatii neliniaref1(x1, . . . , xn) = 0. . . . . . . . . . . . . . . . . .fn(x1, . . . , xn) = 0
sau scris sub forma concentrata f(x) = 0 cu
x =
x1...
xn
f(x) =
f1(x1, . . . , xn)...
fn(x1, . . . , xn)
,
se utilizeaza functia Scilab
[x [,y [,info ] ] ]=fsolve(x0, f [,fjac [,tol ] ] )
unde semnificatia parametrilor este:
• x0 reprezinta o aproximatie initiala a solutiei sistemului.
25
26 CAPITOLUL 3. REZOLVAREA SISTEMELOR SI ECUATIILOR ALGEBRICE
• f identificatorul functiei Scilab care definette sistemul neliniarf(x) = 0.
• fjac identificatorul functiei Scilab al jacobianului finctiei f, adica
fjac(x) =
∂f1
∂x1(x) . . . ∂f1
∂xn(x)
. . . . . . . . .∂fn
∂x1(x) . . . ∂fn
∂xn(x)
• tol toleranta, parametrul utilizat ın testele de precizie (scalar real).
• x aproximatia calculata a solutiei sistemului algebric.
• y reprezinta valoarea functiei f calculata ın x; y = f(x).
• info indicatorul de raspuns al programului fsolve. In cazul rezolvarii cusucces, valoarea indicatorului este 1.
Astfel, rezolvarea consta din
1. definirea functei f (si eventual al jacobianului fjac);
2. apelarea functiei Scilab fsolve.
Exemplul 3.1 Sa se rezolve sistemul algebric de ecuatii neliniare10x1 + x2
1 − 2x2x3 − 0.1 = 010x2 − x2
2 + 3x1x3 + 0.2 = 010x3 + x2
3 + 2x1x2 − 0.3 = 0
Rezolvarea consta din:
deff(’q=f(p)’,[’x=p(1)’,’y=p(2)’,’z=p(3)’,’q(1)=10*x+x.^2-2*y.*z-0.1’,’q(2)=10*y-y.^2+3*x.*z+0.2’,’q(3)=10*z+z.^2+2*x.*y-0.3’])
p0=[0,0,0];[p,q,info]=fsolve(p0,f)info=
1.q=
1.0E-15*! - .2636780 !! .2775558 !! .9436896 !
3.2. REZOLVAREA ECUATIILOR ALGEBRICE 27
p=! .0098702 !! - .0200485 !! .0299499 !
3.2 Rezolvarea ecuatiilor algebrice
Daca n = 1, adica dimensiunea spatiului este 1, atunci f(x) = 0 cu f : I ⊂ R→R reprezinta o ecuatie algebrica.
Pentru rezolvarea ecuatiilor algebrice se utilizeaza de asemenea functia Scilabfsolve.
Exemplul 3.2 Sa se rezolve ecuatia 2x = x2.
Rezolvarea ecuatiei f(x) = 2x − x2 = 0 este
deff(’y=f(x)’,’y=2.^x-x.^2’)[x,y,info]=fsolve(1,f)info
1.y=
0.x=
2.
sau cu precizarea derivatei functiei f(x)
deff(’y=df(x)’,’y=(2.^ x).*log(x)-2*x’)[x,y,info]=fsolve(1,f,df)info=
1.y=
0x=
2.
Daca x0 = 5 atunci x = 4, iar pentru x0 = −1 gasim x = −0.7666647.
Graficul functiei f este reprezentat ın Fig. 1.
28 CAPITOLUL 3. REZOLVAREA SISTEMELOR SI ECUATIILOR ALGEBRICE
Fig. 1.
3.3 Rezolvarea ecuatiilor polinomiale
In cazul particular al ecuatiilor polinomiale se cere determinarea tuturor radacinilorreale sau complexe.
Pentru aflarea radacinilor unui polinom se procedeaza astfel:
1. Se defineste polinomul Scilab p de variabila x.
2. Radacinile polinomului p sunt calcutate ajutorul functiei Scilab
x=roots(p)
unde
• p este polinomul Scilab cu coeficienti reali sau complecsi de grad cel mult100.
• x este un tablou cu radacinile polinomului p.
Exemplul 3.3 Sa se determine radacinile polinomului p = x2 +2x3 +3x2 +2x+1.
3.3. REZOLVAREA ECUATIILOR POLINOMIALE 29
Rezolvarea consta din:
c=[1,2,3,2,1];p=poly(c,’x’,’coef’);x=roots(p)x=! - .5 + .8660254i !! - .5 - .8660254i !! - .5 + .8660254i !! - .5 - .8660254i !
30 CAPITOLUL 3. REZOLVAREA SISTEMELOR SI ECUATIILOR ALGEBRICE
Capitolul 4
Rezolvarea problemelor deinterpolare
Cap. 3 Cap. 5
Fie F o familie interpolatoare de ordin n pe axa reala. Dandu-se nodurile(xi)1≤i≤n si numerele (yi)1≤i≤n, daca ϕ ∈ F este functia de interpolare care sat-isface conditiile ϕ(xi) = yi, 1 ≤ i ≤ n, se cere sa se calculeze ϕ(z), unde z este unpunct dat.
4.1 Interpolare polinomiala
Pentru F = Pn−1 solutia problemei de interpolare Lagrange este polinomul
L(Pn−1;x1, . . . , xn; y1, . . . , yn)(z) =n∑
i=1
yi
n∏j=1
j 6=i
z − xj
xi − xj
Valoarea acestui polinom este calculat de functia Scilab
function f=lagrange(xd,x,y)[mx,nx]=size(x);[my,ny]=size(y);ierror=0;if (nx~=ny)|(mx~=1)|(my~=1),
31
32 CAPITOLUL 4. REZOLVAREA PROBLEMELOR DE INTERPOLARE
ierror=1;disp(’data dimension error’)abort
endxx=sort(x);for k=1:nx-1,
if xx(k)==xx(k+1),ierror=1;break,
endendif ierror~=0,
disp(’data error’)abort
end[m,n]=size(xd);f=zeros(m,n);p=zeros(m,n);q=zeros(m,n);w=ones(1,nx);for i=1:nx,
for j=1:nx,if i~=j,
w(i)=w(i)*(x(i)-x(j)),end
endendfor i=1:m,
for j=1:n,u=find(x==xd(i,j));if ~isempty(u),
f(i,j)=y(u);else
for k=1:nx,p(i,j)=p(i,j)+y(k)/(xd(i,j)-x(k))/w(k);q(i,j)=q(i,j)+1/(xd(i,j)-x(k))/w(k);
endf(i,j)=p(i,j)/q(i,j);
endend
end
4.2. INTERPOLARE CU FUNCTII SPLINE CUBICE 33
Semnificatiile parametrilor formali si a rezultatului sunt:
• xd este o matrice de numere. In fiecare element al matricei xd se calculeazavaloarea polinomului de interpolare Lagrange.
• x = (xi)1≤i≤n, sirul nodurilor de interpolare;
• y = (xi)1≤i≤n, sirul valorilor interpolate;
• f este o matrice de aceleasi dimensiuni ca xd si are ca elemente valorile poli-nomului de interpolare Lagrange calculate ın elementele corespunzatoare alematricei xd.
Programul de mai sus, pentru calculul valorii polinomului de interpolare La-grange, foloseste formula baricentrica.
Exemplul 4.1 Sa se calculeze L(Pn;x0, . . . , xn; f)(z) pentru
f(x) = x2
xi = i, i ∈ {0, 1, . . . , 5}z = 0.5, 3, 5, 10
Rezolvarea este:
deff(’y=fct(x)’,[’y=x^2’])getf(’c:\lucru\scilab\lagrange.sci’,’c’)x=0:5;y=fct(x);z=[0.5,3.5,10];f=lagrange(z,x,y)! 0.25 12.25 100 !
4.2 Interpolare cu functii spline cubice
Daca F = S3, multimea functiilor spline cubice atunci pentru rezolvarea proble-mei de interpolare utilizam functiile Scilab
1. d=splin(x,y);
2. [f0 [,f1 [,f2 [,f3]]]]1=interp(xd,x,y,d).
Semnificatia parametrilor este1Parantezele patrate nu fac parte din sintaxa. Ele arata caracterul optional al elementelor
cuprinse ıntre ele.
34 CAPITOLUL 4. REZOLVAREA PROBLEMELOR DE INTERPOLARE
• x = (xi)1≤i≤n, sirul nodurilor de interpolare;
• y = (xi)1≤i≤n, sirul valorilor interpolate;
• d parametri functiei spline cubice de interpolare;
• xd este o matrice de numere. In fiecare element al matricei xd se calculeazavaloarea functiei spline cubice de interpolare.
• f0, f1, f2, f3 sunt matrice de aceleasi dimensiuni ca xd si au ca elementevalorile functiei spline cubice de interpolare si respectiv a derivatelor de ordinul1, 2 si 3, calculate ın elementele corespunzatoare ale matricei xd.
Exemplul 4.2 Sa se calculeze valorile functiei spline cubice de interpolare si alederivatelor sale de ordin 1, 2, 3 pentru datele de interpolare
f(x) = x3
xi = i, i ∈ {0, 1, . . . , 5}z = 0.5, 3, 5, 10
Rezolvarea consta din
deff(’y=f(x)’,[’y=x^3’])x=0:5;y=f(x);z=[0.5,3.5,10];d=splin(x,y);[s,s1,s2,s3]=interp(z,x,y,d)s3=! 6. !! 6. !! 0. !s2=! 3. !! 21. !! 0. !s1=! 0.75 !! 36.75 !! 0. !s=! .125 42.875 0 !
Capitolul 5
Construirea unui polinomde aproximare prin metodacelor mai mici patrate
Cap. 4 Cap. 6
Determinarea unui polinom de aproximare construit prin metoda celor mai micipatrate de grad m pentru datele (xi, yi)1≤i≤n (m << n) se obtine cu ajutorul functiei
coef =lq(m,x,y)
unde
• coef – sunt coeficientii polinomului de aproximare;
• m – gradul polinomului de aproximare;
• x, y – doi vectori linie cu absisele si respectiv, cu ordonatele datelor problemeide aproximare.
Textul sursa al functiei lq este
function coef=lq(m,x,y)[mx,nx]=size(x);[my,ny]=size(y);
35
36 CAPITOLUL 5. METODA CELOR MAI MICI PATRATE
if((nx~=ny)|(mx~=1)|(my~=1)),disp("data dimension error")abort
endu=zeros(m+1,nx);for i=1:m+1,
for j=1:nx,u(i,j)=x(j)^(i-1);
endendcoef=(u*u’)^(-1)*u*y’;
Exemplul 5.1 Sa se calculeze polinoamele de aproximare de grad unu si doi, con-stituite prin metoda celor mai mici patrate, pentru datele (xi, yi)0≤i≤20 unde xi =−2+0.2i, yi = f(xi), f(x) = |x|. Sa se reprezinte grafic functiile astfel obtinute.
x=-2:0.2:2;y=abs(x);c1=lq(1,x,y)c1=! 1.047619 !! 0. !c2=lq(2,x,y)c2=! .3883622 !! 0. !! .4494933 !deff(’y=p1(x)’,[’y=c1(1)+c1(2)*x’])deff(’y=p2(x)’,[’y=c2(1)+c2(2)*x+c2(3)*x.*x’])y1=p1(x);y2=p2(x);xx=[x’,x’,x’];yy=[y’,y1’,y2’];plot2d(xx,yy,[1,2,3],’121’,’abs@p1@p2’)
Graficele celor trei functii sunt
37
38 CAPITOLUL 5. METODA CELOR MAI MICI PATRATE
Capitolul 6
Integrare numerica
Cap. 5 Cap. 7
6.1 Integrarea numerica a functiilorde o variabila reala
Pentru calculul integralei
I =∫ b
af(x)dx
unde : [a, b]→ R este o functie continua, Scilab ofera mai multe programe:
• [x]=integrate(exp, var, a, b [, ea [,er ] ] )unde:
– x valuarea calculata a integralei;
– exp este expresia functiei de integrat, dat ca un sir de caractere;
– var este variabila de integrare dat ca string;
– a extremitatea stanga a intervalului de integrare;
– b extremitatea dreapta a intervalului de integrare;
– ea, er reprezinta o eroare absoluta si o eroare relativa. Precizand acestiparametri, regula de oprire a programului este |x− I| ≤ max{ea, er · |I|}.
39
40 CAPITOLUL 6. INTEGRARE NUMERICA
Exemplul 6.1 Sa se calculeze integralele:
1.
∫ 1
016 ∗ x15dx
2.
∫ π2
0
sin(x)x
dx
Rezolvarile sunt:1.
I=integrate(’16*x.^15’,’x’,0,1)I=
1.
2.
I=integrate(’if x==0 then 1; else sin(x)/x; end’,’x’,0,%pi/2)I=
1.3707622
• [x, err]= intg(a, b, f [,ea [, er ] ] )unde
– x valuarea calculata a integralei;
– err valoarea estimata a erorii absolute;
– a extremitatea stanga a intervalului de integrare;
– b extremitatea dreapta a intervalului de integrare;
– f identificatorul functiei Scilab de integrat;
– ea, er reprezinta o eroare absoluta si o eroare relativa. Precizand acestiparametri, regula de oprire a programului este |x− I| ≤ max{ea, er · |I|}.
Utilizand intg, integralele exemplului anterior se calculeaza astfel:
1.
deff(’y=f(x)’,’y=16*x.^15’)[x,err]=intg(a,b,f)err=
1.110 E-14x=
1.
6.2. CALCULUL NUMERIC AL INTEGRALELOR DUBLE 41
2.
deff(’y=g(x)’,’if x==1 then y=1; else y=sin(x)/x; end’)[x,err]=intg(0,%pi/2,g)err=
1.522 E-14x=
1.3707622
Daca f(x, p1, p2, . . .) este o functie Scilab avand pe prima pozitie variabila deintegrare atunci
intg(a,b,list(f, p1, p2, . . .))
calculeaza integrala ∫ b
af(x, p1, p2, . . .)dx
6.2 Calculul numeric al integralelor duble
Pentru domeniul D definit prin
D = {(x, y) : a ≤ x ≤ b, finf(x) ≤ y ≤ fsup(x)}
integrala ∫∫D
fct(x, y)dxdy
este calculata de programul [y, er]=integr(cale, tol). Semnificatia parametrilor for-mali este:
• cale – calea la catalogul care contine subprogramene (functiile) necesare pro-gramului: init, tab, integ2, prodscal, fct, datas, finf, fsup;
• tol toleranta utilizata ın regula de oprire;
• y – valoarea calculata a integralei duble;
• er – indicatorul de raspuns:
– 0 – integrala s-a calculat cu succes;
– 1 – nu s-a ındeplinit conditia de convergenta ın 10 iteratii.
Textele sursa ale programelor sunt
42 CAPITOLUL 6. INTEGRARE NUMERICA
function [y,er]=integr(cale,tol)getf(cale+’\datas.sci’,’c’)getf(cale+’\init.sci’,’c’)getf(cale+’\finf.sci’,’c’)getf(cale+’\fsup.sci’,’c’)getf(cale+’\fct.sci’,’c’)getf(cale+’\tab.sci’,’c’)getf(cale+’\prodscal.sci’,’c’)getf(cale+’\integ2.sci’,’c’)n=3;u=init(n);old=integ2(u);nmi=10;cont=0;ni=0;while cont==0 do
ni=ni+1;v=tab(u);new=integ2(v);nrm=abs(new-old);old=new;u=v;if nrm<tol,
cont=1;er=0;
elseer=1;if ni==nmi,cont=1;,end,
endendy=new;
function u=init(n)[a,b]=datas();hx=(b-a)/n;u=zeros(n+1,n+1);for j=1:n+1,
x=a+(j-1)*hx;fi=finf(x);fs=fsup(x);hy=(fs-fi)/n;for i=1:n+1,
6.2. CALCULUL NUMERIC AL INTEGRALELOR DUBLE 43
y=fi+(i-1)*hy;u(i,j)=fct(x,y);
endend
function v=tab(u)[a,b]=datas()[m,n]=size(u);hx=(b-a)/(n-1);for j=1:n,
for i=1:m,v(2*i-1,2*j-1)=u(i,j);
endx=a+(j-1)*hx;fi=finf(x);fs=fsup(x);hy=(fs-fi)/(m-1);for i=1:m-1,
y=fi+hy*(i-0.5);v(2*i,2*j-1)=fct(x,y);
endendfor j=1:m-1,
x=a+(j-0.5)*hx;fi=finf(x);fs=fsup(x);hy=(fs-fi)/(m-1)/2;for i=1:2*n-1,
y=fi+hy*(i-1);v(i,2*j)=fct(x,y);
endend
function z=integ2(u)[a,b]=datas()[m,n]=size(u);hx=(b-a)/(n-1);w=zeros(1,n);c=ones(1,n);if n==3,
c(2)=4;else
44 CAPITOLUL 6. INTEGRARE NUMERICA
n0=(n-1)/2;for j=1:n0,
c(2*j)=4;endfor j=1:n0-1,
c(2*j+1)=2;end
endfor j=1:n,
x=a+(j-1)*hx;fi=finf(x);fs=fsup(x);hy=(fs-fi)/(m-1);w(j)=prodscal(c,u(:,j))*hy/3;
endz=prodscal(c,w)*hx/3;
function e=prodscal(x,y)[m,n]=size(x);e=0;for i=1:n,
e=e+x(i)*y(i);,end
Utilizatorul trebuie sa precizeze datele problemei ın subprogramele datas, fct,finf, fsup.
Exemplul 6.2 Sa se calculeze∫∫
D xydxdy unde domeniul D este delimitat de curbeley = x2 si y =
√x.
In acest caz se definesc functiile:
function [a,b]=datas()a=0;b=1;
function z=fct(x,y);z=x*y;
function y=finf(x)y=x.*x;
6.2. CALCULUL NUMERIC AL INTEGRALELOR DUBLE 45
function y=fsup(x)y=sqrt(x);
Rezolvarea finala este
getf(’c:\lucru\scilab\integr.sci’,’c’)[y,er]=integr(’c:\lucru\scilab’,1.e-6)er=
0.y=
.0833333
46 CAPITOLUL 6. INTEGRARE NUMERICA
Capitolul 7
Integrarea numerica a ecuatiilordiferentiale ordinare
Cap. 6 Cap. 8
7.1 Rezolvarea problemelor Cauchy
Consideram problema Cauchy
y(x) = f(x, y(x)) x ∈ [x0, xf ], (7.1)y(x0) = y0, (7.2)
unde f : [x0, xf ] × Rn → Rn, despre care presupunem ca admite o solutie unicay : [x0, xf ]→ Rn.
Problema (7.1)-(7.2) se rezolva ın Scilab cu ajutorul functiei:
y=ode(y0, x0, x, f)
unde
• y0, x0 reprezinta conditiile initiale;
• x este vectorul format din punctele ın care se cere solutia problemei Cauchyx = (x1, x2, . . . , xm);
47
48 CAPITOLUL 7. INTEGRAREA NUMERICA A E.D.O.
• y este matricea cu solutiile calculate ın punctele vectorului x,
y =
y1(x1) y1(x2) . . . y1(xm)y2(x1) y2(x2) . . . y2(xm)
. . . . . . . . . . . .yn(x1) yn(x2) . . . yn(xm)
• f este functia Scilab corespunzatoare membrului drept al ecuatiei (7.1).
Exemplul 7.1 Sa se rezolve problema Cauchy
y(x) = y(x) x ∈ [0, 1]y(0) = 1
In vederea reprezentarii grafice, calculam solutia problemei Cauchy ın puncteleechidistante xi = i0.1, i ∈ {0, 1, . . . , 10}.
deff(’dy=f(x,y)’,[’dy=y’])x=0:0.1:1;y=ode(1,0,x,f);plot2d(x,y)
Graficul solutiei numerice este
Exemplul 7.2 Sa se rezolve problema Cauchy
y1 = y1y2 y1(1) = 1 x ∈ [1, 2]y2 = − 1
xy1y2(1) = 1
Solutia problemei Cauchy este y1(x) = x, y2(x) = 1x .
Rezolvarea numerica este
deff(’q=f(x,p)’,[’y1=p(1)’,’y2=p(2)’,’q(1)=y1*y2’,’q(2)=-1/(x*y1)’])x=1:0.1:2;y=ode([1;1],1,x,f);xx=[x’,x’];plot2d(xx,y’)
Graficul solutiei numerice este
7.1. REZOLVAREA PROBLEMELOR CAUCHY 49
7.1.1 Rezolvarea unui sistem algebric de ecuatii neliniare prin in-tegrarea unei probleme Cauchy.
Rezolvarea sistemului algebric de ecuatii neliniaref1(x1, . . . , xn) = 0. . . . . . . . . . . . . . . . . .fn(x1, . . . , xn) = 0
sau scris sub forma concentrata f(x) = 0 cu
x =
x1...
xn
f(x) =
f1(x1, . . . , xn)...
fn(x1, . . . , xn)
,
se poate face prin integrarea problemei Cauchy{x(t) = − 1
1−tf−1x (x(t))f(x(t)) t ∈ [0, 1)
x(0) = x0
sau {x(t) = −f−1
x (x(t))f(x(t)) t ∈ [0,∞)x(0) = x0
50 CAPITOLUL 7. INTEGRAREA NUMERICA A E.D.O.
Exemplul 7.3 Sa se rezolve sistemul algebric de ecuatii neliniare10x1 + x2
1 − 2x2x3 − 0.1 = 010x2 − x2
2 + 3x1x3 + 0.2 = 010x3 + x2
3 + 2x1x2 − 0.3 = 0
Definim functia corespunzatoare membrului drept al problemei Cauchy (ın primavarianta) ın functia Scilab
function u=dfct(t,x)y=zeros(3,1);dy=zeros(3,3);y(1)=10*x(1)+x(1)*x(1)-2*x(2)*x(3)-0.1;y(2)=10*x(2)-x(2)*x(2)+3*x(1)*x(3)+0.2;y(3)=10*x(3)+x(3)*x(3)+2*x(1)*x(2)-0.3;dy(1,1)=10+2*x(1);dy(1,2)=-2*x(3);dy(1,3)=-2*x(2);dy(2,1)=3*x(3);dy(2,2)=10-2*x(2);dy(2,3)=3*x(1);
7.2. REZOLVAREA PROBLEMELOR BILOCALE 51
dy(3,1)=2*x(2);dy(3,2)=2*x(1);dy(3,3)=10+2*x(3);u=-(dy)^(-1)*y/(1-t);
Rezolvarea sistemului devine:
getf(’c:\lucru\scilab\dfct.sci’,’c’)x0=[0;0;0];t=0:1;y=ode(x0,0,t,dfct)y(:,2)=! .0098702 !! - .0200485 !! .0299499 !
7.2 Rezolvarea problemelor bilocale
Fie problema multilocala reprezentata prin forma canonica
x(mk)k = Fk(t, z(t)) k ∈ {1, . . . n} a ≤ t ≤ b
scris astfel ıncat1 ≤ m1 ≤ m2 ≤ . . . ≤ mn ≤ 4
Prin z(t) se ıntelege vectorul
z(t) = (x1, x1, . . . , x(m1−1)1 , x2, x2, . . . , x
(m2−1)2 , . . . , xn, xn, . . . , x(mn−1)
n )
Notand m∗ =∑n
k=1 mk, conditiile la limita se scriu sub forma
gj(ζj , z(ζj)) = 0 j ∈ 1, . . . m∗
ordonate astfel ıncata ≤ ζ1 ≤ ζ2 ≤ . . . ≤ ζm∗ ≤ b.
Exemplul 7.4 Sa se rezolve problema bilocala
(x3u′′)′′ = 1 x ∈ [1, 2]u(1) = u′′(1) = 0u(2) = u′′(2) = 0
52 CAPITOLUL 7. INTEGRAREA NUMERICA A E.D.O.
Pentru ınceput sa aducem problema bilocala la forma canonica. Ecuatia diferentialaeste echivalenta cu
u(4) =1x3− 6
x2u′′ − 6
xu(3)
Astfel
n = 1, a = 1, b = 2, z = (z1 = u, z2 = u′, z3 = u′′, z4 = u(3))
si ın consecinta
F1(x, z) = −6x
z4 −6x2
z3 +1x3
.
Apoi m∗ = 4 si ζ = (ζ1 = 1, ζ2 = 1, ζ3 = 2, ζ4 = 2). Conditiile la limita se scriu
g1(ζ1, z(ζ1)) = z1(ζ1) = 0 ⇒ g1(ζ, z) = z1
g2(ζ2, z(ζ2)) = z3(ζ2) = 0 ⇒ g2(ζ, z) = z3
g3(ζ3, z(ζ3)) = z1(ζ3) = 0 ⇒ g3(ζ, z) = z1
g4(ζ4, z(ζ4)) = z3(ζ4) = 0 ⇒ g4(ζ, z) = z3
Pentru rezolvarea problemei multilocala canonice descrisa mai sus Scilab continefunctia bvode
[y]=bvode(x, n, m, a, b, ζ, ipar, ltol, tol, fixpnt, fsub, dfsub, gsub, dgsub, guess)
unde
• x vector cu punctele ın care se calculeaza solutia;
• n numarul ecuatiilor diferentiale (n ≤ 20);
• m = (m1, . . . ,mn) ordinele ecuatiilor diferentiale;
• a extremitatea stanga a intervalului de integrare;
• b extremitatea dreapta a intervalului de integrare;
• ζ = (ζ1, ζ2, . . . , ζm∗) vector cu punctele ın care sunt date conditiile la limita.Punctele sunt ordonate crescator.
• ipar = (ipari)1≤i≤11 parametri necesari metodei numerice.
– ipar1 ={
0 daca problema este liniara1 daca problema este neliniara
– ipar2 = k numarul punctelor de colocatie folosite pe subintervale. (maxi mi ≤k ≤ 7). Daca ipar2 = 0 atunci k = max{maxi mi + 1, 5−maxi mi}.
7.2. REZOLVAREA PROBLEMELOR BILOCALE 53
– ipar3 = nsubint reprezinta numarul subintervalelor construite ın reteauainitiala. Daca ipar3 = 0 atunci nsubint = 5.
– ipar4 = ntol numarul tolerantelor (0 < ntol ≤ m∗).
– ipar5 = ndimf dimensiunea campului de lucru fspace.
– ipar6 = ndimi dimensiunea campului de lucru ispace.
– ipar7 = iprint controlul afisarii rezultatelor intermediare. iprint =−1 afisare completa0 afisare partiala1 fara afisare
– ipar8 = 0. Reteaua de discretizare utilizata este uniforma (singura vari-anta implementata).
– ipar9 = iguess =
0 fara aproximatii initiale transmise1 aproximatii initiale se gasesc
ın subprogramul guess– ipar11 = nfixpnt. Numarul punctelor fixe, altele decat a si b incluse ın
orice discretizare.
• ltol camp de lucru de dimensiune ipar4 avand componentele 1 ≤ ltol1 <ltol2 . . . < ltolntol ≤ m∗. ltoli = l se refera la componenta l a vectoruluiz.
• tol camp de lucru de dimensiune ipar4 cu tolerantele folosite.
• fixpnt camp de lucru de dimensiune ipar11 continand punctelor fixe, alteledecat a si b incluse ın orice discretizare.
• y matrice cu solutiile obtinute. Fiecare linie corespunde unui element al vec-torului x, y = (z(xi))i, unde z are semnificatia de la problema canonica.
• fsub functie Scilab pentru F (t, z) = (F1(t, z), F2(t, z), . . . , Fn(t, z));
• dfsub functie Scilab pentru jacobianul
∂F
∂z=
∂F1∂z1
. . . ∂F1∂zm∗
. . . . . . . . .∂Fn∂z1
. . . ∂Fn∂zm∗
• gsub functie Scilab de forma g(i, z) = gi(ζi, z(ζi)), i ∈ {1, . . . ,m∗};
• dgsub functie Scilab pentru calculul jacobianului
∂g(i, z)∂z
= (∂g(i, z)
∂z1, . . . ,
∂g(i, z)∂zm∗
), i ∈ {1, . . . ,m∗};
54 CAPITOLUL 7. INTEGRAREA NUMERICA A E.D.O.
• guess functie Scilab care se foloseste doar daca ipar9 = 1. Functia are forma[z, dmval]=guess(t), unde z(t) si dmval = (x(m1)
1 (t), . . . , x(mn)n (t)) este definit
pentru orice t.
Revenim la rezolvarea problemei Exemplului 7.4.Definim functiile cerute de programul bvode
function [f]=fsub(x,z)f=(1-6*x**2*z(4)-6*x*z(3))/x**3;
function [df]=dfsub(x,z)df=[0,0,-6/x**2,-6/x];
function [g]=gsub(i,z)g=[z(1),z(3),z(1),z(3)];g=g(i);
function [dg]=dgsub(i,z)dg=[1,0,0,0;0,0,1,0;1,0,0,0;0,0,1,0];dg=dg(i,:);
function [z,dmval]=guess(x)// nefolositz=0dmval=0
Pentru comoditate, definim un subprogram Scilab cu toate datele problemei
function [x,w]=col1(path)getf(path+’\fsub.sci’,’c’)getf(path+’\dfsub.sci’,’c’)getf(path+’\gsub.sci’,’c’)getf(path+’\dgsub.sci’,’c’)getf(path+’\guess.sci’,’c’)n=1;m=[4];a=1;b=2;x=a:0.1:b;fixpnt=0;zeta=[1,1,2,2];ipar=zeros(1,11);
7.2. REZOLVAREA PROBLEMELOR BILOCALE 55
ipar(3)=1;ipar(4)=2;ipar(5)=2000;ipar(6)=200;ipar(7)=1;ltol=[1,3];tol=[1.e-11,1.e-11];z=bvode(x,n,m,a,b,zeta,ipar,ltol,tol,fixpnt,...
fsub,dfsub,gsub,dgsub,guess);w=z(1,:)
unde path reprezinta calea la catalogul cu subprogramele fsub, dfsub, gsub, dgsub,guess.
Rezolvarea devine
getf(’c:\lucru\scilab\col1.sci’,’c’)[x,w]=col1(’c:\lucru\scilab’);plot2d(x’,w)
Graficul solutiei numerice este
56 CAPITOLUL 7. INTEGRAREA NUMERICA A E.D.O.
Capitolul 8
Tranformata Fourier discreta
Cap. 7 Cap. 9
In Scilab transformata Fourier discreta si transformata Fourier discreta inversasunt calculate conform formulelor
y = Fn(x) yk =n−1∑j=0
xjw−kj k ∈ {0, . . . , n− 1}
si respectiv
x = F−1n (y) xk =
1n
n−1∑j=0
yjwkj k ∈ {0, . . . , n− 1}
unde x, y ∈ Cn iar w = e2iπn . Prin Cn s-a notat multimea sirurilor de numere
complexe, periodice cu perioada n, Cn = {x = (xk)k∈Z : xk+n = xk, xk ∈ C,∀k ∈Z}.
In acest scop exista functiile Scilab
• y=dft(x, indicator)
• y=fft(x, indicator)
unde semnificatia parametrilor este
- x, y sunt siruri de numere complexe reprezentand originalul si imaginea trans-formarii.
57
58 CAPITOLUL 8. TRANFORMATA FOURIER DISCRETA
- indicator ={−1 se calculeaza transformata Fourier discreta1 se calculeaza transformata Fourier discreta inversa
Exemplul 8.1 Sa se calculeze coeficientii Fourier ale functiei f(x) = sin x+cos3x.
Daca integrala din expresia eoeficientului Fourier complex
ck =ak − ibk
2=
12π
∫ 2π
0f(x)e−ikxdx
se calculeaza cu regula trapezelor, cu parametrul de discretizare n ∈ N∗, atunci seobtine aproximarea c = 1
nFn(ϕ), unde c = (ck)0≤k≤n−1 si ϕ = (ϕj)0≤j≤n−1 estevectorul ale carei componente sunt ϕj = f(2πj
n ).Comenzile Scilab sunt
deff(’y=f(x)’,[’y-sin(x)+cos(3*x)’])n=16;h=2*%pi/n;x=0:h:2*%pi-h;ff=f(x);c=fft(ff,-1)/n;a=c+conj(c);b=(conj(c)-c)/%i;[a’,b’]
Part II
MathCAD
59
Capitolul 9
Prezentare generala
Cap. 8 Cap. 10
MathCAD este un produs informatic comercial destinat rezolvarii problemelorde calcul numeric, cu posibilitatea documentarii si a reprezentarii grafice plane sispatiale.
MathCAD permite atat programare functionala, adica prin compunerea functiilor,cat si programare procedurala, fiind ınzestrat cu o paleta de programare eficienta.
MathCAD ofera posibilitatea de calcul simbolic, ıngloband o biblioteca Maplede functii simbolice.
MathCAD utilizeaza notatia matematica obisnuita.
Produsul are un editor propriu. Simbolurile operatorilor si ale functiilor se potintroduce fie prin intermediul paletelor, fie prin codurile atasate. Tot ceea ce seintroduce conduce la formarea unui document MathCAD.
Intr-un document MathCAD orice definitie, ecuatie, text-comentariu sau reprezentaregrafica ocupa un spatiu numit regiune. Regiunile sunt disjuncte doua cate doua.Procesul de calcul consta ın evaluarea regiunilor Si are loc de sus ın jos, jar pe nivelorizontal de la stanga spre dreapta. Regiunile pot fi vizualizate prin clic pe butonulView/Region, care functioneaza ın regim ”aprins/stins”.
Un calcul se poate opri fortat prin butonul Esc.
61
62 CAPITOLUL 9. PREZENTARE GENERALA
Figure 9.1: Ecran MathCAD
9.1 Efectuarea calculelor numerice
9.1.1 Operatori MathCAD
Operatori de definire si evaluare
1. Operatorul de atribuire / definire :=
Se obtine tastand : sau prin alegerea din panoul Evaluation Toolbar.
Sintaxa este:
variabila := expresiefunctie(lista de variabile) := expresie
Exemplul 9.1a := 1f(x) := 1− x2
2. Operatorul de afisare / calcul =
Sintaxa este:
variabila =functie(variabile) =expresie =
Exemplul 9.2x := 3 x = 3h(x) := 5x3 − 2 h(0) = −27 + 3 · x = 14
9.1. EFECTUAREA CALCULELOR NUMERICE 63
3. Operatorul de definire globala ≡
Se obtine tastand Shift+˜sau prin panoul Evaluation Toolbar. Sintaxa este:
parametrul MathCAD ≡ expresie
Operatorul de definire globala permite fixarea sau modificarea unor parametriiMathCAD la nivel global, adica avand domeniul de valabilitate ıntregul doc-ument.
9.1.2 Identificatori MathCAD
Identificatorii MathCAD, adica numele dat variabilelor, constantelor si functiilor,pot contine oricare din urmatoarele caractere:
• litere latine mari si mici; se face distinctie ıntre literele mari si mici;
• cifre de la 0 la 9; un identificator nu poate ıncepe cu o cifra;
• litere grecesti : α, β, . . . , ω. Aceste litere se obtin din panoul Greek;
• caractere speciale: (linie de subliniere),% (procent), ∞ (simbolul infinit), ‘(a nu se confunda cu apostrogul ’), . (punctul – simbolurile care urmeaza suntinterpretate de MathCAD ca indice literal).
Exemplul 9.3a1 2 α ind %ppresiunea ∞const a.bcd a‘b
9.1.3 Constante MathCAD
MathCAD recunoaste cateva constante uzuale: π, e - baza logaritmului natural,∞ - infinit, i(sau j) - unitatea imaginara. Pe langa aceste constante mai exista si oserie de constante sistem predefinite (globale):
• TOL a carei valoare implicita este 0.001 si care reprezinta toleranta utilizataın testele de convergenta.
• CTOL a carei valoare implicita este 0.001 si care reprezinta toleranta de con-strangere si care controleaza restrictiile din cadrul unui bloc de rezolvare asistemelor de ecuatii.
• ORIGIN cu valoare implicita egala cu zero reprezinta valoarea indicelui primu-lui element al unui vector sau al unei matrice.
• CWD retine ıntr-un sir de caractere calea directorului curent.
64 CAPITOLUL 9. PREZENTARE GENERALA
9.1.4 Tipuri de date MathCAD
MathCAD utilizeaza variabile avand urmatoarele tipuri de date:
1. Variabila numerica reala sau complexa
Pentru a defini o variabila:
• se tasteaza numele variabilei;• se tasteaza operatorul de definitie;• se introduce expresia care defineste variabila.
Exemplul 9.4 Pentru a calcula valoarea expresiei y = x2− 3x + 2 ın punctul0.5 se defineste
x := 0.5 y := x2 − 3 · x + 2
Rezultatul se obtine tastand y, =.
y = 0.75
O constanta numerica ıntreaga se poate defini ın baza 10, 8 sau 16. Dacareprezentarea se face ın baza 8, numarul va fi urmat de de litera o sau O(deexemplu 15o), iar ın cazul bazei hexazecimale numarul va fi urmat de litera hsau H (de exemplu A1Eh).
Pentru a defini o constanta complexa se utilizeaza forma algebrica a + bi. Inlocul lui i se poate folosi ca unitate imaginara si j. Pentru a defini unitateaimaginara se tasteaza 1i sau 1j.
Operatorii algebrici uzuali sunt
Operator algebric Se obtine tastand+ (adunare) +− (scadere) −· (ınmultire) ∗/ (ımpartire) /
ˆ(ridicare la putere) ˆ
2. Variabila domeniu : progresie aritmetica
O variabila domeniu este o progresie aritmetica. Definirea unei progresii arit-metice se face prin:
variabila domeniu :=val initiala, val urmatoare .. val finala
Elementele folosite ın definitia de mai sus, respectiv valoarea initiala, valoareaurmatoare si valoarea finala pot fi constante, variabile sau expresii. Ratiaprogresiei este egala cu
9.1. EFECTUAREA CALCULELOR NUMERICE 65
val urmatoare - val initiala.
Pentru a obtine .. se tasteaza ; .
Exemplul 9.5 x := 0, 0.9..4 defineste progresia aritmetica
x =
00.91.82.73.6
Daca ın sintaxa de definire a unei variabile de tip domeniu lipsesc virgula sival urmatoare, ratia progresiei aritmetice este
sgn(val finala-val initiala).
Exemplul 9.6 Sirurile i := 0.5..3 si j := 5..2.5 definesc urmatoarele progre-siile aritmetice
i = j =0.51.52.5
543
3. Variabila indice
O variabila domeniu ale carei valori sunt numere naturale consecutive se numestevariabila indice.
Exemplul 9.7 Pentru a defini un indice k ale carui valori sa fie succesiv 2,3, 4, 5, se editeaza k : 2 ; 5 rezultand k := 2..5
4. Sir
Prin intermediul unei variabile indice se poate defini un sir oarecare prin sin-taxa:
variabila sirvariabila indice := expresie.
Pentru a scrie indicele, dupa numele variabilei de tip sir se tasteaza [ .
66 CAPITOLUL 9. PREZENTARE GENERALA
Exemplul 9.8 Pentru variabila k definita ın exemplul anterior definim sirulxk = k2 astfel:
xk := k2
Vizualizam rezultatul prin
x =
00491625
sau
xk =491625
Sirul astfel obtinut contine pe primele doua pozitii valoarea 0 deoarece respec-tivele pozitii nu au fost definite.
Functii uzuale aplicabile unui sir a = (ai)i∈I
Apelare Semnificatielength(a) Numarul elementelor siruluilast(a) Indicele ultimului elementmax(a) Cel mai mare element al siruluimin(a) Cel mai mic element al sirului|a| Norma euclidiana a sirului
5. Tablouri : vectori si matrice
MathCAD permite definirea matricelor si are prevazute operatiile uzuale decalcul matriceal. Vectorii de dimensiune n se considera matrice cu n linii si ocoloana.
Pentru a introduce o matrice ın documentul curent se selecteaza din meniulInsert/Matrix sau prin paleta Matrix. Ca urmare, pe ecran apare o fer-eastra de dialog ın care se completeaza numarul de linii, respectiv de coloanecorespunzatoare matricei ce se doreste a fi inserata. Dupa precizarea dimensi-unilor matricei, toate pozitiile marcate se vor completa cu expresii sau numere,trecerea de la o pozitie la alta facandu-se prin apasarea tastei Tab. Aceastametoda de definire a unei matrice este o metoda explicita. Vorbim de o metodaimplicita de definire a unei matrice ın cazul ın care exista o formula de legaturaıntre indici si elementele din matrice.
Intr-un tablou valoarea initiala a indicilor este 0. Daca dorim ca valoareainitiala a indicilor sa fie 1, trebuie sa atribuim parametrului ORIGIN valoarea1. Aceasta se obtine prin definitia globala ORIGIN ≡ 1.
9.1. EFECTUAREA CALCULELOR NUMERICE 67
Referirea unui element al unui tablou se face indicand numele tabloului (vari-abila) urmat de indicii elementului separati prin virgula. Trecerea la indicareaindicelor se obtine prin tasta [.
Exemplul 9.9
Dacai := 0..3 j := 0..3 Xi,j := i2 +
j
2atunci se obtine
X =
0 0.5 1 1.51 1.5 2 2.54 4.5 5 5.59 9.5 10 10.5
Exemplul 9.10
Daca
A :=(
1 32 4
)atunci
A0,0 = 1 A0,1 = 3 A1,0 = 2 A1,1 = 4
Pentru a defini siruri de vectori se utilizeaza indici superiori. Un indice superiorse obtine tastand Ctrl+6 sau prin paleta Matrix M<T>.
Exemplul 9.11
Fie
u<0> =(
12
)A =
(1 02 −1
)Pentru i := 0..4 calculam
u<i+1> := A · u<i>
obtinand
u<4> =(
12
)u<5> =
(10
)iar
u =(
1 1 1 1 1 12 0 2 0 2 0
)
68 CAPITOLUL 9. PREZENTARE GENERALA
u1,4 = 2 u0,4 = 1
Daca M este o matrice, expresia M<i> desemneaza coloana i a matricei M.
Operatori matriceali
Operator algebric Se obtine tastand+ (adunare) +− (scadere) −· (ınmultire) ∗
ˆ(ridicare la putere) ˆ
Functii uzuale aplicabile (operatori aplicabili) unei matrice A = (ai,j)i∈I,j∈J
Apelare Semnificatierows(A) Numarul liniilor matriceicols(A) Numarul coloanelor matriceitr(A) urma matriceiAT transpusa matricei|A| determinantul matriceiA−1 inversa matriceirank(A) rangul matriceinorm1(A) norma Minkovski, maxj
∑i |ai,j |
norm2(A) norma euclidiana,√
max eigenvals(aT · a)
norme(A) norma Frobenius,√∑
i,j a2i,j
normi(A) norma Cebısev, maxi∑
j |ai,j |
6. Functii
MathCAD poseda o bogata familie de functii predefinite si ofera posibilitateadefinirii de functii noi conform sintaxei
numeFunctie(arg1, arg2, . . .) := expresie
Functii numerice uzuale aplicabile aplicabile unui numar real sau complex x
9.1. EFECTUAREA CALCULELOR NUMERICE 69
Apelare Semnificatiesin(x) sinx
cos(x) cos x
tan(x) tgx
cot(x) ctgx
asin(x) arcsin(x)acos(x) arccos(x)atan(x) arctg(x)sinh(x) shx
cosh(x) chx
tanh(x) thx
asinh(x) arcsh(x)acosh(x) arcch(x)atanh(x) arcth(x)exp(x) ex
log(x) lg(x)ln(x) ln(x)
9.1.5 Vectorizare
Sa presupunem ca o functie f(x, y) trebuie aplicata succesiv unui sistem de vari-abile (xi, yi)1≤i≤n, obtinand zi = f(xi, yi), i ∈ {1, 2, . . . , n}.. MathCAD ofera posi-bilitatea efectuarii acestor calcule prin vectorizare, un procedeu care este multmairapid decat prin folosirea indecsilor. Sintaxa utilizata este
x :=
x1...
xn
y :=
y1...
yn
z =−−−−→f(x, y)
Operatorul de vectorizare se obtine tastand Crtl + - fie din paleta Matrix cucursorul MathCAD plasat pe relatia de calcul.
Exemplul 9.12 Rezolvarea ecuatiilor de gradul doi avand coeficientii
a :=
1111
b :=
3210
c :=
2114
Formulele
x :=−−−−−−−−−−−−−−→−b +
√b2 − 4 · a · c2 · a
y :=−−−−−−−−−−−−−−→−b−
√b2 − 4 · a · c2 · a
70 CAPITOLUL 9. PREZENTARE GENERALA
produc rezultatele
x =
−1−1
−0.5 + 0.866i2i
y =
−2−1
−0.5− 0.866i−2i
9.1.6 Unitati de masura
Variabilele MathCAD pot reprezenta marimi fizice, ın care caz valoarea numericaeste urmata de o unitate de masura. MathCAD dispune de un set complet deunitati de masura predefinite. Pentru a asocia unui numar sau unei expresii o uni-tate de masura se foloseste semnul de ınmultire dupa numar sau expresie apoi ase scrie explicit unitatea dorita. Sunt recunoscute majoritatea unitatilor prin formalor abreviata. Implicit MathCAD foloseste unitatile din Sistemul International (SI).Acest lucru ınseamna ca la folosirea semnului egal un rezultat ce contine si unitati demasura va fi afisat ın termenii unitatilor de baza sau derivate ale SI. Pentru orice ex-presie care implica unitati de masura MathCAD efectueaza verificari de consistenta.Daca se ıncearca efectuarea sumei sau diferentei ıntre valori incompatibile din punctde vedere al unitatilor de masura se va afisa un mesaj de eroare.
De asemenea pe langa (SI) sunt disponibile si alte sisteme de unitati de masura:CGS, U.S. si MKS. Fiecare dintre aceste standarde constituie un tabel ce contineunitatile de baza specifice si unitatile ce masoara:
unghiuri si lungimi masa si timp arii si volumeviteze si acceleratii forte, energii si puteri presiuni si vascozitatielectricitate frecventa temperatura
Alegerea / schimbarea sistemulul de unitati de masura se face prin meniul Tools/Worksheetoptions.../Unit system.
Exemplul 9.13 Sa se calculeze marimea fortei ce actioneaza asupra unui corp demasa 5 kg si careia ıi imprima o acceleratie de 2 m
s2 .
masa := 5 · kg acc := 2 · ms2
F := masa · acc
F = 10N
Transformarea unitatilor
Pentru transformarea unei marimi dintr-un sistem ın altul este suficienta cunoastereanotatiilor unitatilor respective ın cele doua sisteme. Transformarea se face prin:
1. tastarea marimii si a unitatii de masura corespunzatoare;
9.2. REPREZENTARI GRAFICE 71
2. a operatorul de afisare / calcul (=) ;
3. ın pozitia marcata se introduce noua unitatea de masura;
4. clic ın afara regiunii de lucru.
1 ·m = 1× 103mm
Definirea altor unitati de masura
Se pot defini unitati de masura noi prin
1. se tasteaza numele noii unitati de masura;
2. operatorul de atribuire (:=);
3. definitia noii unitati de masura.
Exemplul 9.14
g :=1
1000· kg 3 · kg = 3× 103g
min := 60 · s h := 60 ·min 1 · h = 3.6× 103s
9.2 Reprezentari grafice
Prin intermediul paletei Graph sau prin meniul Insert/Graph, se pot realizaurmatoarele reprezentari grafice
• X-Y Plot – Reprezentare grafica 2D ın coordonate carteziene. Comanda sepoate da si prin combinatia de taste Shift+2 (@).
• Polar Plot – Reprezentare grafica 2D ın coordonate polare. Comanda se poateda si prin combinatia de taste Ctrl+7.
• Surface plot – Reprezentare grafica 3D ın coordonate carteziene. Comanda sepoate da si prin combinatia de taste Ctrl+2.
• Contur Plot – Reprezentare prin linii de nivel Comanda se poate da si princombinatia de taste Ctrl+5.
• 3D Bar Plot
• 3D Scatter Plot
• Vector Field Plot
72 CAPITOLUL 9. PREZENTARE GENERALA
Reprezentarea grafica 2D ıncoordonate carteziane
Sa presupunem ca dorim sa reprezentam functia x → f(x). Dupa definireafunctiei, ın urma comenzii de realizare a reprezentarii grafice apare un cadru cudoua pozitii marcate, care se completeza cu x (pe axa orizontala) si respectiv f(x)(pe axa verticala). In cadru apar, corespunzator fiecarei axe, alte doua pozitii mar-cate, pentru fixarea intervalelor. Completarea acestor pozitii marcate este optionala.Un clic ın afara cadrului sau Enter declanseaza realizarea reprezentarii grafice.
x
f(x)
MathCAD permite reprezentarea functiilor cunoscute prin valori discrete:(xi, yi)1≤i≤n, yi = f(xi),∀i. In acest caz cele doua pozitii marcate initiale se com-pleteaza cu xi si respectiv yi.
Pentru a obtine ın acelasi cadru reprezentarea grafica pentru mai multe functii,se introduc variabilele si functiile separate prin virgula.
x, x, y
f(x),g(x),h(y)
Reprezentarea grafica 2D ıncoordonate polare
Daca curba are ecuatia polara r = r(t) atunci ın urma comenzii de realizare areprezentarii grafice apare un cadru cu doua pozitii marcate, care se completeza cu tsi respectiv r(t). In cadru apar alte doua pozitii marcate, pentru fixarea intervaluluiın care variaza t.. Completarea acestor pozitii marcate este optionala. Un clic ınafara cadrului sau Enter declanseaza realizarea reprezentarii grafice.
9.3. CREAREA UNEI ANIMATII 73
&%'$
t
&%'$
r(t)
Formatarea graficelor 2D
MathCAD realizeaza reprezentarile grafice cu o serie de parametri impliciti.Aceste setari pot fi schimbate de utilizator si de asemenea se pot adauga titlurisi etichete. Pentru a formata o zona grafica se executa dublu clic pe zona respectivasau se selecteaza zona grafica si apoi din meniul Format/Graph/X-Y Plot sau PolarPlot. In urma actiunii executate se deschide o fereastra de dialog prin intermediulcareia se poate modifica
• Natura axelor de coordonate;
• Modul de trasarea curbei (continuu, discret prin simboluri, etc.);
• Culoarea de desenare.
Reprezentare grafica 3D ıncoordonate carteziene
Reprezentare grafica prin linii de nivel
Reprezentare grafica 3D Bar
Reprezentare grafica 3D Scatter
Reprezentare grafica Vector Field
9.3 Crearea unei animatii
Prin intermediul variabilei predefinite FRAME pot fi create si apoi rulate scurteclipuri animate. Orice obiect MathCAD care poate fi facut sa depinda de variabilaFRAME poate fi animat. Sunt incluse aici nu numai punctele din grafice ci sirezultatele numerice. Clipurile animate pot fi rulate la diverse viteze si de asemeneapot fi salvate pentru a fi apoi rulate ın cadrul altor aplicatii.
Pentru realizarea unei animatii ın MathCAD trebuie urmati pasii:
1. Se defineste o expresie care depinde de valoarea variabilei FRAME;
2. Se selecteaza optiunea Record din meniul Tools/Animation;
74 CAPITOLUL 9. PREZENTARE GENERALA
3. Dupa deschiderea casutei de dialog se selecteaza din foaia de lucru regiunea cese doreste sa apara ın animatie;
4. In cadrul casutei de dialog se fixeaza limitele inferioara, respectiv superioara avariabilei FRAME, precum si viteza de rulare (numarul de cadre pe secunda);
5. Se porneste animatia prin apasarea butonului Animate.
O animatie creata poate fi salvata ca fisier .avi si poate fi vizualizat si independentde MathCAD. Pentru aceasta se selecteaza butonul Save as din cadrul casutei dedialog.
Pentru a rula ın MathCAD un fisier avi existent din meniul Tools/Animationse alege optiunea Playback.
Exemplul 9.15 In intervalul [−1, 1], sa se transforme graficul functiei g(x) = x ınf(x) = x2 prin efectul ”morphing”.
Astfel definim
f(x) := x2 g(x) := x MaxFRAME := 60
h(x) :=FRAME
MaxFRAME· f(x) + (1− FRAME
MaxFRAME) · g(x)
a := −1 b := 1
si construim graficul functiei h(x)(FRAME = 0!). Efectuam operatiile mentionatemai sus si obtinem rezultatele din Fig. 9.2.
9.4 Editare de text
Intr-un document MathCAD pot fi incluse texte si comentarii asupra calculelorce se efectueaza. O regiune text se obtine tastand ” (ghilimele). In masura ın carese adauga text, regiunea se extinde la dreapta. Tastand Enter se trece pe liniaurmatoare. Regiunea text se paraseste prin plasarea cursorului ın afara ei.
Meniul Format ofera facilitati de formatare a textului.
9.5 Salvarea / restaurarea datelor numericeComunicatii ıntre medii de programare
Date numerice sub forma unei matrice se pot salva si / sau ıncaca ın / din fisiereASCII asigurand astfel un canal de comunicatie cu un alt mediu de programare.
In acest sens sunt definite functiile
9.5. SALVAREA / RESTAURAREA DATELOR NUMERICE 75
Figure 9.2: Animatie tip ”morphing”
76 CAPITOLUL 9. PREZENTARE GENERALA
• READPRN(fisier) citeste date structurate dintr-un fisier. Functia returneaza omatrice, fiecare linie din fisier devine o linie ın matrice. Numarul de elementede pe fiecare linie trebuie sa fie acelasi. In general functia se foloseste ıninstructiuni de forma:
A := READPRN(fisier)
• WRITEPRN(fisier) scrie o matrice ıntr-un fisier. Fiecare linie a matricei devinelinie ın fisierul specificat. Modalitatea de apel a functiei este:
WRITEPRN(fisier) := A
• APPENDPRN(fisier) adaugarea o matrice la sfarsitul unui fisier deja existent.Fiecare linie a matricei devine o noua linie ın fisier. Forma de apel a functieieste:
APPENDPRN(fisier) := A
In toate cazurile de mai sus, fisier este un string care identifica fisierulvolum:\cale\numeFisier.extensie.
Amintim posibilitatea inserarii ın MathCAD de componente MSOffice, dar sipentru alte produse informatice.
9.6 Instrumente de calcul simbolic
Exista doua componente prin care se pot efectua calcule simbolice:
• Utilizınd comenzile meniului Symbolic, accesibil din bara superioara de meni-uri (MenuBar) (Fig. 9.3);
• Utilizınd functiile casetei Symbolic, ce permite obtinerea rezultatelor simbolicela fel de usor ca cele numerice (Fig. 9.3).
Utilizarea meniului Symbolic. Operatiile meniului Symbolic sunt continuteın tabelul urmator:
9.6. INSTRUMENTE DE CALCUL SIMBOLIC 77
Figure 9.3: Meniul si caseta Symbolic.
78 CAPITOLUL 9. PREZENTARE GENERALA
Numele comenzii SemnificatiaEvaluate EvaluareSimplify Simplifica o expresieExpand Dezvoltarea unei expresiiFactor Descompunere ın factoriCollect Dezvolta dupa o expresiePolynomial Coefficients Coeficientii polinomuluiVariable ... Variabila ...
Solve Rezolva ecuatiaSubstitute SubstituieDifferentiate DeriveazaIntegrate IntegreazaExpand to Series ... Dezvoltare ın serie
order of approximation pana la ordinulConvert to partial fraction Dezvoltare ın fractii simple
Matrix ... Operatii matriceale ...Transpose Matricea transpusaInvert Matricea inversaDeterminant Determinantul matricei
Transformations ... Transformari integrale ...Fourier Transformarea FourierInverse Fourier Transformarea Fourier inversaLaplace Transformarea LaplaceInverse Laplace Transformarea Laplace inversaZ Transformarea zInverse Z Transformarea z inversa
Pentru a putea aplica comenzile meniului Symbolic trebuie sa selectam varia-bilasau expresia asupra careia are loc actiunea.
Selectarea unui element se obtine prin clic asupra elementului sau utilizand tas-tatura, cu ajutorul tastelor directionale pozitionam cursorul pe elementul dorit.Elementul selectionat este ıncadrat. Cu ajutorul tastei Space o zona selectata sepoate extinde si restrange iar cu tastele directionale selectia se poate muta de pe untermen / operand pe altul.
Pentru actionarea comenzilor meniului Symbolic se procedeaza dupa cum urmeaza:
1. Se tasteaza expresia/ecuatia asupra careia va actiona comanda.
2. Se selecteaza expresia sau variabila activa.
3. Se selecteaza comanda dorita din meniul Symbolic si se lanseaza ın executieprin clic sau tastand Enter.
9.7. ELEMENTE DE PROGRAMARE FUNCTIONALA 79
Rezultatul apare sub expresia ın cauza.Pentru editarea unei ecuatii ıntre membrul stang si membrul drept se pune egalul
simbolic, care se obtine tastand Ctrl+=.
Utilizarea functiilor casetei Symbolic. Functiile casetei Symbolic se ape-leaza printr-un clic, ın dreptul cursorului MathCAD apare functia apelata ımpreunacu pozitii marcate ce urmeaza a fi completate cu expresii si/sau variabile asupracarora are loc actiunea.
Evaluarea unei asemenea expresii se realizeaza prin comanda de simplificare sim-bolica → ce se obtine tastand Ctrl + . urmat de clic ın afara regiunii expresiei sautastand Enter.
In plus, dispunem de o serie de operatori de calcul simbolic:
Functiunea Se obtine tasandCalculul unei sume Ctrl + $Calculul unui produs Ctrl + #Calculul unei limite Ctrl + lLimita la dreapta Ctrl + Shift + aLimita la stanga Ctrl + Shift + bDerivare Ctrl + ? si ?Calculul unei primitive Ctrl + iCalculul unei integrala Ctrl + &
Cu ajutorul clauzei assume se pot impune restrictii asupra unor variabile.
9.7 Elemente de programare functionala
Posibilitatea de a crea noi functii ımpreuna cu operatia de compunere fac dinprogramarea functionala modul natural de lucru ın MathCAD.
Pentru programarea unui test de decizie se poate folosi operatorul de control if(cond, exp1, exp2). Daca expresia cond este adevarata atunci valoarea returnata deoperator este exp1 iar ın caz contrar exp2. cond este o expresie logica.
In MathCAD orce valoare nenula reprezinta valoarea logica adevarat si 0 reprezintavaloarea logica fals.
Operatorii relationali si operatorii logici se pot obtine prin paleta Boolean sautastand
80 CAPITOLUL 9. PREZENTARE GENERALA
Operatori relationali Se obtine tastand= Ctrl + =< >
> <
≤ Ctrl + 9≥ Ctrl + 06= Ctrl + 3
Operatori logici Se obtine tastand¬ (negatia) Ctrl + Shift + 1∧ (disjunctia) Ctrl + Shift + 7∨ (conjunctia) Ctrl + Shift + 6⊕
(sau exclusiv) Ctrl + Shift + 5
Exemplul 9.16 Sa se calculeze limita sirului (an)n∈N definita prin formula derecurenta
an+1 =√
an + 2 a0 =√
2
cu o precizie ε = 10−6 ın sensul |an − an−1| < ε.
Codul MathCAD este
N := 100 n := 1..N ε := 10−6
a0 :=√
2 a1 :=√
2 +√
2
an+1 := if[|an − an−1| < ε,
√an + 2, an
]lim := alast(a) lim = 2
9.8 Elemente de programare procedurala
MathCAD este dotat cu un limbaj de programare vizual deosebit de eficient.Functiile astfel create pot fi incorporate ın expresiile supuse calculului simbolic.
Realizarea unui program se obtine cu instrumentele casetei de programare (dinbara/panoul cu uneltele MathCAD) (Fig. 9.4).
Un program MathCAD va apare ca o functie
NumeFunctie(variabile formale) :=
∥∥∥∥∥∥∥∥instructiunileprogramului. . .expresia returnata
9.8. ELEMENTE DE PROGRAMARE PROCEDURALA 81
Figure 9.4: Caseta cu instrumentele de programare.
Fiecare instructiune a panoului de programare se introduce exclusiv ın docu-mentul (foaia de calcul) ın care se editeaza programul printr-un clic al mouse-ului.Introducerea are loc pe pozitia cursorului MathCAD.
Astfel daca dorim sa ıncepem editarea unui program este suficient sa tastam
NumeFunctie(variabile formale) := c
urmat de clic pe Add Line.Rezultatul va fi
NumeFunctie(variabile formale) :=∥∥∥∥ c
Semnul c desemneaza cursorul MathCAD.Cele doua pozitii marcate permit extinderea numarului de randuri (din nou clic
pe Add Line) si urmeaza a fi completate cu instructiunile programului.In procesul editarii se utilizeaza regulile MathCAD pentru operatii, operatori,
indici, etc.
• ← corespunde instructiunii de atribuire, variabilei din membrul stang i seatribuie valoarea expresiei din membrul drept.
• if este instructiunea conditionala. Selectand aceasta instructiune, po-zitia mar-cata de cursorul MathCAD se transforma ın
if
Cele doua pozitii marcate se completeaza cu
1. expresia care se obtine daca conditia este adevarata (pozitia marcata dinstanga);
2. conditia instructiunii if (pozitia marcata din dreapta).
82 CAPITOLUL 9. PREZENTARE GENERALA
Daca prima pozitie marcata se extinde cu o linie atunci schema grafica devine
if∥∥∥∥In acest caz pozitiile marcate se completeaza cu activitatile corespunzatoarecazului ın care conditia este ındeplinita. Daca conditia este falsa atunci secontinua cu instructiunea urmatoare.
• otherwise folosit dupa if permite specificarea actiunilor de efectuat ın cazulın care conditia instructiunii conditionale este falsa. Selectarea instructiuniiotherwise transforma pozitia marcata de cursorul MathCAD ın
otherwise
Noua pozitie marcata se completeaza cu activitatile corespunzatoare cazuluiın care conditia este falsa.
• on error este instructiunea de tratare a exceptiei de depasire flotanta. Se-lectand instructiunea on error pozitia marcata de cursorul MathCAD devine
on error
Pozitiile marcate se completeaza cu
1. expresia returnata ın caz de eroare;
2. expresia care poate genera eroare.
Urmatorul exemplu este edificator. Pentru functia
f(x) :=∞ on error1x
se obtinef(1) = 1 f(0) := 1 · 10307
Ultima valoare este cel mai mare numar cu care opereaza MathCAD.
• while si for reprezinta instructiunile de ciclare cu test initial si respectiv cucontor.
Selectand instructiunea while, pozitia marcata de cursorul MathCAD devine
while
Cele doua pozitii marcate se completeaza cu
9.8. ELEMENTE DE PROGRAMARE PROCEDURALA 83
1. testul initial buclei;
2. instructiunile ciclului.
• Selectand instructiunea for, pozitia marcata din dreptul cursorului MathCADse ınlocuieste prin
for ∈
Cele trei pozitii marcate se completeaza cu
1. indicele ciclului;
2. intervalul ın care variaza indicele;
3. instructiunile buclei.
• Instructiunea break se foloseste pentru ıntreruperea unei instructiuni de ciclarewhile, for. Bucla curenta este oprita si executia continua de la instructiuneaurmatoare.
• Instructiunea continue se foloseste pentru scurtcircuitarea partiala a unei instructiunide ciclare while, for; executia se reia de la prima instructiune a buclei, sarindu-se peste secventa de cod cuprinsa ıntre instructiunea continue si sfarsitul buclei.
• Instructiunea return are ca efect scurtcircuitarea programului. Instruc- tiunilecare urmeaza nu mai sunt executate. Selectarea acestei instructiuni introducepe pozitia marcata de cursorul MathCAD
return
Noua pozitie marcata se completeaza cu valoarea returnata de functie.
Bineınteles, ıntr-un program MathCAD se poate utiliza ıntreaga familie de functiinumerice ale produsului.
Exemplificam posibilitatile oferite prin calculul sirului primelor N numere prime(9.5).
84 CAPITOLUL 9. PREZENTARE GENERALA
Figure 9.5: Program MathCAD : Calculul sirului primelor N numere prime.
Capitolul 10
Rezolvarea sistemelor algebricede ecuatii liniare
Cap. 9 Cap. 11
Pentru rezolvarea sistemelor algebrice de ecuatii liniare de forma Ax = b ıncare numarul necunoscutelor coincide cu numarul ecuatiilor, MathCAD ofera douamodalitati de abordare.
Mai ıntai se defineste matricea A a sistemului si apoi vectorul coloana b prinatribuire. Daca matricea A a sistemului este nesingulara solutia x se calculeazacu ajutorul formulei x := A−1 · b. Acelasi rezultat se obtine si prin intermediulcomenzii x := lsolve(A, b). In cazul ın care determinantul matricei sistemului estenul, aceasta ınsemnand ca sistemul algebric de ecuatii liniare dat are necunoscutesecundare, o solutie particulara a acestuia se poate obtine prin intermediul aceleiasicomenzi x := lsolve(A, b).
Exemplul 10.1 Sa se rezolve sistemul algebric de ecuatii liniare:x1 + 2x2 + 3x3 + 4x4 = 112x1 + 3x2 + 4x3 + x4 = 123x1 + 4x2 + x3 + 2x4 = 134x1 + x2 + 2x3 + 3x4 = 14
Pentru rezolvarea sistemului se defineste matricea patratica A de dimensiunepatru si vectorul b, se calculeaza determinantul matricei A si apoi se calculeazasolutia sistemului.
85
86 CAPITOLUL 10. SISTEME ALGEBRICE LINIARE
A :=
1 2 3 42 3 4 13 4 1 24 1 2 3
b :=
11121314
|A| = 160 x := A−1 · b x =
2111
Acelasi rezultat se obtine si prin
x := lsolve(A, b) x =
2111
Exemplul 10.2 Sa se rezolve sistemul algebric de ecuatii liniare:
x + y + z + t = 10x + y − z + 2t = −8
5x + 5y − z − 4t = −4x + y + 3z + 4t = 28
Rezolvarea sistemului dat consta ın executarea urmatorilor pasi
A :=
1 1 1 11 1 −1 25 5 −1 −41 1 3 4
b :=
10−8−428
|A| = 0 x := lsolve(A, b) x =
26.4−25.4
90
Solutia astfel obtinuta reprezinta o solutie particulara a sistemului dat.
Capitolul 11
Rezolvarea sistemelor siecuatiilor algebrice
Cap. 10 Cap. 12
11.1 Rezolvarea sistemelor algebrice de ecuatii neliniare
Pentru rezolvarea sistemelor algebrice neliniare de formaf1(x1, . . . , xn) = 0...fn(x1, . . . , xn) = 0
sau scris sub forma condensata f(x) = 0 cu
x =
x1...
xn
f(x) =
f1(x1, . . . , xn)...
fn(x1, . . . , xn)
MathCAD ofera doua functii: find si minerr. Pentru gasirea unei solutii este
necesara precizarea unei aproximatii initiale. Pornind de la aceasta aproximatieMathCAD construieste prin intermediul unui proces iterativ noi aproximatii alesolutiei. Daca valorile aproximatiei initiale nu sunt alese din domeniul de convergenta
87
88 CAPITOLUL 11. SISTEME SI ECUATII ALGEBRICE
procesul iterativ diverge. Astfel, alegerea aproximatiei initiale poate reprezenta ınanumite cazuri partea cea mai dificila din rezolvarea problemei.
Rezolvarea unui sistem algebric de ecuatii neliniare consta ın construirea unuibloc de rezolvare care trebuie sa contina cuvantul cheie given si una din functiilefind, respectiv minerr. Cuvantul cheie given trebuie sa preceada ın blocul derezolvare ecuatiile sistemului.
Exemplul 11.1 Sa se rezolve sistemul algebric de ecuatii liniare:10x1 + x2
1 − 2x2x3 − 0.1 = 010x2 + x2
2 − 2x1x3 + 0.2 = 010x3 + x2
3 − 2x1x2 − 0.3 = 0
Rezolvarea consta ın efectuarea urmatorilor pasi pe o foaie de lucru:
x := 0 y := 0 z := 0
given
10 · x + y2 − 2 · y · z − 0.1=010 · y + y2 − 2 · x · z + 0.2=010 · z + z2 − 2 · x · y − 0.3=0
find(x, y, z) =
9.841× 10−3
−0.020.03
Semnul ”egal” scris ıntre cei doi membrii ai fiecarei ecuatii se obtine prin apasarea
simultana a tastelor Ctrl si simbolul =. Algoritmul pentru functia find implica unproces special de rezolvare ın care metoda este aleasa dintr-un grup de metode pecare programul le pune la dispozitie. Alegerea unei metode se face apasand butonuldin dreapta mouse-ului pe numele functiei find si apoi prin selectarea unei optiunidin meniul de rezolvare a sistemului. De aici se poate alege optiunea AutoSelect prinintermediul careia MathCAD va face o alegere automata a metodei de rezolvare asistemului ın functie de caz (sistem liniar, neliniar, sau problema de programareneliniara). Pentru cazul neliniar exista trei metode care pot fi alese:
1. metoda gradientului conjugat,
2. metoda Levenberg-Marquardt,
3. metoda quasi-Newton.
11.2. REZOLVAREA ECUATIILOR ALGEBRICE 89
11.2 Rezolvarea ecuatiilor algebrice
In acesta sectiune vom trata modalitatea de rezolvare a unei ecuatii algebrice deforma f(x) = 0 cu f : I ⊂ R→ R.
Pentru rezolvarea ecuatiilor algebrice se utilizeaza functia root. Mai ıntai sedefineste functia f(x) si apoi se alege o valoare initiala α ın vecinatatea careia secauta solutia ecuatiei.
Exemplul 11.2 Sa se rezolve ecuatia 2x = x2.
Ecuatia are solutiile pozitive x = 2 si x = 4. Determinam solutia negativa
f(x) := 2x − x2
α := −0.5
root(f(α), α) = −0.767
Pentru a gasi toate solutiile unei ecuatii algebrice se recomanda trasarea grafi-cului functiei. Astfel se pot determina puncte din vecinatatea solutiilor, puncte cepot reprezenta aproximatii pentru solutiile cautate.
Daca se cunoaste un interval [a, b] astfel ıncat f(a)f(b) < 0 (f continua), atuncipentru determinarea unei solutii a ecuatiei f(x) = 0 se poate utiliza functia rootcu parametri f(x), x, a, b. In acest caz, x nu mai trebuie definit, el aparand ca unparametru formal.
Exemplul 11.3
Solutia problemei anterioare este
f(x) := 2x − x2
root(f(x), x,−1,−0.5) = −0.767
11.3 Rezolvarea ecuatiilor polinomiale
Ecuatia polinomiala reprezinta un caz particular de ecuatie algebrica. In cazulecuatiilor polinomiale se cere determinarea tuturor radacinilor reale sau complexe.
Pentru a rezolva ın MathCAD o ecuatie polinomiala de grad n se defineste unvector coloana cu n + 1 componente ce reprezinta coeficientii polinomului ıncepandcu coeficientul monomului de grad 0 si continuand ın ordinea crescatoare a gradelorpana la coeficientul monomului de grad maxim.
90 CAPITOLUL 11. SISTEME SI ECUATII ALGEBRICE
Radacinile polinomului sunt returnate de functia polyroots care are ca argu-ment vectorul coloana definit anterior. MathCAD pune la dispozitie doi algoritmipentru rezolvarea ecuatiilor polinomiale:
1. metoda lui Laguerre,
2. metoda matricei companion.
Implicit, polyroots gaseste radacinile ecuatiei polinomiale utilizand metoda lui La-guerre. Daca se doreste rezolvarea ecuatiei polinomiale prin intermediul metodeimatricei companion, atunci se apasa butonul din dreapta mouse-ului pe numelefunctiei si din meniul respectiv se alege metoda de rezolvare dorit.
Exemplul 11.4 Sa se determine radacinile polinomului
p = 2x4 + 7x3 − 2x2 − 13x + 6.
Rezolvarea este:
v :=
6
−13−2
72
polyroots(v) =
−3−20.5
1
Capitolul 12
Rezolvarea problemelor deinterpolare
Cap. 11 Cap. 13
Fie F o familie interpolatoare de ordin n pe axa reala. Dandu-se nodurile(xi)1≤i≤n si numerele (yi)1≤i≤n, daca ϕ ∈ F este functia de interpolare care sat-isface conditiile ϕ(xi) = yi, 1 ≤ i ≤ n, se cere sa se calculeze ϕ(z), unde z este unpunct dat.
12.1 Interpolare polinomiala
Pentru F = Pn−1 solutia problemei de interpolare Lagrange este polinomul
L(Pn−1;x1, . . . , xn; y1, . . . , yn)(z) =n∑
i=1
yi
n∏j=1
j 6=i
z − xj
xi − xj
Pentru implementare pe calculatoare se foloseste formula baricentrica a polino-mului lui Lagrange
L(Pn−1;x1, ..., xn; y1, ..., yn)(z) =
∑ni=0 yi
∏nj=1
j 6=i
z−xj
xi−xj∑ni=0
∏nj=1
j 6=i
z−xj
xi−xj
91
92 CAPITOLUL 12. REZOLVAREA PROBLEMELOR DE INTERPOLARE
Figure 12.1: Polinomul de interpolare Lagrange
12.2. INTERPOLARE CU FUNCTII SPLINE CUBICE 93
Valoarea acestui polinom este calculata prin intermediul functiei din Fig. 12.1Semnificatia parametrilor functiei L(x, vx, vy) este:
• x matrice cu punctele ın care se doreste calcularea valorii polinomului Lagrangede interpolare.
• (vx, vy) = (vxi, vyi)i datele problemei de interpolare. Componentele vectoru-lui vx trebuie sa fie distincte doua cate doua.
Exemplul 12.1 Sa se calculeze L(Pn;x0, . . . , xn; f)(z) pentru
f(x) = x2
xi = i, i ∈ {0, 1, . . . , 5}z = 0.5, 3, 5, 10
Rezolvarea este:
f(x) := x2 n := 5 i := 0..n
vxi := i vyi := f(vxi) z :=
0.53.510
L(z, vx, vy) =
0.2512.25100
12.2 Interpolare cu functii spline cubice
In cazul ın care multimea interpolatoare este multimea functiilor spline cubicese folosesc functiile MathCAD
• cspline De completat ce face cspline
• pspline De completat ce face pspline
• lspline De completat ce face lspline
combinata cu utilizarea functiei interp.Sintaxa functiilor cspline, pspline, lspline este:
c = cspline(vx, vy) c = pspline(vx, vy) c = lspline(vx, vy)
unde
• c este un vector cu parametrii functiei spline;
94 CAPITOLUL 12. REZOLVAREA PROBLEMELOR DE INTERPOLARE
• (vx, vy) = (vxi, vyi)i sunt datele problemei de interpolare. Componentelevectorului vx trebuie date ın ordine crescatoare si sunt distincte doua catedoua.
Sintaxa funciei interp este
y = interp(c, vx, vy, x)
unde ın plus y este valoarea functiei spline cubice de interpolare calculata ın x.
Exemplul 12.2 Sa se calculeze valorile functiei spline cubice de interpolare ınpunctele 0.5, 3.5, 10 pentru
f(x) = x3
xi = i, i ∈ {0, 1, ..., 5}
Rezolvare este:
f(x) := x3 n := 5 i := 0..n
xi := i yi := f(xi) z :=
0.53.510
c := cspline(x, y) interp(c, x, y, z) =
0.12542.8751× 103
Capitolul 13
Metoda celor mai mici patrate
Cap. 12 Cap. 14
Determinarea unui polinom de aproximare construit prin metoda celor mai micipatrate de grad m pentru datele (xi, yi)1≤i≤n (m << n) se obtine cu ajutorul functlorMathCAD regress si interp.
Functia c = regress(vx,vy,k) returneaza un vector c utilizat de functia y = in-terp(c,vx,vy,x), ce calculeaza valoarea polinomului de aproximare de grad k a datelor(vxi, vyi)i ın x. Ultimele k + 1 componente ale vectorului c contin coeficientii poli-nomului de aproximare construit prin metoda celor mai mici patrate.
Exemplul 13.1 Sa se calculeze polinoamele de aproximare de grad unu si doi,constituite prin metoda celor mai mici patrate, pentru datele (xi, yi)0≤i≤20 undexi = −2 + 0.2i, yi = f(xi), f(x) = |x|. Sa se reprezinte grafic functiile astfelobtinute.
Din 13.1 deducem polinomele de aproximare construite prin metoda celor maimici patrate de gradul 1 si respectiv 2:
ϕ1(x) = 1.048 ϕ2(x) = 0.388 + 0.449x2
95
96 CAPITOLUL 13. METODA CELOR MAI MICI PATRATE
Figure 13.1: Polinoamele de aproximare de grad 1 si 2
Capitolul 14
Integrare numerica
Cap. 13 Cap. 15
14.1 Integerarea numerica a functiilor realede o variabila reala
MathCAD permite calculul aproximativ al integralelor definite. Pentru calcu-larea valorii integralei definite ∫ b
af(x)dx
unde functia f : [a, b] ⊂ R −→ R este continua ın domeniul de definitie.Pentru a calcula valoarea unei integrale definite, se selecteaza din paleta Calculus
simbolul integralei definite, dupa care se completeaza pozitiile marcate:
• limitele intervalului de integrare,
• functia de integrat,
• variabila ın raport cu care se face integrarea.
Integrarea se face ın raport cu o singura variabila, iar functia poate fi de mai multevariabile. Restul parametrilor ın afara variabilei de integrare vor fi considerati con-stante si ın consecinta vor trebui sa fie definiti ın prealabil. In mod implicit integrala
97
98 CAPITOLUL 14. INTEGRARE NUMERICA
se evalueaza numeric pe baza unei metode alese de AutoSelect. Daca se doresteevaluarea integralei printr-o anumita metoda, se executa clic dreapta pe simbolulintegralei, se deselecteaza optiunea AutoSelect si se alege una dim metodele pe careMathCAD le pune la dispozitie:
• Romberg,
• Adaptive,
• Infinite Limit,
• Singular Endpoint.
Parametrul utilizat ın testele de precizie este TOL si are valoarea implicita 0.001.
Exemplul 14.1 Sa se calculeze integralele:
1.
∫ 3
1x2 · exdx
2.
∫ π2
0
sin(x)x
dx
Rezolvare:1.
TOL ≡ 10−6
∫ 3
1x2 · exdx = 97.709
2.
TOL ≡ 10−9
∫ π2
0
sin(x)x
dx = 1.371
14.2 Calculul numeric al integralelor duble
Pentru calculul integralelor duble de forma∫∫D
f(x, y)dxdy
undeD = {(x, y) : a ≤ x ≤ b, finf(x) ≤ y ≤ fsup(x)}.
Calcularea integralei consta ın transformarea acesteia ın integrale iterate, deexemplu ∫ b
a
∫ fsup(x)
finf(x)f(x, y)dydx.
14.2. CALCULUL NUMERIC AL INTEGRALELOR DUBLE 99
Exemplul 14.2 Sa se calculeze∫ ∫
D xydxdy unde domeniul D este delimitat decurbele y = x2 si y =
√x.
Reprezentand grafic domeniul de integrare, deducem finf(x) = x2, fsup(x) =√x, a = 0, b = 1. ∫ 1
0
∫ √x
x2
x · ydydx = 0.0833.
100 CAPITOLUL 14. INTEGRARE NUMERICA
Capitolul 15
Integrarea numerica a ecuatiilordiferentiale ordinare
Cap. 14 Cap. 16
15.1 Rezolvarea problemelor Cauchy
MathCAD ofera mai multe functii pentru rezolvarea problemei Cauchy pentrusistemul de ecuatii diferentiale ordinare
y(x) = f(x, y(x)) x ∈ [x0, xf ], (15.1)y(x0) = y0, (15.2)
unde f : [x0, xf ] × Rn → Rn, despre care presupunem ca admite o solutie unicay : [x0, xf ]→ Rn.
Pe componente sistemul (15.1) si conditiile initiale (15.2) se scriuy1(x) = f1(x, y1(x), . . . , yn(x)). . . . . .
yn(x) = fn(x, y1(x), . . . , yn(x))
y1(x0) = y0
1
. . .yn(x0) = y0
n
Aceste functii sunt
• rkfixed, Rkadapt, Bulstoer, Stiffb, Stiffr, Radau;
101
102 CAPITOLUL 15. INTEGRAREA NUMERICA A E.D.O.
• rkadapt, bulstoer, stiffb, stiffr, radau;
• Odesolve.
Utilizarea functiilor rkfixed, Rkadapt, Bulstoer, Stiffb, Stiffr, Radau
Formatul de utilizare este
u = rkfixed(y0, x0, xf , N, D)u = Rkadapt(y0, x0, xf , N, D)u = Bulstoer(y0, x0, xf , N, D)u = Stiffb(y0, x0, xf , N, D, J)u = Stiffr(y0, x0, xf , N, D, J)u = Radau(y0, x0, xf , N, D)
unde
• y0 = y(x0) valorile initiale date ın x0;
• x0, xf extremitatile intervalului de integrare;
• N parametrul de discretizare: numarul intervalelor echidistante ın care seımparte intervalul [x0, xf ];
• D numele functiei ce corespunde lui f(x, y)
• J este o functie de variabile x, y a carei voloare este matricea de dimensiunen× (n + 1) data de
J(x, y) =
∂f1(x,y)
∂x∂f1(x,y)
∂y1. . . ∂f1(x,y)
∂yn
...... . . .
...∂fn(x,y)
∂x∂fn(x,y)
∂y1. . . ∂fn(x,y)
∂yn
• u o matrice de dimensiune (N + 1) × (n + 1) cu solutia calculata. Prima
coloana contine abscisele punctelor de discretizare. Celelalte coloane continvalorile componentelor calculate ın punctele respective.
Exemplul 15.1 Sa se rezolve problema Cauchy
y(x) = y(x) x ∈ [0, 1]y(0) = 1
15.1. REZOLVAREA PROBLEMELOR CAUCHY 103
Rezolvarea este
x0 := 01 xf := 1 y0 := 1 D(x, y) := y0
u = rkfixed(y0, x0, xf , 5, D) u =
0 10.2 1.2210.4 1.4920.6 1.8220.8 2.2261 2.718
Exemplul 15.2 Sa se rezolve problema Cauchy
y1 = y1y2 y1(1) = 1 x ∈ [1, 2]y2 = − 1
xy1y2(1) = 1
Solutia problemei Cauchy este y1(x) = x, y2(x) = 1x .
Rezolvarea numerica este
x0 := 1 xf := 2 y0 :=(
11
)D(x, y) :=
(y0 · y1−1x·y0
)
u = rkfixed(y0, x0, xf , 5, D) u =
1 1 11.2 1.2 0.8331.4 1.4 0.7141.6 1.6 0.6251.8 1.8 0.5562 2 0.5
Utilizarea functiilor rkadapt, bulstoer, stiffb, stiffr, radau
Formatul de utilizare este
u = rkadapt(y0, x0, xf , acc,D, kmax, s)u = bulstoer(y0, x0, xf , acc,D, kmax, s))u = stiffb(y0, x0, xf , acc,D, J, kmax, s))u = stiffr(y0, x0, xf , acc,D, J, kmax, s))u = radau(y0, x0, xf , acc,D, kmax, s)
unde
• y0 = y(x0) valorile initiale date ın x0;
• x0, xf extremitatile intervalului de integrare;
1Indice literal: se tasteaza x.0
104 CAPITOLUL 15. INTEGRAREA NUMERICA A E.D.O.
• acc este o toleranta utilizata ın testele de precizie;
• D numele functiei ce corespunde lui f(x, y)
• J este o functie de variabile x, y a carei voloare este matricea de dimensiunen× (n + 1) data de
J(x, y) =
∂f1(x,y)
∂x∂f1(x,y)
∂y1. . . ∂f1(x,y)
∂yn
...... . . .
...∂fn(x,y)
∂x∂fn(x,y)
∂y1. . . ∂fn(x,y)
∂yn
• kmax numarul maxim de puncte intermediare ın care se calculeaza solutia;
• s marginea inferioara a pasului de integrare numerica.
• u o matrice avand cel mult kmax linii si n + 1 coloane cu solutia calculata.Prima coloana contine abscisele punctelor de discretizare. Celelalte coloanecontin valorile componentelor calculate ın punctele respective.
Utilizarea functiei Odesolve
Formatul de utilizare este
odesolve(x, b, [step])
unde
• x reprezinta variabila de integrare si care trebuie sa fie reala;
• b este punctul terminal al intervalului pe care se face integrarea;
• step este un parametru optional ce semnifica numarul de pasi efectuati pentruaflarea solutiei.
Datele problemei Cauchy se definesc ıntr-un bloc given. Egalitatea se obtinetastand Ctrl+ = iar derivatele prin Shift+? ( d
d ), Ctrl +Shift+? ( dd
) sau Ctrl +F7 (′).
Rezultatul este o functie MathCAD.
Exemplul 15.3
Sa se rezolve problema Cauchy
y′′(x) = −y
′(x) + 2y(x),
y(0) = 1,
y′(0) = 3.
15.2. REZOLVAREA PROBLEMELOR BILOCALE 105
Rezolvarea estegiven
y′′(x)=− y′(x) + 2 · y(x)y(0)=1y′(0)=3
y := odesolve(x, 5) x = 0, 1..5 x =
∣∣∣∣∣∣∣∣∣∣∣∣∣
012345
∣∣∣∣∣∣∣∣∣∣∣∣∣y(x) =
∣∣∣∣∣∣∣∣∣∣∣∣∣
14.44
12.30333.47490.996
247.354
∣∣∣∣∣∣∣∣∣∣∣∣∣15.2 Rezolvarea problemelor bilocale
Fie intervalul I de pe axa reala avand extremitatile a si b. Consideram problemabilocala
y′(x) = f(x, y(x)) x ∈ I (15.3)yi(a) = y0
i i ∈ {i1, . . . , im} ⊂ {1, 2, . . . , n} (15.4)g(y(b)) = 0 (15.5)
unde f : I × Rn → Rn si g : Rn → Rn−m, n ≥ 2. Notam J = {i1, . . . , im} siK = {1, 2, . . . , n}\J.
Rezolvarea ın MathCAD a problemei (15.3)-(15.5) se face ın doi pasi
1. Utilizand functia sbval se determina y(a), adica celelalte n−m componenteastfel ıncat sa fie satisfacute conditiile (15.5).
2. Se integreaza problema Cauchy formata din sistemul de ecuatii diferentiale(15.3) cu conditia initiala ın a si cu valoarea initiala determinata la pct. 1.
Exemplul 15.4 Sa se rezolve problema bilocala
(x3u′′)′′ = 1 x ∈ [1, 2]u(1) = u′′(1) = 0u(2) = u′′(2) = 0
Transformam ecuatia diferentiala de ordinul patru ıntr-un sistem de ecuatii diferentialede ordinul ıntai:
y0 = y1
106 CAPITOLUL 15. INTEGRAREA NUMERICA A E.D.O.
y1 = y2
y2 = y3
y3 =1x3− 6
x2y2 −
1x
y3
Conditiile la limita deviny0(1) = 0y2(1) = 0
siy0(2) = 0y2(2) = 0
Astfel functia g : R4 → R2 este definita prin
g(y) = g(y0, y1, y2, y3) =(
y0
y2
).
Utilizarea functiei sbval
Formatul de utilizare este
u = sbval(v, a, b, D, load, score)
unde
• v este un vector cu aproximatiile initiale pentru yi(a), i ∈ K.
• a, b extremitatile intervalului de integrare;
• D numele functiei ce corespunde lui f(x, y)
• load(a, v) numele functiei ce fixeaza y(a), load : R× Rcard(v) → Rn.
• score(b, y) numele functiei corespunzatoare conditiilor ın b, score : R×Rn →Rn−m.
• u vector cu valorile obtinute pentru componentele yi(a), i ∈ K.
Rezolvarea problemei bilocale este
1. Determinarea conditiilor initiale. Definim
a := 1 b := 2 D(x, y) :=
y1
y2
y31x3 − 6
x2 · y2 − 6x · y3
15.2. REZOLVAREA PROBLEMELOR BILOCALE 107
v :=(
11
)load(x1, v) :=
0v0
0v1
score(x2, y) :=(
y0
y2
)
u := sbval(v, a, b, D, load, score) u =(
0.017−0.5
)2. Integrarea problemei Cauchy.
y02 :=
0u0
0u1
N := 50 U := rkfixed(y0, a, b,N, D)
Graficul functiei u(x) = y0(x) este
2Indice literal: se tasteaza y.0
108 CAPITOLUL 15. INTEGRAREA NUMERICA A E.D.O.
Capitolul 16
Transformarea Fourier discreta
Cap. 15
Pentru calculul transformatei Fourier discrete MathCAD pune la dispozitie oserie de functii predefinite:
• fft definit prin
y = fft(x) yk =1√n
n−1∑j=0
xje2πin
jk
unde
y = (yk)0≤k≤1+2m−1 , x = (xj)0≤j≤n−1, xj ∈ R n = 2m, m > 2.
• FFT definit prin
y = FFT (x) yk =1n
n−1∑j=0
xje− 2πi
njk
unde
y = (yk)0≤k≤1+2m−1 , x = (xj)0≤j≤n−1, xj ∈ R n = 2m, m > 2.
• ifft definit prin
y = ifft(x) yk =1√n
2m−1∑j=0
xje− 2πi
njk
109
110 CAPITOLUL 16. TRANSFORMAREA FOURIER DISCRETA
undey = (yk)0≤k≤2m−1, x = (xj)0≤j≤2m−1 , xj ∈ R m > 2.
• IFFT definit prin
y = IFFT (x) yk =2m−1∑j=0
xje2πin
jk
undey = (yk)0≤k≤2m−1, x = (xj)0≤j≤2m−1 , xj ∈ R, m > 2.
• cfft definit prin
y = cfft(x) yk =1√n
n−1∑j=0
xje2πin
jk
undey = (yk)0≤k≤n−1, x = (xj)0≤j≤n−1, xj ∈ C.
• CFFT definit prin
y = FFT (x) yk =1n
n−1∑j=0
xje− 2πi
njk
undey = (yk)0≤k≤n−1, x = (xj)0≤j≤n−1, xj ∈ C.
• icfft definit prin
y = ifft(x) yk =1√n
n−1∑j=0
xje− 2πi
njk
undey = (yk)0≤k≤n−1, x = (xj)0≤j≤n−1, xj ∈ C.
• ICFFT definit prin
y = ICFFT (x) yk =n−1∑j=0
xje2πin
jk
undey = (yk)0≤k≤n−1, x = (xj)0≤j≤n−1, xj ∈ C.
111
Observatie 16.1 Expresiile√
n · icfft(x) si 1√n· cfft(x) corespund transformarile
Fourier discreta si inversa definite ın cursul de Analiza numerica.
Exemplul 16.1 Sa se calculeze coeficientii Fourier ai functiei f(x) = sin(x) +cos(3x).
Rezolvare: