CATEGORII DOCUMENTE |
Bulgara | Ceha slovaca | Croata | Engleza | Estona | Finlandeza | Franceza |
Germana | Italiana | Letona | Lituaniana | Maghiara | Olandeza | Poloneza |
Sarba | Slovena | Spaniola | Suedeza | Turca | Ucraineana |
DOCUMENTE SIMILARE |
|
Rçzeknes augstskola
Inženieru fakultate
Datorzinatòu un matematikas katedra
SKAITLISKAS METODES
Praktiskais darbs Nr.
Linearu algebrisku vienadojumu sistçmu atrisinašana ar iteraciju metodçm
1. Darba uzdevums
Atrisinat linearu algebrisku vienadojumu sistçmu ar vienkaršo iteraciju metodi ar precizitati 10-5. Sakòu noteikšanu katra iteracija noformçt ka funkciju. Izvadît iegûto rezultatu (sakòu vçrtîbas), sasniegto precizitati un iteraciju skaitu, kas bija nepieciešams precizitates sasniegšanai, ka arî katra iteracija tas numuru, iegûtos rezultatus un sasniegto precizitati.
Dots:
Vienadojumu koeficientu matrica A |
Brîvo locekïu vektors C |
Iteraciju metode |
Papildnosacîjumi |
|||
Vienkaršo iteraciju metode |
Sakòu noteikšanu katra iteracija noformçt ka funkciju |
|||||
2. Uzdevuma matematiskais apraksts
Dota linearu algebrisku vienadojumu sistçma no formas
japarveido normalveida. Jaizveido vienadojumam atbilstoša alfa matrica (programma tiek realizçta ka 2-dimensiju masîvs):
un beta vektors
Aprçíinatas sakòu vçrtîbas ir x vektors:
Sakotnçji X vektora elementiem ir nullto tuvinajumu – beta vektora elementu – vçrtîbas, t. i. X=β.
Iteraciju procesa laika tiek aprçíinatas jaunas X vektora vçrtîbas, kas atbilst pašreizçjai k-tajai iteracijai:
, kur i ir X vektora elementa indekss ( 0<i<5).
Jaunas X vektora elementu vçrtîbas katras iteracijas beigas tiek salîdzinatas ar iepriekšçjam X vçrtîbam un tiek aprçíinata iegûta precizitate s:
![]() |
Ja iegûta s vçrtîba ir lielaka par vajadzîgo precizitati, tad iteraciju process turpinas, pretçja gadîjuma tas tiek pabeigts.
Pçc iteracijas procesa beigam X vektors satur vienadojumu sistçmas atrisinajumu ar aprçíinato precizitati s.
|
1.shçma
|
|
|
1.shçma ir shçma funkcijai, kura nosaka saknes katra iteracija.
Bloks 2 uzstada iteracijas precizitati, sakuma ta ir 0. Bloki 3, 11, 12 realizç ciklu ar cikla vadîbas skaitîtaju i. Bloks 4 piešíir pašreizçjas iteracijas sakòu vektora elementiem beta vektora vçrtîbas. Bloki 5, 7, 8 veido iekïautu ciklu ar vadîbas mainîgo j. Bloks 6 pabeidz pašreizçjas iteracijas sakòu aprçíinu, pieskaitot alfa matricas elementu reizinajumus ar iepriekšçjo iteraciju sakòu vektora elementiem. Bloks 9 izvada pašreizçja iteracija iegûtas saknes. Bloks 10 sak un bloks 13 pabeidz aprçíinat pašreizçjas iteracijas precizitati. Bloki 14, 16, 17 realizç ciklu ar cikla vadîbas skaitîtaju i; cikla iekšpusç bloka 15 pašreizçja iteracija iegûtas saknes tiek saglabatas X vektora. Bloks 18 atgriež funkcijas mekle_saknes rezultatu - pašreizçjas iteracijas precizitati.
2.shçma ir visas programma shçma.
Bloki 1, 6, 7 realizç ciklu ar cikla vadîbas skaitîtaju i. Bloki 2,4, 5 veido iekïautu ciklu ar vadîbas mainîgo j. Iekïautaja cikla lietotajam jaievada vienadojumu sistçmas koeficienti (divdimensiju masîvs a).
Bloki 8, 10, 11 veido ciklu ar cikla vadîbas skaitîtaju i; šaja cikla lietotajam jaievada vienadojumu sistçmas brîvie locekïi (vektors c).
Bloka 12 lietotajs ievada precizitati, kas jasasniedz, rçíinot saknes. Bloks 13 aprçíina, cik ciparu aiz komata jalieto datu izvadç, lietojot decimallogaritma operaciju. Ja show_precis < 0 (bloks 14), tas nozîmç, ka vajag uzstadît noformçšanas precizitati ar (-1)*show_precis cipariem aiz komata (bloks 15), pretçja gadîjuma izvades precizitate tiek pieòemta par 0 – lîdz veseliem skaitïiem (bloks 16).
Bloks 17 uzstada izvçlçto izvades precizitati, ja šadu iespçju nodrošina attiecîga programmçšanas valoda, kura tiks realizçts algoritms.
Bloki 18, 27, 28 realizç ciklu ar cikla vadîbas skaitîtaju i. Bloki 19, 22, 23 veido iekïautu ciklu ar vadîbas mainîgo j. Bloks 20 parbauda, vai iekšçja cikla apskatamais a matricas elements neatrodas uz matricas diagonales, ja nç – tad bloka 21 elements tiek parveidots par tam atbilstošu vienadojumu sistçmas normalveida alfa matricas elementu. Bloki 24, 25, 26 parveido brîvo locekïu vektoru c par vienadojumu sistçmas normalveida beta vektoru, piešíir a (alfa) matricas diagonales elementiem nulles vçrtîbas un piešíir sakòu vektora x elementiem nullto tuvinajumu – beta vektora elementu vçrtîbas.
Bloks 29 uzstada iteraciju skaitîtaju k. Iteraciju process tiek kontrolçts cikla, kas ietver blokus 30, 31, 32, 33, 34. Bloks 30 uzskaita pašreizçjo iteraciju, bloks 31 izvada iteracijas numuru. Bloks 32 izsauc iepriekš aprakstîto funkciju mekle_saknes un iegûst iteracijas precizitati s, ko izvada bloka 33. Bloks 34 salîdzina iegûto precizitati s ar nepieciešamo un, ja precizitate ir pietiekama, beidz iteraciju procesu.
Bloks 35 izvada iteraciju skaitu un sasniegto precizitati. Bloki 36, 38, 39 realizç ciklu ar cikla vadîbas skaitîtaju i, bloka 37 tiek izvadîtas iegûtas saknes.
5. Programma
#include<iostream.h>
#include<conio.h>
#include<math.h>
#include<iomanip.h>
//sakòu meklçšanas funkcija, kas atgriež iteracija sasniegto
//precizitati un saglaba rezultatus mainîgaja 'iter_vektors'
float mekle_saknes(float alfa[4][4], float beta[], float iter_vektors[])
//aprçíinu iteracijas precizitati
it_preciz=sqrt(it_preciz);
//saglabaju iteracijas rezultatu
for(i=0;i<4;i++)
iter_vektors[i]=x_it[i];
return it_preciz;
void main()
cout << 'Ievadiet vienadojumu sistçmas brîvos locekïus:n';
for(i=0;i<4;i++)
cout << 'Ievadiet nepieciešamo precizitati:n';
cin >> vaj_prec;
//izvades precizitates aprçíins
int out_prec=log10(vaj_prec);
if(out_prec<0)
//vajag ciparus aiz komata
out_prec=-out_prec;
else
//tikai veselus skaitïus
out_prec=0;
//noformçju izvadu
cout << setprecision(out_prec) << fixed;
//dota sistçma tiek parveidota normalveida
//iegûta alfa matrica tiek saglabata masîva koef,
//beta vektors - masîva brivie
for(i=0;i<4;i++)
//uzstadu iteraciju skaitîtaju
unsigned int it_skaits=0;
//katra iteracija iegûta precizitate
float preciz;
//sakas iteraciju process, kas turpinas,
//kamçr nav sasniegta vajadzîga precizitate.
//katra iteracija uzskaitu iteraciju
//un izsaucu sakòu meklçšanas funkciju
do
while(preciz>vaj_prec);
//iteraciju process pabeigts, izvadu rezultatus
cout << 'nn-------- ----- ------ -----------n';
cout << 'nTika veiktas '<< it_skaits << ' iteracijas un sasniegta precizitate '
<< preciz << 'nIegûtas saknes ir: ';
for(i=0;i<4;i++)
cout << 'nx' << i+1 << '=' << x[i];
cout << 'nnProgramma beigusi darbu, spiediet jebkuru taustiòu, lai aizvçrtu šo logu';
getch();
6. Kontrolpiemçrs
Atrisinajums „ar roku”:
A |
C | |||||||||||
Vajadzîga precizitate: | ||||||||||||
alfa |
beta |
x(0) | ||||||
|
Iteracija Nr. |
x1 |
x2 |
x3 |
x4 |
Precizitate |
Salîdzinajums |
>0,01 |
||||||
>0,01 |
||||||
>0,01 |
||||||
>0,01 |
||||||
<0,01 |
Aprçíinu piemçrs (3.iteracija):
x1=
x2=
x3=
x4=
Precizitate=(( 0,0480
Programmas darbîbas rezultats kontrolpiemçram:
Iteracijas nr. 1 rezultats: x1=2.84 x2=1.12 x3=1.12 x4=2.05 sasniegta precizitate 1.22 |
Iteracijas nr. 2 rezultats: x1=2.96 x2=1.05 x3=1.05 x4=1.98 sasniegta precizitate 0.18 |
Iteracijas nr. 3 rezultats: x1=2.99 x2=1.02 x3=1.02 x4=2.00 sasniegta precizitate 0.05 |
Iteracijas nr. 4 rezultats: x1=3.00 x2=1.01 x3=1.01 x4=2.00 sasniegta precizitate 0.02 |
Iteracijas nr. 5 rezultats: x1=3.00 x2=1.00 x3=1.00 x4=2.00 sasniegta precizitate 0.01 |
Tika veiktas 5 iteracijas un sasniegta precizitate 0.01
Iegutas saknes ir:
x1=3.00
x2=1.00
x3=1.00
x4=2.00
7. Iegûtais rezultats
Iteracijas nr. 1 rezultats:
x1=3.33958 x2=3.78536 x3=-3.00197 x4=3.54336
sasniegta precizitate 1.40974
Iteracijas nr. 2 rezultats:
x1=2.98287 x2=3.89350 x3=-2.90004 x4=3.25504
sasniegta precizitate 0.48213
Iteracijas nr. 3 rezultats:
x1=2.86481 x2=3.80312 x3=-2.88752 x4=3.27755
sasniegta precizitate 0.15089
Iteracijas nr. 4 rezultats:
x1=2.89159 x2=3.79229 x3=-2.89984 x4=3.30289
sasniegta precizitate 0.04036
Iteracijas nr. 5 rezultats:
x1=2.90266 x2=3.79940 x3=-2.90104 x4=3.30204
sasniegta precizitate 0.01323
Iteracijas nr. 6 rezultats:
x1=2.90083 x2=3.80064 x3=-2.90006 x4=3.29984
sasniegta precizitate 0.00327
Iteracijas nr. 7 rezultats:
x1=2.89981 x2=3.80008 x3=-2.89991 x4=3.29982
sasniegta precizitate 0.00117
Iteracijas nr. 8 rezultats:
x1=2.89992 x2=3.79995 x3=-2.89999 x4=3.30001
sasniegta precizitate 0.00027
Iteracijas nr. 9 rezultats:
x1=2.90001 x2=3.79999 x3=-2.90001 x4=3.30002
sasniegta precizitate 0.00010
Iteracijas nr. 10 rezultats:
x1=2.90001 x2=3.80000 x3=-2.90000 x4=3.30000
sasniegta precizitate 0.00002
Iteracijas nr. 11 rezultats:
x1=2.90000 x2=3.80000 x3=-2.90000 x4=3.30000
sasniegta precizitate 0.00001
Tika veiktas 11 iteracijas un sasniegta precizitate 0.00001
Iegutas saknes ir:
x1=2.90000
x2=3.80000
x3=-2.90000
x4=3.30000
8. Secinajumi
Tatad, dotas linearas vienadojumu sistçmas atrisinajums ar precizitati 10-5 ir X=( 2,90000; 3,80000; -2,90000; 3,30000)
Uzdevuma izpildes laika guvu algoritma izveides un programmçšanas iemaòas linearu algebrisku vienadojumu sistçmu atrisinašanai ar vienkaršo iteraciju metodi.
Par kontrolpiemçru tika izvçlçta vienadojumu sistçmu ar veseliem koeficientiem un aprçíini tika veikti ar nelielu precizitati. Rçíinot šo kontrolpiemçru “ar roku” un pçc tam ar programmas palîdzîbu, rezultati sakrita. Tapçc var uzskatît, ka programma darbojas pareizi un dod uzticamus rezultatus. Ievietojot iegûtos rezultatus dotaja vienadojumu sistçma, tie bija pareizi.
Programmu varçtu uzlabot, paredzot kïûdu kontroli datu ievadç (pašlaik programma ievadot kïûdainus datus, tas darbîba noved pie uzkaršanas).
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 2726
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2025 . All rights reserved