metobl 312B lab7 U15 Chebdowski

background image

Politechnika Świętokrzyska

Metody obliczeniowe

U15.

Grupa: 312B

Piotr Chebdowski

1. Metody przybliżone rozwiązywania równań – metoda bisekcji.

Niech funkcja f(x) będzie funkcja ciągła w przedziale [a, b] i f(a)f(b) < 0. Oznacza
to, że wartość funkcji f zmienia znak w tym przedziale. Ponadto równanie f(x) = 0 ma w

przedziale [a, b] co najmniej jedno rozwiązanie. Idea metody polega na połowieniu przedziału
poszukiwań, za każdym razem biorąc tę część przedziału, na której wartość funkcji

zmienia znak. Połowienie takie jest kontynuowane tak długo, aż nie zostanie osiągnięta
określona dokładność obliczeń (oznaczana zwykle lub

). Prowadzi to do następującego

algorytmu, znanego jako metoda bisekcji lub metoda połowienia:

1) c := ( a+b)/2

2) jeśli b-c <= eps , to przyjmij , że pierwiastkiem równania f(x) = 0 jest wartość c, a więc f(c) = 0
i zakończ program .
3) jeśli znak (f(b)) * znak (f(c)) <= 0 to

a := c
w przeciwnym razie

b := c
4) skocz do punktu 1 .

Funkcja znak(x) zwraca wartość 1 jeśli x > 0, -1 jeśli x < 0 oraz 0 dla x = 0. Szczególną
zaletą metody bisekcji jest fakt, iż jest ona zawsze zbieżna do rozwiązania. Główną wadą

tej metody jest wolna zbieżność do rozwiązania.

Oszacowanie błędu:

Niech a

n

, b

n

, c

n

oznaczają n-tą obliczoną wartość odpowiednio a, b i c. Ponadto niech

oznacza prawdziwą wartość pierwiastka równania f(x) = 0. Błąd popełniony w n-tym

kroku w metodzie bisekcji

jest okreslony wzorem:

2. Program.

#include <stdio.h>
#include <stdlib.h>

void wys(float tab[3][4]);

int main()
{
float tab[3][4] = {
{6.34, 11.75, 10.0, -41.40},
{7.42, -19.03, 11.75, -49.49},
{5.57, 7.48, 6.36, -27.67}
};
float tmp[3][4], tmp2[3][4];
int i, j, s, n, a, b;

for(i = 0; i < 3; i++)
for(j = 0; j < 4; j++) {
tmp[i][j] = tab[i][j];
tmp2[i][j] = tab[i][j];
}

wys(tab);

n = 3;
for (s = 0; s < (n - 1); s++) {
for (i = (s + 1); i < n; i++) {

background image

for (j = (s + 1); j <= n; j++) {
tmp[i][j] = tmp2[i][j] - (tmp2[i][s] / tmp2[s][s]) * tab[s][j];
}
for(a = 0; a < 3; a++)
for(b = 0; b < 4; b++) {
tmp2[a][b] = tmp[a][b];
}
}
}

float x3 = tmp[2][3] / tmp[2][2];
float x2 = (tmp[1][3] - tmp[1][2] * x3)/tmp[1][1];
float x1 = (tmp[0][3] - tmp[0][1] * x2 - tmp[0][2] * x3)/tmp[0][0];
printf("\nWYNIK: %.2f\t%.2f\t%.2f\n", x1, x2, x3);

return 0;
}

void wys(float tab[3][4])
{
int i, j;
for(i = 0; i < 3; i++) {
for(j = 0; j < 4; j++) {
printf("%.2f\t", tab[i][j]);
}
printf("\n");
}
}

3. Konsola.


Wyszukiwarka

Podobne podstrony:
metobl 312B lab3 A143 Chebdowski
metobl 312B lab5 C121 Chebdowski
metobl 312B lab6 scilab Chebdowski
metobl 312B lab9 W27 Chebdowski
metobl 312B lab3 A143 Chebdowski
cpp z ccfd, pocpp lab7
Lab7
PE LAB7 generatory
lab7 3 6
dsp lab7 id 144062 Nieznany
lab7 NHIP pyt
[7]opracowanie, Elektrotechnika AGH, Semestr II letni 2012-2013, Fizyka II - Laboratorium, laborki,
lab7
lab7 NHIP
lab7
Lab7
lab7
LAB7 4, Tabela
wmp lab7, Laboratorium Informatyki

więcej podobnych podstron