You are on page 1of 25

1

ALGORYTMY ANALIZY NUMERYCZNEJ


WYKŁAD 1
Schemat Hornera
2

Nazwa przedmiotu: Algorytmy analizy numerycznej


Liczba godzin: 15/15

Warunki zaliczenia

Ćwiczenia – 90% - 2 kolokwia (6 i 12 zajęcia)


10% - aktywność na zajęciach, prace domowe
Egzamin – pisemny

Ocena zaliczająca powyżej 50%, wg opisu przedmiotu.


3

Literatura
[1] Kincaid D., Cheney W., Analiza numeryczna, WNT,
Warszawa 2005.
[2] Ralston A., Wstęp do analizy numerycznej, PWN, Warszawa
1981.
[3] Stoer, J., Bulirsch R., Wstęp do analizy numerycznej, PWN,
Warszawa 1987.
4

1. Schemat Hornera
Niech Pn oznacza zbiór wielomianów stopnia ≤n.
Wielomian p∈P n dany jest w postaci naturalnej jako
n n−1
p( x )=a0 x +a 1 x +…+an (1.1)
gdzie współczynniki a0 , a1 ,…, an mogą być rzeczywiste
bądź zespolone, natomiast x jest zmienną niezależną.
5

Chcemy wyznaczyć wartość


p(c) = ?
w dowolnym punkcie rzeczywistym x = c.
Ilość operacji wykonywanych przy zastosowaniu wzoru
n n−1
p( x )=a0 x +a 1 x +…+an (1.1)
to:
 n dodawań,
 n mnożeń (a0·xn, a1·xn−1, . . . , an−1·x)
 n−1 mnożeń (x2, x3, . . . , xn).
6

W sumie do obliczenia wartości wielomianu p(x) w


punkcie x = c potrzeba 3n − 1 operacji.

Jak zmniejszyć liczbę tych operacji?


Odpowiedź na to pytanie daje schemat Hornera.
7

Algorytm Hornera
n n−1
Po podzieleniu wielomianu p( x )=a0 x +a 1 x +…+an
przez dwumian x−c otrzymujemy:
p( x )=( x−c )⋅q ( x )+b n (1.2)
gdzie
n−1 n−2
q( x )=b0 x +b1 x +…+b n−1 , (1.3)
oraz b n jest resztą z dzielenia p( x ) przez x−c ,
b n= p(c ) .
8

Rzeczywiście, ze wzorów (1.1)-(1.3) wynika, że


n n−1 n−1 n−2
a0 x +a1 x +…+a n=( x−c )(b0 x +b1 x +…+bn−1 )+bn =
n n−1 n−2
=b 0 x +(−b 0⋅c+b1 ) x +(−b1⋅c+b2 ) x +…+(−b n−1⋅c+bn )
Porównując współczynniki przy xi, i = n, ... , 0
otrzymujemy następujący algorytm

a0=b0 b0 =a0
a1 =−b 0⋅c+b1 b1 =b0⋅c+a1
a2=−b 1⋅c+b 2 => b2=b1⋅c+a2
⋮ ⋮
an=−b n−1⋅c+bn b n =b n⋅c+an
9

Stąd otrzymujemy następujący algorytm

{b 0=a0
bi =bi−1⋅c+ai , i=1,2,…, n

Oczywiście, szukana wartość p( c )=bn .


Algorytm ten to schemat Hornera.

Koszt algorytmu to 2 n działań ( n mnożeń i n


dodawań).
10

Ponadto liczby b 0 , b1 ,…, b n−1 są współczynnikami


ilorazu, natomiast b n= p(c ) jest resztą z dzielenia
wielomianu p( x ) przez dwumian ( x−c ) .

Schemat Hornera („obliczenia ręczne”) wygodnie jest


realizować w formie tabeli:
a0 a1 … a n-1 an
c b0=a0 b1=b0*c+a1 … bn-1 bn=p(c)
11

Ćwiczenie 1.
Korzystając ze schematu Hornera znaleźć wartość
wielomianu p(x)= 3x5 +x2 -5x +1 w punkcie c=2.
i 0 1 2 3 4 5
ai 3 0 0 1 -5 1
c=2 bi 3 6 12 25 45 91

p(2)=91
p(x)=(x-2)(3x4 +6x3 +12x2 +25x +45) + 91
12

Ćwiczenie 2.
Znaleźć współczynniki wielomianu będącym wynikiem
dzielenia p( x )=x 5−3 x 3 + x 2−1 przez dwumian ( x+3 ) .
i 0 1 2 3 4 5
ai 1 0 -3 1 0 -1
c=-3 bi 1 -3 6 -17 51 -154

p(x)=(x+3)(x4 -3x3 +6x2 -17x +51) - 154


p(-3)=-154
13

Jeśli naszym zadaniem jest obliczenie wartości b n= p( c )


to współczynniki bi nie muszą być zapamiętywane:

{w=a0
w=w⋅c+ai , i=1 , 2 ,…, n

p(c)=w
14

Funkcja obliczania wartości wielomianu w


punkcie c przy pomocy schematu Hornera

double Horner(int n, double a[], double c)


//a[] – współczynniki, n – stopień, c-punkt
{
double w = a[0];
for (int i=1; i<=n; i++)
w = w * c + a[i];
return w;
}
15

Obliczanie współczynników ilorazu i reszty p(c) = an


Jeżeli współczynniki ai, i 0,1,… n, nie są potrzebne, to w
ich miejsce mogą być zapamiętane współczynniki
ilorazu bi , i 0,1,… n-1 i reszta bn, przy czym b0 a0.
void dziel (int n, double a [], double c)
{
for (int i=1; i<=n; i++)
a[i] = a[i-1] * c + a[i];
}
16

Schemat Hornera - 2gi sposób wyprowadzenia


(metoda wyciągania x przed ())

p( x)=a0 x +a 1 x −1+…+a n=( a0 x +…+an−1 ) x+an


n n n−1 n−2
+a 1 x

(( ) )
....= ... (( a0 x+a1 ) x+a2 ) x+...+an−2 x+an−1 x+an

{w=a0
w=w⋅c+ai , i=1 , 2,…, n

p(c)=w
17

Ćwiczenie 3.
Wyznaczyć schemat Hornera dla wielomianu postaci
W ( x )=an ( x−x 0 )…( x−x n−1 )+an−1 ( x−x 0 )…( x−x n−2 )+
+…+a1 ( x−x 0 )+a0
18

Wyliczenie pochodnych
Algorytm Hornera można zastosować do obliczania
unormowanych pochodnych w punkcie x=c , dokładniej:
( j)
p (c)
, j=1 , 2,…, n .
j!
Można wykazać, że jeżeli ponownie zastosujemy
algorytm Hornera, tym razem do ilorazu q(x) o
wyliczonych poprzednio współczynnikach
19

b 0 , b1 ,…, b n−1 to otrzymamy nowe współczynniki


ilorazu i resztę równą
p'(c)
c n−1 = .
1!
a [0] a [1] … a [n-1] a [n]
a0 a1 … a n-1 an
c b0 b1 … bn-1 bn =p(c)
c c0 c1 … cn-1 = p’(c)/1!

Po n -krotnym powtórzeniu tego algorytmu


20

a [0] a [1] … a [n-2] a [n-1] a [n]


a0 a1 … a n-2 a n-1 an
b0 b1 … bn-2 bn-1 bn=p(c)
c0 c1 … cn-2 cn-1=p’(c)/1!
d0 d1 dn-2=p”(c)/2!
… …
z0=p(n)(c)/n!
w tablicy a otrzymamy cały wektor unormowanych
pochodnych w punkcie x=c :

[ ]
(n) (n−1)
p (c) p (c) p ' (c) p(c)
a = , ,…, , ,
n! (n−1)! 1! 0!
21

gdzie
a[ n ]= p(c )
p'(c)
a[ n−1 ]=
1!

( n)
p (c)
a [ 0 ]=
n!
Jest to tzw. uogólniony schemat Hornera.
22

void HornerU(int n, double a [], double c){


//w tablicy współczynników a obliczamy pochodne
for (int i=0; i<n; i++)
//pętla po pochodnych unormowanych od 0-wej do n-1,
//n-tej liczyć nie trzeba, bo p(n)(c)/n!= a0
for (int k=1; k<=n-i; k++)
//S.H. dla obliczenia kolejnych pochodnych
//od 1 bo wyraz zerowy nie zmienia się a0=a0
a[k] = a[k-1]*c + a[k];
}
23

Obliczone wartości są współczynnikami szeregu Taylora


dla wielomianu p( x ) :
( n)
p'(c) p ''( c ) 2 p (c) n
p( x )= p( c )+ ( x−c )+ ( x−c ) +…+ ( x−c )
1! 2! n!
24

Przykład 1.1. Uogólniony schemat Hornera w punkcie


c 2 dla wielomianu p(x) x42x3 3x2 2, n 4
i 0 1 2 3 4
ai 1 2 -3 0 2
bi 1 4 5 10 22 =p(2)
ci 1 6 17 44 =p’(2)/1!
di 1 8 33 =p”(2)/2!

ei 1 10 =p(3)(2)/3!
fi 1 =p(4)(2)/4!
25

Ćwiczenie 4.
Stosując uogólniony schemat Hornera znaleźć
współczynniki rozwinięcia w szereg Taylora w punkcie
3
x=−1 wielomianu p( x )=2 x −3 x+4 .
Zadanie 1. (dla chętnych)
Znaleźć współczynniki wielomianu powstałego po
n n−1
podzieleniu wielomianu W ( x )=a0 x +a1 x +…+an

przez trójmian Q( x )=x 2− px+q .

You might also like