sprawozdanier

WOJSKOWA AKADEMIA TECHNICZNA

Wydział Mechatroniki

NUMERYCZNE METODY OBLICZENIOWE

ĆWICZENIA LABORATORYJNE

Temat:

Rozwiązywanie równań nieliniowych i układów równań liniowych

Prowadzący: dr inż. Marek Gąsiorowski

dr inż. Leszek Baranowski

Ocena: …………….

Grupa
L9X1S1
Wykonał: GAŁUSZKA Michał

1.Cel ćwiczenia:

Nauczyć wykorzystywania odpowiednich funkcji stosowanych w Matlabie do rozwiązywania równań nieliniowych (funkcje: fzero i roots) oraz układów równań liniowych (funkcje: inv, dzielenie lewostronne \ oraz det).

2. Treść laboratorium

Zad. 1. Napisać skrypt programu, który dla wartości n wczytanej z klawiatury generuje układ n - równań liniowych o n niewiadomych postaci:

gdzie: - macierz losowo wygenerowanych współczynników,

- wektor wyrazów wolnych .

Sprawdź czy macierz współczynników jest nieosobliwa (det(A)≠0).

Porównaj czas trwania i dokładność rozwiązania układu równań wykorzystując:

- na ocenę dobry – dwie poznane funkcje w Matlabie.

- na ocenę bardzo dobry – trzy poznane funkcje w Matlabie.

Zad. 2. Napisać skrypt programu, który dla wartości n wczytanej z klawiatury wczytuje współczynniki wielomianu postaci:

oraz znajduje pierwiastki tego wielomianu wykorzystując:

- na ocenę dobry – dwie poznane funkcje w Matlabie.

- na ocenę bardzo dobry – napisaną samodzielnie procedurę numerycznego rozwiązywania równań nie liniowych.

Zad. 3. Napisać skrypt programu, który wyznacza miejsca zerowe funkcji

gdzie n – numer w dzienniku.

Opis:

Zadanie 1

Rozwiązanie układu równań liniowych o postaci:

[1]

polega na znalezieniu wartości zmiennych jeśli znane są wartości współczynników i .

Układ [1] można zapisać za pomocą sumy:

lub w postaci macierzowej:

AX=B

gdzie:

A = B = X =

Jeśli macierz A jest nieosobliwa (det A ≠ 0) to układ [1] posiada tylko jedno rozwiązanie. W całym rozdziale zakładamy, że macierz A i wektor B są rzeczywiste.

Istnieje wiele metod znajdowania rozwiązania układu [1].

b)Wzory Cramera

Jeśli macierz A jest nieosobliwa to układ [1] jest oznaczony i można wykazać, że rozwiązania dokładne ma postać:

gdzie:

Ai =

jest macierzą utworzoną z macierzy A, w której w miejsce i-tej kolumny wstawiono wektor B. Metoda oparta na wzorach Cramera wymaga obliczenia wartości n+1 wyznaczników. Dla dużych układów równań metoda ta jest mało efektywna ze względu na dużą złożoność obliczeniową oraz istotny wpływ błędów operacji arytmetycznych.

Metoda eliminacji Gaussa.

Metoda eliminacji Gaussa jest najbardziej efektywną metodą rozwiązywania dowolnych układów równań liniowych. Metoda eliminacji Gaussa polega na sprowadzeniu układu równań AX=B do układu o postaci A(n)X=B(n) gdzie A(n) jest macierzą trójkątną górną, a następnie rozwiązaniu tego trójkątnego układu równań.

Niech dany będzie układ równań:

zakładając że pomnóżmy pierwsze równanie przez i odejmijmy od i-tego równania , otrzymamy wtedy

gdzie , .

Następnie pomnóżmy drugie równanie przez () i odejmijmy od i-tego równania , otrzymamy więc

gdzie , .

Kontynuując takie postępowanie otrzymamy układ trójkątny

gdzie , ,

.

Rozwiązanie tego układu równań jest proste. Rozwiązujemy go od „tyłu” tzn. obliczamy kolejno wg wzorów:

.

Zadanie 2

Przy rozwiązywaniu równań poszukujemy pierwiastków równań, maksimów i minimów funkcji. Pierwiastki rzeczywiste równania, (czyli miejsca zerowe) →f(x)=0. W Matlabie funkcja fzero wyszukuje pierwiastek równania w pobliżu zadanej wartości zmiennej. Czyli do znalezienia wszystkich pierwiastków równania trzeba podać okolice gdzie ma on występować.

W przypadku wielomianów wartości funkcji wyszukuje się poprzez funkcje roots(c), gdzie c jest wektorem współczynników wielomianu.

Zadanie 3

Program ma za zadanie znaleźć miejsce zerowe funkcji f(x) = $\frac{1}{n}$x2 + sin(nx) – n

w pobliżu miejsca, które poda użytkownik. Ponadto program wykorzystuje funkcję, która przez obliczanie wartości funkcji znacząco usprawnia działanie programu. Skrypt rysuje również pomocniczy wykres, dzięki któremu użytkownik może w łatwy sposób podać przybliżoną wartość miejsca zerowego, która jest niezbędna w funkcji fzero.

Algorytmy

Zadanie 1


Zadanie 2

Zadanie 3


Kod źródłowy programu

Zadanie 1

%zadanie 1

clc

clear

n=input('Wprowadź wartość n= ');

%Tworzenie Macierzy kwadratowej A

for j=1:n

for i=1:n

A(i,j)=7*randn;

end

end

A

%skrypt generujący macierz B

B=sum(A.');

B=B';

%Przyrównanie wyznacznika do zera (macierz osobliwa)

o=det(A);

if o==0

disp('Macierz współczynników jest osobliwa!')

disp('Nie można obliczyć wartości macierzy niewiadomych X')

else

disp('Macierz jest nie osobliwa');

tic %zaczyna mierzyć czas

X1=inv(A)*B;

t1=toc; %kończy mierzyć czas pierwszej metody

%Metoda 2

tic %zaczyna mierzyć czas obliczeń

X2=A\B;

t2=toc; %kończy mierzyć czas obliczeń drugiej metody

%Wyświetleie wyników

disp('Wynik układu równań:')

disp('Wynik dla macierzy odwrotnej');

X1

disp('Wynik dla metody lewostronnej odwrotnej');

X2

disp(['Czas metody t1= ',num2str(t1),' s. Czas metody t2= ', num2str(t2),' s.'])

X1c=0;

X2c=0;

for i=1:n

X1c=(1-X1(i))^2+X1c;

end

for i=1:n

X2c=(1-X2(i))^2+X2c;

end

disp([' '])

disp(['dokladnosc dla x1= ', num2str(X1c)])

disp(['dokladnosc dla x2= ', num2str(X2c)])

end

if X1c>X2c'

disp('Metoda liczenia za pomocą dzielenia lewostronnego jest dokładniejsza.')

else

disp('Metoda liczenia za pomocą dzielenia lewostronnego jest dokładniejsza.')

end

Zadanie 2

clc;

clear;

disp('zadanie 2')

n=input('podaj wartosc n: ');

for i=1:n+1

a(i)=input('wprowadz wspolczynnik: ');

end

save dane2

% wykorzystanie funkcji roots

pier1=roots(a)

f=-15:0.001:15;

y=polyval(a,f);

plot(f,y)

xlabel('x')

ylabel('y')

grid on

% wykorzystanie funkcji fzero

u=1;

i=1;

while u~=0

disp('Odczytaj z wykresu przybliżone miejsce zerowe')

x0=input('i wprowadz mniejsce rozpoczęcia poszukiwań: ');

disp(' ')

pier2(i)=fzero('W',x0);

i=i+1;

disp('Wprowadz 0 aby wyświetlic wszytkie policzone pierwiastki');

u=input('lub inna liczbe aby ponownie wprowadzic miejsce poszukiwan pierwiastka ');

disp(' ')

end

disp('Pierwiastki danego wielomianu wynosza :')

disp([num2str(pier2)])

podprogram

function y = w(x)

load dane2

j=n;

y=0;

for i=1:n+1

y=y+a(i).*x.^j;

j=j-1;

end

end

Zadanie 3

clc

clear

n=input('wprowadz numer z dziennika: ');

while n==0

disp('nie mozna dzielic przez 0')

n=input('podaj jeszcze raz numer z dziennika: ');

end

save wartosc

hold on

grid on

x=-10:0.01:10;

y=(1/n)*(x.^2)+sin(n*x)-n;

plot(x,y)

x0=input('podaj argument ktory okresli poczatkowe przyblezenia wartosci szukanego miejsca zerowego: ');

pier=fzero(@g,x0);

disp(['miejsce zerowo w okolicy podanej wartości to: ',num2str(pier)]);

podprogram

function h=g(x)

load wartosc

h=(1/n)*(x.^2)+sin(n*x)-n;

end

Przykłady i wyniki obliczeń

Zadanie 1

A =

-1.1135 1.1174 0.0859 0.7481 0.4882 1.5877

-0.0068 -1.0891 -1.4916 -0.1924 -0.1774 -0.8045

1.5326 0.0326 -0.7423 0.8886 -0.1961 0.6966

-0.7697 0.5525 -1.0616 -0.7648 1.4193 0.8351

0.3714 1.1006 2.3505 -1.4023 0.2916 -0.2437

-0.2256 1.5442 -0.6156 -1.4224 0.1978 0.2157

Macierz nie jest osobliwa

Wynik układu równań:

X1 =

1.0000

1.0000

1.0000

1.0000

1.0000

1.0000

X2 =

1.0000

1.0000

1.0000

1.0000

1.0000

1.0000

Czas metody t1= 6.4343e-005 s. Czas metody t2= 4.0145e-005 s.

Błąd obliczeń przy wykorzystaniu macierzy odwrotnej wynosi 4.4409e-016

Błąd obliczeń przy wykorzystaniu dzielenia lewostronnego wynosi 8.8818e-016

Metoda liczenia za pomocą dzielenia lewostronnego jest dokładniejsza.

Zadanie 2

Wprowadź wartość n= 4

Podaj wartość współczynnika a1 dla x^4 : 3

Podaj wartość współczynnika a2 dla x^3 : 3

Podaj wartość współczynnika a3 dla x^2 : 2

Podaj wartość współczynnika a4 dla x^1 : 1

Podaj wartość współczynnika a5 dla x^0 : 3

Podaj miejsce początku poszukiwań: 4

Exiting fzero: aborting search for an interval containing a sign change

because or Inf function value encountered during search.

(Function value at -0.75792e+078 is Inf Check function or try again with a different starting value. .) (wystąpił taki komunikat ponieważ fzero nie liczy pierwiastków liczb zespolonych)

Miejsce zerowe wielomianu w pobliżu punktu x0: NaN

Miejsca zerowe znalezione za pomocą funkcji roots:

-0.8153 + 0.6405i

-0.8153 - 0.6405i

0.3153 + 0.7216i

0.3153 - 0.7216i


Zadanie 3

wprowadz mniejsce rozpoczęcia poszukiwań 13

Miejsce zerowe wielomianu w pobliżu punktu x0: 12.7719

Analiza wyników i wnioski

Zadanie 1

Najprostszym sposobem obliczania równania macierzowego A*X=B to sposób drugi, tzn. mnożenie przez odwrotność macierzy, gdzie: A* A-1=I, I macierz jednostkowa równa 1. Co pozwala na wykonać działanie A* A-1*X=B, czyli X= B* A-1. Odwrócenie macierzy ułatwia mi funkcja w Matlabie „inv(A)”, jeśli wyznacznik macierzy A (det(A)) jest różne od 0. Funkcje „tic” oraz „toc” służą do pomiaru czasu wykonywania działań. Dzięki tym funkcją użytym w zadaniu okazało się, iż rozwiązanie owego równania sposobem drugim, czyli przez pomnożenie równania przez macierz odwrotną jest szybsze co za tym idzie skuteczniejsze.

Zadanie 2

Program miał za zadanie policzenie pierwiastków wielomianu postaci:

W(x,a) = a1xn + a2xn-1 + a3xn-2 + … + anx + an+1

przy czym stopień n i współczynniki a podawane są przez użytkownika. Do wykonania zadania została użyta funkcja fzero i roots. Podstawowa różnica pomiędzy tymi funkcjami polega na tym, że za pomocą funkcji roots jesteśmy w stanie policzyć wszystkie pierwiastki wielomianu włącznie z pierwiastkami zespolonymi, natomiast funkcja fzero wyłącznie pierwiastek rzeczywisty. Dodatkowo musimy znać przybliżoną wartość miejsca zerowego wielomianu, gdyż funkcja fzero działa na zasadzie szukania miejsca zerowego w pobliżu podanej przez użytkownika wartości. Podsumowując funkcja roots jest wygodniejsza w użytkowaniu, a dodatkowo uzyskiwane dzięki niej wyniki są dokładniejsze niż w przypadku funkcji fzero.

Zadanie 3

Program miał za zadanie obliczyć miejsce zerowe funkcji f(x) = $\frac{1}{n}$x2 + sin(nx) – n

W programie została użyta funkcja fzero, w której wartość funkcji liczona jest w podprogramie, natomiast drugi parametr podawany jest przez użytkownika. Minusem tej funkcji jest to, że można jednorazowo za pomocą tej funkcji policzyć tylko jedno miejsce zerowe co bardzo utrudnia pracę i znacznie wydłuża czas pracy z programem.

Funkcja fzero jest mało efektywną metodą obliczania pierwiastków funkcji oraz dokładność tej funkcji jest mniejsza niż w przypadku innych metod.


Wyszukiwarka

Podobne podstrony:
2 definicje i sprawozdawczośćid 19489 ppt
PROCES PLANOWANIA BADANIA SPRAWOZDAN FINANSOWYC H
W 11 Sprawozdania
Wymogi, cechy i zadania sprawozdawczośći finansowej
Analiza sprawozdan finansowych w BGZ SA
W3 Sprawozdawczosc
1 Sprawozdanie techniczne
Karta sprawozdania cw 10
eksploracja lab03, Lista sprawozdaniowych bazy danych
2 sprawozdanie szczawianyid 208 Nieznany (2)
Fragmenty przykładowych sprawozdań
Lab 6 PMI Hartownosc Sprawozdan Nieznany
Mikrokontrolery Grodzki Sprawoz Nieznany
biochemia sprawozdanie O (1)
Chemia fizyczna sprawozdanie (6 1) id 112219
201 sprawozdanie finansoweid 26953
Czarne orly sprawozdanie2
lrm sprawozdanie kck lab2

więcej podobnych podstron