Sprawozdanie nie dokończone, WAT, LOTNICTWO I KOSMONAUTYKA, WAT - 1 rok lotnictwo, PI, Podstawy informatyki


Wojskowa Akademia Techniczna 25.01.2010r.

im. Jarosława Dąbrowskiego

Podstawy Informatyki

dr. inż. Marek Gąsiorowski

dr. inż. Leszek Baranowski

Sprawozdanie z Laboratorium nr.7.

Temat: ,,Rozwiązywanie równań nieliniowych i układów równań liniowych''

Autor: Robert Filiks

Lotnictwo i kosmonautyka

L9X2S1

  1. Wstęp

W celu rozwiązania równań nieliniowych w programie Matlab możemy wykorzystać funkcje: fzero i roots; Aby rozwiązać układ równań liniowych możemy skorzystać z funkcji: inv, dzielenia lewostronnego / oraz det.)

x=fzero(`F',x0)

Oblicza miejsce zerowe funkcji o podanej nazwie zaczynając obliczenia z punktu startowego x0, który winien być początkowym przybliżeniem wartości szukanego miejsca zerowego.

x=fzero(`F',x0,eps,w)

W powyższym wywołaniu opcjonalny trzeci parametr eps określa żądaną dokładność, parametr „w” zaś, jeśli ma wartość nie zerową, powoduje wyświetlanie pośrednich rezultatów na ekranie.

k=roots(a)

Wyznacza współczynniki a(1),a(2),…,a(n+1) wielomianu:

W(x,a)=a(1)xn+a(2)xn-1+..+a(n)x+a(n+1)

O pierwiastkach podanych w wektorze k. Jak widać współczynniki są uszeregowane wg malejących potęg zmiennej x.

Inv(a) - wyznacza odwrotność macierzy A.

Macierz odwrotna - element odwrotny w pierścieniu macierzy kwadratowych. Uogólnieniem pojęcia macierzy odwrotnej jest tzw. uogólniona macierz odwrotna.

\ A.\B => B(i,j)/A(i,j)

  1. Kod źródłowy programu Laboratorium nr.7

Zad. Nr.1.

clc

clear all

disp('zad_1');

n=input('Podaj ilosc niewiadomych (n): '); % deklaracja ilości niewiadomych

A=randn(n); % wypełniamy macierz n x n liczbami pseudolosowymi

for i=1:n % tworzymy układ n-równań liniowych o n niewiadomych

b(i,1)=0;

for j=1:n

b(i,1)=A(i,j)+b(i,1);

end

end

A,b % macierz A - macierz współczynników

% macierz b - macierz rozwiązań

if det(A)~=0 % sprawdzamy czy macierz jest nie osobliwa

disp('macierz jest nieosobliwa');

else

disp('macierz jest osobliwa');

end

disp(' ');

tic % rozpoczyna pomiar czasu potrzebny do wykonania macierzowej operacji

disp('sposob 1, MACIERZ ODWROTNA (funkcja inv)');

p=inv(A)*b;

disp('rozwiazaniem jest wektor p:');

disp(p); % rozwiązaniem jest wektor p powstały poprzez pomnożenie wektora b przez odwrotność macierzy A

toc % kończy pomiar czasu operacji, wyświetla czas

disp(' ');

tic

disp('sposob 2, "\" LEWOSKRETY, dzielenie lewoskrętne');

q=A\b;

disp('rozwiazaniem jest wektor q:');

disp(q); % rozwiązaniem jest wektor q powstały poprzez podzielenie macierzy A przez macierz b

toc

disp(' ');

Zad. Nr.2.

clc

clear all

disp('zad_2');

n=input('Podaj stopien wielomianu: ');

k=0;

for i=1:n+1

a(i)=input(['Podaj wartosc wspolczynnika przy x^',num2str(n+1-i),': ']);

while k==0

if a(1)==0

disp(' ');

disp(['Wspolczynnik przy x^',num2str(n+1-i),' nie moze byc rowny 0']);

a(1)=input(['Podaj nowa wartosc wspolczynnika przy x^',num2str(n+1-i),': ']);

disp(' ');

else

k=1;

end

end

end

disp(' ');

disp('FUNKCJA ROOTS');

pierw=roots(a) % obliczamy pierwiastki wielomianu W(x,a)=a(1)xn+a(2)xn-1+..+a(n)x+a(n+1), gdzie n jest podanym stopniem wielomianu.

Zad. Nr.3.

clc

clear

disp('zad_3');

x=0;

x1=fzero('W(x)',x) % funkcja do wyznaczania miejsc zerowych funkcji

x2=fzero('W(x)',-x1) % program wykożystuje podaną poniżej funkcje W(x)

function y = W(x)

y=(x^2/n)+sin(n*x)-n; %n nr w dzienniku

disp([num2str(n+1-i)]);

end

  1. Wnioski

Matlab jest bardzo pomocnym programem, który pozwala szybko obliczyć rozwiązania równań nieliniowych i układów równań liniowych.

Według pomiarów czasowych wykonanych za pomocą funkcji tic toc , wnioskuję, że najszybsza jest metoda dzielenia lewostronnego. Wolniejszą metodą, jest wzór Cramera. A na miejscu ostatnim mamy macierz odwrotną.

Program jest przydatny do wielu obliczeń matematycznych, gdyż skraja czas pracy.



Wyszukiwarka