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
Inenieru fakultate
Datorzinatņu un matematikas katedra
SKAITLISKAS METODES
Praktiskais darbs Nr.
Linearu algebrisku vienadojumu sistēmu atrisinaana ar iteraciju metodēm
1. Darba uzdevums
Atrisinat linearu algebrisku vienadojumu sistēmu ar vienkaro iteraciju metodi ar precizitati 10-5. Sakņu noteikanu katra iteracija noformēt ka funkciju. Izvadīt iegūto rezultatu (sakņu vērtības), sasniegto precizitati un iteraciju skaitu, kas bija nepiecieams precizitates sasnieganai, 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 |
|||
Vienkaro iteraciju metode |
Sakņu noteikanu katra iteracija noformēt ka funkciju |
|||||
2. Uzdevuma matematiskais apraksts
Dota linearu algebrisku vienadojumu sistēma no formas
japarveido normalveida. Jaizveido vienadojumam atbilstoa 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 pareizē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.
!Meiranam nepatika
matematiskais apraksts. Viņ grib, lai būtu viss, īsi
un skaidri jebkuram programmētajam, pa punktiem.
3. Algoritma blokshēma
1.shēma
Te teica, ka funkcija
nepareiza, jo kkas tur ir kas nav prasīts uzdevuma nosacījumos,
liidz ar to arii programmas kodaa javeic izmainas. o vins teica, ka
vajadzētu ievietot kkur augstaak, vai kkaa apvienot, es nezinu, jo tur
notiek tas pats kas input aij eit viņam nebija
skaidrs, kas notiek 13,14,15,16,17 bloka un ka log10e taa
neapzīmē. Taa dalja vispar ir vajadzīga?
2.shēma 4. Algoritma blokshēmas
apraksts
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 pareizē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 pareizējas iteracijas sakņu aprēķinu, pieskaitot alfa matricas elementu reizinajumus ar iepriekējo iteraciju sakņu vektora elementiem. Bloks 9 izvada pareizēja iteracija iegūtas saknes. Bloks 10 sak un bloks 13 pabeidz aprēķinat pareizējas iteracijas precizitati. Bloki 14, 16, 17 realizē ciklu ar cikla vadības skaitītaju i; cikla iekpusē bloka 15 pareizēja iteracija iegūtas saknes tiek saglabatas X vektora. Bloks 18 atgrie funkcijas mekle_saknes rezultatu - pareizē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 nodroina 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 atbilstou 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 pareizē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 nepiecieamo 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 nepiecieamo 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 atrisinaanai ar vienkaro 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ē (palaik programma ievadot kļūdainus datus, tas darbība noved pie uzkaranas).
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 2634
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved