Scrigroup - Documente si articole

     

HomeDocumenteUploadResurseAlte limbi doc
BulgaraCeha slovacaCroataEnglezaEstonaFinlandezaFranceza
GermanaItalianaLetonaLituanianaMaghiaraOlandezaPoloneza
SarbaSlovenaSpaniolaSuedezaTurcaUcraineana

ēkaģeogrāfijaķīmijaBioloģijaBiznessDažādiEkoloģijaEkonomiku
FiziskāsGrāmatvedībaInformācijaIzklaideLiteratūraMākslaMārketingsMatemātika
MedicīnaPolitikaPsiholoģijaReceptesSocioloģijaSportaTūrismsTehnika
TiesībasTirdzniecībaVēstureVadība

Linearu algebrisku vienadojumu sistēmu atrisinašana ar iteraciju metodēm

matemātika



+ Font mai mare | - Font mai mic



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.

!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 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



DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 2656
Importanta: rank

Comenteaza documentul:

Te rugam sa te autentifici sau sa iti faci cont pentru a putea comenta

Creaza cont nou

Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved