Your SlideShare is downloading. ×
Matematički softwere za problem ax = b
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Introducing the official SlideShare app

Stunning, full-screen experience for iPhone and Android

Text the download link to your phone

Standard text messaging rates apply

Matematički softwere za problem ax = b

687
views

Published on


0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
687
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
1
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. SVEUČILIŠTE U SPLITUFAKULTET ELEKTROTEHNIKE, STROJARSTVA I BRODOGRADNJE SEMINARSKI RADMATEMATIČKI SOFTWARE ZA PROBLEM Ax = b Ivan Bubalo, Zdeslav Nikolić, Josip Perak Split, studeni 2010.
  • 2. Sadržaj1.OPĆENITO O SUSTAVIMA LINEARNIH JEDNADŽBI...............................................................................32.PREGLED BIBLIOTEKA..........................................................................................................................5 2.1.BLAS (Basic Linear Algebra Subroutines)......................................................................................5 2.1.1.Razina 1.................................................................................................................................5 2.1.2.Razina 2.................................................................................................................................6 2.1.3.Razina 3.................................................................................................................................7 2.2.LAPACK (Linear Algebra PACKage)................................................................................................8 2.2.1.LAPACK rutine i potprogrami.................................................................................................9 2.2.2.CLAPACK..............................................................................................................................103.PRIMJER.............................................................................................................................................12LITERATURA..........................................................................................................................................15 2
  • 3. 1. OPĆENITO O SUSTAVIMA LINEARNIH JEDNADŽBIU matematici i linearnoj algebri, sustav linearnih jednadžbi je skup linearnih jednadžbi, kaošto jeStandardni problem predstavlja utvrđivanje postoji li skup vrijednosti za nepoznate X1, X2 iX3 koji zadovoljava sve jednadžbe istovremeno, kao i pronalaženje takovog skupa ako postoji.Postojanje skupa rješenja ovisi od jednadžbi, ali i od dostupnih vrijednosti (radi li se o cijelimbrojevima, realnim brojevima, i slično).Sustavi linearnih jednadžbi spadaju među najstarije matematičke probleme, i imaju mnogeprimjene, kao što su obrada digitalnih signala, procjene, predviđanja, kao i linearnoprogramiranje ili aproksimacija nelinearnih problema u numeričkoj analizi. Postoji mnogonačina da se riješi sustav linearnih jednadžbi. Međutim, među najučinkovitijima su Gaussovpostupak i dekompozicija Choleskyja.Poopćeno, sustav sa m linearnih jednadžbi i n nepoznanica se zapisuje na sljedeći načingdje su X1, X2 … Xn nepoznanice, a brojevi a11, a12, …, amn su koeficijenti sustava. Stavljamokoeficijente u matricu na sljedeći način: 3
  • 4. Ako predstavimo svaku matricu slovom, ovo postaje: Ax = bgdje je A a m×n matrica, x je vektor stupac sa n članova, a b je vektor stupac sa m članova.Gaus-Jordanova eliminacija se primjenjuje na sve ove sustave, čak i ako su koeficijenti iznekog proizvoljnog polja.Ako je polje beskonačno (kao u slučaju realnih ili kompleksnih brojeva), moguća su samosljedeća tri slučaja (točno će jedan biti točan) za svaki dani sustav linearnih jednadžbi: • sustav nema rješenja (sustav je proturječan) • sustav ima točno jedno rješenje • sustav ima beskonačno mnogo rješenjaSustav oblikase naziva homogenim sustavom linearnih jednadžbi. Skup svih rješenja se naziva nulprostorom matrice A.Posebno u svjetlu obilja gore navedenih primjena, nekoliko učinkovitijih zamjena Gauss-Jordanovoj eliminaciji je razvijeno za širok spektar specijalnih slučajeva. Mnogi od ovihpoboljšanih algoritama su složenosti O(n2). Neki od najuobičajenijih specijalnih slučajeva su: • Za probleme oblika Ax = b, gdje je A simetrična Toeplitzova matrica, može se koristiti Levinsonova rekurzija ili neka od njenih inačica. Jedna od često korištenih varijacija je Schurova rekurzija, koja se koristi u obradi digitalnih signala. • Za probleme oblika Ax = b, gdje je A singularna matrica, ili gotovo singularna, matrica A se dekomponira u umnožak triju matrica. Matrice s lijeve i desne strane su lijevi i desni singularni vektori. Matrica u sredini je dijagonalna matrica i sadrži singularne vrijednosti. Matrica tada može biti invertirana jednostavnom zamjenom redoslijeda tri komponente, transponiranjem matrica singularnih vektora, te uzimanjem recipročne 4
  • 5. vrijednosti dijagonalnih elemenata središnje matrice. Ako je bilo koja od singularnih vrijednosti preblizu nule, i stoga blizu singularnosti, postavlja se na nulu. 2. PREGLED BIBLIOTEKA 2.1. BLAS (Basic Linear Algebra Subroutines)BLAS je osnovni potprogram za linearnu algebru. Nastao je zbog potrebe da se elementarneoperacije u linearnoj algebri standardiziraju.To je biblioteka potprograma korištenih u linearnoj algebri. Prema strukturama koje koriste,grupirani su u tri razine. Prvu razinu čine potprogrami koje vrše najjednostavnije operacije savektorima, kao što su zbrajane, skaliranje, računanje norme, skalarnog produkta. U drugojrazini su potprogrami za kompleksnije operacije sa vektorima i matricama a treća razina surutine koje rade najkompleksnije operacije (reda O(n3))sa podacima reda O(n2) kao što sumnoženje matrica ili rješavanje sistema jednadžbi.Kako je BLAS povijesno vezan za programski jezik FORTRAN, ti tipovi su real, doubleprecision, complex i double complex. U nekim operacijama, kao, na primjer, pri traženjukomponente vektora s najvećom apsolutnom vrijednošću, rezultat je cjelobrojan (integer).Zbog preglednosti, uzeto je da je prvo slovo imena procedure oznaka tipa. Tako imena kojapočinju sa I označavaju cjelobrojni tip (integer), S označava jednostruku preciznost (single),D označava dvostruku preciznost (double), C označava kompleksni tip (complex), a Zoznačava kompleksni tip u dvostrukoj preciznosti.Implementacija BLAS-a u jeziku C ima sličnu strukturu, gdje je hijerarhija tipova ona iz C-a. 2.1.1. Razina 1Prvu razinu čine potprogrami koje vrše najjednostavnije operacije sa vektorima, kao što suzbrajane, skaliranje, računanje norme, skalarnog produkta itd..U skupini operacija s vektorima izdvajamo: • SCOPY kopira vektor x u vektor y. 5
  • 6. • SSWAP razmjenjuje sadržaj vektora x i y. • ISAMAX računa najmanji indeks i za koji je • SNRM2 računa euklidsku duljinu ||x||2 vektora x = (n, X, kx) tipa real. • SASUM računa l1 normu ||x||1 = |x1| + …… + |xn|. • SSCAL računa a·x gdje je a skalar istog tipa kao i vektor x. Rezultat je u vektoru x. • SDOT računa skalarni produkt (x, y) = y * x vektora x i y. • SROT primjenjuje ravninsku rotaciju na vektore x i y. Preciznije, matrica [x,y] je zamijenjena [c·x + s·y, c·y - s·x] • SROTG računa Givensovu ravninsku rotaciju. • SROTMG računa modificiranu Givensovu rotaciju. • SROTM primjenjuje modificiranu Givensovu rotaciju. 2.1.2. Razina 2U drugoj razini su potprogrami za kompleksnije operacije sa vektorima i matricama.Izdvajamo neke osnovne procedure:SGEMV Računa izraz oblikaDGEMVCGEMV y: = αAx + βy ili y: = αATx + βyZGEMV 6
  • 7. STRMVDTRMV Računa produkt y = Ax ili y = ATxCTRMVZTRMVSTRSVDTRSV Rješava linearne sustave Ax = b iliCTRSV ATx = bZTRSV 2.1.3. Razina 3Treća razina su rutine koje rade najkompleksnije operacije (reda O(n3))sa podacima redaO(n2) kao što su množenje matrica ili rješavanje sistema jednadžbi.Tri najosnovnije matrične operacije su:SGEMMDGEMM Računa izraz oblika C := αf(A)g(B) + βCCGEMMZGEMMSTRMMDTRMM Računa B := αf(A)B ili B := αBf(A)CTRMMZTRMM 7
  • 8. STRSMDTRSM Rješava po X jednadžbe f(A)X = αB ili Xf(A) = αBCTRSMZTRSMOstale procedure i kompletna dokumentacija mogu se naći na Internetu, na adresihttp://www.netlib.org . 2.2. LAPACK (Linear Algebra PACKage)LAPACK (Linear Algebra PACKage) je biblioteka potprograma za rješavanje problema ulinarnoj algebri. Ona je građena na osnovi BLAS biblioteke. LAPACK je napisan u Fortranu77 i osigurava rutine za rješavanje linearnih jednadžbi. Dizajniran je tako da radi na širokomrasponu modernih i brzih računala. Osnovne značajke LAPACK-a: 1. Opsežnost. LAPACK osigurava veliki broj, preko 1000 potprograma za rješavanje problema linearne algebre 2. Numerička pouzdanost. Velika pažnja se posvećuje numeričkoj stabilnosti. Uz algoritme su ponuđene i procedure za ocjenu greške rezultata. Preko ponuđenog teorijskog okvira unutar kojeg se ocjenjuje stabilnost algoritma možemo dobiti informacije o rezultatima i matematičkom modelu. 3. Prenosivost i efikasnost na raznim računalima. LAPACK rutine su napisane tako da što više računanja obave preko poziva BLAS operacija. Pa ako imamo BLAS optimiran za neko računalo onda će LAPACK dobro iskoristiti resurse tog računala. Prenosivost je osigurana preko pridržavanja standarda programskih jezika FORTRAN-a i C-a. 4. Dobra dokumentacija i jednostavno korištenje. Sve su procedure detaljno dokumentirane a na Intenetu je moguće naći opise matematičkih detalja i opise detalja u vezi implementacij. 8
  • 9. 5. Neprestano usavršavanje. Projektom LAPACK su obuhvaćeni stručnjaci iz cijelog svijeta koji pišu nove ili poboljšavaju već postojeće algoritme. 6. Kompletan izvorni kod je dostupan svima putem internet stranice http://www.netlib.org/lapack/ 2.2.1. LAPACK rutine i potprogramiLAPACK osigurava slijedeće rutine: • rješavanje linearnih sustava • linearni problem najmanjih kvadrata • problem svojstvenih vrijednosti • problem singularnih vrijednostiDok se LAPACK biblioteka sastoji od slijedećih potprograma: • upravljačkih (driver) potprograma • računskih (computational) programa • pomoćnih (auxiliary) potprogramaUpravljački potprogram koji služi za rješavanje standarnih problema, obično poziva nizračunski potprograma koji mogu rješavati širi raspon problema. Pomoćni potprogrami imajučestu primjenu u numeričkoj analizi.Sada ćemo prikazati pravilo imenovanja LAPACK potprograna. Svi upravljački i računskipotprogrami imaju imena oblika XYYZZZ gdje je: • X – tip podataka npr. o S REAL 9
  • 10. o D DOUBLE PRECISION o C COMPLEX • YY – tip matrice o BD bidijagonalna o DI dijagonalna o GB opća vrpčasta • ZZZ - predstavlja operaciju koja se izvršava, u stvarnom nazivu treće slovo može biti praznoKao primjer imenovanja možemo uzeti upravljački potprogram za rješavanje oćenitog sustavalinearnih jednadžbi koji se zove SGESV gdje je • S – ulazni i izlazni parametri su realne varijable • GE – predstavlja opću matricu • SV – predstavlja sustav koji se rješava u ovom slučaju linearne jednadžbe 2.2.2. CLAPACKKao što smo vidjeli LAPACK rutine su napisane u FORTRAN-u, iako se one mogu koristitina Linux sustavima ipak je bilo potrebno napraviti C verziju LAPACK-a. CLAPACK jebiblioteka napravljena pomoću alata f2c koji prebaciva FORTRAN u C.Pošto se FORTRAN i C razlikuju trebamo napraviti neke prilagodbe kako bi mogli koristitiLAPACK u C-u. Jedna razlika između C-a i FORTRAN-a leži u načinu na koji su matriceporedane u memoriji.Izgled matrice:Matrica u fortranu: 10
  • 11. Matrica u C-u:Trebamo transporirati našu matricu prije nego je predamo LAPACK rutini:double *A;A = malloc( M*N*sizeof(double) );for(j=0; j < N; j++){ for (i=0; i < M; i++) A[j*M+i] = i+j;}Druga razlika između C-a i FORTRANA je u načinu na koji se argumenti prenosepotprogramu. FORTRAN koristi mehanizam koji se zove poziv prema referenci. Argument sešalje programu koji ga može čitati i promjeniti mu vrijednost. Za razliku od FORTRANA uC-u se programu šalje kopija vrijednosti argumenta a ne sami argument. Zbog togapotprogram ne može promjeniti vrijednost argumenta (poziv prema vrijednosti). Da bikoristili poziv prema referenci u C-u, trebamo programu poslati pokazivač na varijabluumjesto same varijable. 11
  • 12. 3. PRIMJERRiješimo sustav Ax = b, pri čemu su ,pomoću CLAPACK potprograma dgesv_(). Izračunato rješenje ćemo usporediti s egzaktnimrješenjem koje iznosi TPotprogram dgesv_() računa rješenje realnog sustava linearnih jednadžbi Ax = b,gdje je A n × n matrica, a x i b su n × nrhs matrice. Za računanje je korištena LU faktorizacijas parcijalnim pivotiranjemU zaglavlju clapack.h deklaracija za taj potprogram jeint dgesv_(integer *n, integer *nrhs,doublereal *a, integer *lda, integer *ipiv,doublereal *b, integer *ldb, integer *info);pri čemu su:n - (ulaz) red matrice Anrhs - (ulaz) broj stupaca matrice ba - (ulaz) n × n matrica sustava A (izlaz) faktori L i U, bez dijagonale od Llda - (ulaz) vodeća dimenzija polja a (lda ≥ n)ipiv - (izlaz) n polje za spremanje indeksa koji definiraju matricu permutacija P: redak i matrice A zamijenjen je retkom ipiv[i]b - (ulaz) n × nrhs matrica desne strane b (izlaz) n × nrhs matrica rješenja x 12
  • 13. ldb - (ulaz) vodeća dimenzija polja b (lda ≥ n)info - (izlaz) informacija o izvršavanju potprograma (0=OK)Kod primjera:#include <stdio.h>#include <stdlib.h>#include "f2c.h"#include "fblaswr.h"#include "clapack.h"main(integer argc, char *argv[]){doublereal a[]={1.0,2.0,5.0,1.0, 1.0,1.0,1.0,4.0, 4.0,1.0,1.0,1.0, 1.0,6.0,0.0,3.0};doublereal b[]={7.0,10.0,7.0,9.0};doublereal x[]={1.0,1.0,1.0,1.0};doublereal alpha, rg;integer n, nhrs, *ipiv, info, incx;n=4;ipiv=malloc(n*sizeof(integer));nhrs=1;incx=1;alpha=-1.0;dgesv_( &n, &nhrs, a, &n, ipiv, b, &n, &info );printf("dgesv() je izracunao :n[ %19.16f, %19.16f, %19.16f, %19.16f ]^Tn", b[0],b[1],b[2],b[3]);printf("Egzaktno rjesenje je : [ 1, 1, 1, 1 ]^Tn");daxpy_( &n, &alpha, x, &incx, b, &incx );printf("Razlika izracunatog i egzaktnog rjesenja :n[ %.2e, %.2e, %.2e, %.2e ]^Tn",b[0],b[1],b[2],b[3]);rg=dnrm2_( &n, b, &incx )/dnrm2_( &n, x, &incx ); 13
  • 14. printf("Relativna greska rjesenja iznosi : %.2en", rg);}Nakon kompajliranja programa u Visual Studiu rješenje je: Slika 1. Primjer zadatka 14
  • 15. LITERATURA[1] Z. Drmač, V. Hari, M. Marušić, M. Rogina, S. Singer i S. Singer: Numerička analiza, Zagreb, 2003.[2] http://www.netlib.org/blas/[3] http://www.netlib.org/lapack/[4] http://www.netlib.org/clapack/[5] http://web.math.hr/~nela/zr1.html[6] http://hr.wikipedia.org/wiki/Sustav_linearnih_jednadžbi 15