background image

Numeryczne Obliczenia Inżynierskie

NOI wykład 4

Materiały przygotowane dla studentów Wydziału Mechanicznego – Politechniki Opolskiej

przez: dr inż. Jacka Wydrycha

background image

Program VBA złożony jest z instrukcji (rozkazów), które w
procesie kompilacji przetwarzane są na kod wykonywalny
zrozumiały dla procesora. Instrukcje te wykonywane są w
określonym

porządku

zdefiniowanym

przez

programistę.

Pojedynczą instrukcje możemy nazwać zdaniem języka VBA.
Zdanie takie musi być odpowiednio zbudowane i może zawierać
słowa kluczowe, wyrażenia, stałe, operatory oraz zmienne.

Pojedyncza instrukcja może np. zadeklarować zmienną, ustawić 

Pojedyncza instrukcja może np. zadeklarować zmienną, ustawić 
wartość lub wykonać określoną operację.

background image

Instrukcje programu zorganizowane są w procedury, moduły 
i projekty.

Procedura

jest bardzo ważną częścią programu, ponieważ

aby kod mógł być wykonany należy umieścić go w procedurze.
Jest to najmniejsza część kodu którą można uruchomić
niezależnie od innych części kodu. Procedura składa się z
przynajmniej jednej instrukcji umieszczonej między dwiema
specjalnymi instrukcjami: z których pierwsza z nich deklaruje
procedurę a ostatnia ją zamyka. Więcej informacji na temat

procedurę a ostatnia ją zamyka. Więcej informacji na temat
procedur znajdziesz na stronie Procedury.

Moduł

zawiera z jedną lub więcej procedur oraz sekcje

deklaracji w której umieszczamy instrukcje wspólne dla w
wszystkich procedur tego modułu. Możemy wyróżnić dwa
rodzaje modułów: moduł standardowy i moduł klasy.

Projekt

obejmuje wszystkie moduły, formularze, obiekty

aplikacji macierzystej dokumentu oraz sam dokument.

background image

Programy VBA mogą być bardzo skomplikowane, mogą zawierać
wiele instrukcji i procedur rozmieszczonych w rożnych
modułach a nawet projektach. Najprostszy program składa
się z jednej procedury w której jest jedna instrukcja,
procedura ta umieszczona jest w module co daje nam już
cały projekt. Poniżej znajduje się kod takiego programu,
składa się on z jednej procedury o nazwie Powitanie, w której
umieszczona jest jedna instrukcja. Instrukcja ta wyświetla

umieszczona jest jedna instrukcja. Instrukcja ta wyświetla
okienko komunikatu i z napisem: Witam i życzę miłej zabawy.

Sub Powitanie()
MsgBox "Witam i życzę miłej zabawy"
End Sub

background image

Procedura

- jest to najmniejsza część kodu która posiada

własną nazwę, jest to też najmniejsza część kodu którą
można uruchomić niezależnie od innych części kodu. Procedura
jest bardzo ważną częścią programu aby kod mógł działać
należy umieścić go w procedurze. Procedura składa się z
instrukcji deklarującej procedurę, linii kodu wykonywanych
wewnątrz procedury oraz instrukcji zamykającej.

wewnątrz procedury oraz instrukcji zamykającej.

background image

Typy procedur:
Najogólniej procedury możemy podzielić na dwa typy tj.
podprogramy i funkcje.

Podprogram

- jest to podstawowy typ procedur języka

VBA. Procedurę deklarujemy za pomocą słowa kluczowego
Sub, instrukcja End Sub zamyka procedurę. Instrukcja
deklarująca procedurę kończy się parą nawiasów - można w
niej

umieszczać

parametry

podprogramu.

Jest

to

typ

procedury, który można uruchomić niezależnie od innych
procedur. Procedury tego typu wykonują akcje, lecz nie

procedur. Procedury tego typu wykonują akcje, lecz nie
zwracają wartości. Podprogram może wywołać inną procedurę.

Funkcja

-

procedura

deklarowana

za

pomocą

słowa

kluczowego

Function,

instrukcja

End

Function

kończy

procedurę. Funkcja może pobierać argumenty które są do niej
przekazywane np. przez procedurę wywołującą. Procedura
Function

jest

podobna

do

procedury

Sub,

jednak

w

przeciwieństwie do podprogramu zwraca wartość np. do
procedury która ją wywołała.

background image

Poniżej

znajduje

się

przykład

prostego

podprogramu.

Procedura ta wykonuje tylko jedną czynność, wyświetla okienko
komunikatu z informacją aby użytkownik wprowadził wartość
numeryczną większą od Zera.

Sub BłędnaWartość()
MsgBox "Wprowadź wartość numeryczną większą od zera"
End Sub

background image

Wywołanie podprogramu

:

Jest wiele sposobów uruchomienia podprogramu.
Podprogram można wywołać (uruchomić) z innego podprogramu.
Aby wywołać podprogram z innego podprogramu należy w
procedurze wywołującej wpisać instrukcję zawierającą jego
nazwę.
Jeżeli podprogram przez nas napisany nie posiada parametrów
możemy wywołać go tak jak uruchamia się makro. Będąc w
arkuszu Excela naciskamy kombinacje klawiszy Alt + F8, w

arkuszu Excela naciskamy kombinacje klawiszy Alt + F8, w
nowo

otwartym

oknie

wybieramy

nazwę

odpowiedniej

procedury a następnie przycisk Uruchom.
Możemy odpowiednią procedurę (bez parametrów) przypisać do
Przycisku z paska narzędzi Formularze.

background image

Przykład funkcji:
Przykład funkcji jest również bardzo prosty. Nasza funkcja
oblicza pole kwadratu w którym długość boku kwadratu
określona jest przez parametr bok. Funkcja zwraca pewną
wartość. Aby funkcja mogła zwrócić wartość, wewnątrz funkcji
wartość ta musi zostać przypisana do nazwy tej funkcji.
W przykładzie poniżej do nazwy funkcji PoleKwadratu
przypisujemy wartość jako daje nam wynik mnożenia parametru
bok. Oczywiście wartość zwróconą przez funkcje możemy

przypisujemy wartość jako daje nam wynik mnożenia parametru
bok. Oczywiście wartość zwróconą przez funkcje możemy
wykorzystać w instrukcjach np. w procedurze wywołującej.

Function PoleKwadratu(bok)
PoleKwadratu = bok * bok
End Function

background image

Wywołanie funkcji

:

Funkcje można wywołać (uruchomić) z podprogramu. Aby
wywołać funkcje z podprogramu w procedurze wywołującej do
zmiennej przypisujemy nazwę funkcji, oczywiście w nawiasach
podajemy też potrzebne argumenty. Funkcja zwraca wartość
dlatego poprzez przypisanie w procedurze wywołującej nazwy
funkcji do zmiennej to do tej zmiennej przypisujemy wartość
zwracaną przez podaną funkcje.
Innym sposobem wywołania funkcji jest uruchomienie jej z
poziomu arkusza Excela, poprzez wstawienie funkcji do

poziomu arkusza Excela, poprzez wstawienie funkcji do
komórki arkusza. Funkcje przez nas napisaną (umieszczoną w
module standardowym) wstawiamy do arkusza tak samo jak
każdą funkcje wbudowaną. Załóżmy ze chcemy wstawić
przedstawioną wcześniej funkcję PoleKwadratu.

background image

Zaznaczamy dowolną komórkę Arkusza Excela np. H12.
Z Menu Wstaw wybieramy opcje Funkcja.
W nowo otwartym oknie z pola Kategoria funkcji: wybieramy
kategorie Użytkownika, następnie z pola Nazwa funkcji:
nazwę naszej funkcji PoleKwadratu i naciskamy OK (nazwy
pól w tym oknie mogą być trochę inne od podanych, zależy to
jaką wersję Excela posiadasz).
W następnym oknie wpisujemy argumenty funkcji, możesz tam

W następnym oknie wpisujemy argumenty funkcji, możesz tam
wpisać odpowiednie wartości lub nazwę komórki z której
wartości mają być pobierane np. jako argument wpisujemy B12,
naciskamy przycisk OK.
Jeżeli

jako

argument

podałeś

adres

komórki,

wpisz

przykładowe wartości do komórki B12 i przetestuj działanie
funkcji.

background image

Parametry i argumenty

Parametr pełni role zmiennej i jest rozpoznawany wewnątrz

procedury.

Parametry

procedury

podajemy

deklarując

procedurę. Umieszczamy je w nawiasach po nazwie procedury.
Jeżeli procedura posiada kilka parametrów oddzielamy je
przecinkiem.

Argument zaś jest to wartość jaka przekazujemy do

parametru danej procedury. Argumenty podajemy np. w

Argument zaś jest to wartość jaka przekazujemy do

parametru danej procedury. Argumenty podajemy np. w
instrukcji wywołującej procedurę. W instrukcji wywołującej
procedurę

po

nazwie

procedury

podajemy

odpowiednie

argumenty

umieszczamy

je

w

nawiasach

i

oddzielając

przecinkiem

background image

Sub ObliczPole()
Dim wartość, pole
wartość = InputBox("Podaj długość boku kwadratu do obliczenia pola
powierzchni")
If IsNumeric(wartość) = True Then
If wartość > 0 Then
pole = PoleKwadratu(wartość) ' wywołujemy funkcje PoleKwadratu.
MsgBox "Pole kwadratu wynosi " & pole

MsgBox "Pole kwadratu wynosi " & pole
Else
BłędnaWartość ' wywołujemy podprogram BłędnaWartość.
End If
Else
BłędnaWartość ' wywołujemy podprogram BłędnaWartość.
End If
End Sub

background image

Zakres procedury

:

Zakres określa w których częściach programu procedura jest
widoczna i z jakich części programu można ją wywołać. Temat
zakresu omówię w dalszej części kursu po omówieniu tematu
Modułu. Nadmienię tylko że standardową procedura VBA
posiada zakres publiczny (z wyjątkiem procedury zdarzenia).
Zakres publiczny określa to że procedurę można wywołać

Zakres publiczny określa to że procedurę można wywołać
(uruchomić) z dowolnej części programu.

background image

argument

- stała, zmienna lub wyrażenie przekazywane do

procedury,

komentarz

- dodany do kodu programu tekst, wyjaśniający

sposób działania kodu programu,

parametr

-

nazwa

zmiennej,

pod

którą

argument

przekazywany do pewnej procedury jest w tej procedurze
rozpoznawany. Zmienna otrzymuje przekazywany do procedury
argument, a jej zakres działania kończy się wraz z końcem
procedury.

właściwość

- opatrzony nazwą atrybut obiektu. Właściwości

właściwość

- opatrzony nazwą atrybut obiektu. Właściwości

definiują takie cechy obiektu, jak np. rozmiar, kolor i położenie
na ekranie, a także stan obiektu, na przykład to, czy jest on
aktywny czy nieaktywny. Właściwości możemy określać (zmieniać)
w oknie właściwości lub za pomącą języka Visual Basic.

zmienna

-

opatrzone

nazwą

miejsce

w

pamięci

do

przechowywania danych, które mogą ulegać modyfikacjom w
trakcie wykonywania programu. Każda zmienna zaopatrzona jest w
unikatową nazwę, która identyfikuje ją w obrębie danego zakresu.

background image

Zasięg zmiennych

Zasięgiem zmiennej określa się moduły i procedury, w których 
można ją zastosować.

Zasięg

Sposób deklarowania zmiennej w zasięgu

Pojedyncza procedura – zmienne lokalne

Zawarcie w procedurze instrukcji Dim lub Static

Pojedynczy moduł – zmienne 
obowiązujące na obszarze całego modułu

Umieszczenie instrukcji Dim lub Private przed 
pierwszą procedurą modułu

Wszystkie moduły – zmienne publiczne

Umieszczenie instrukcji Public przed pierwszą 
procedurą modułu

Zmienna lokalna – jest zmienną deklarowaną wewnątrz 
procedury. Zmienne lokalne mogą być używane wyłącznie w 
procedurze, w której zostały zadeklarowane. Po zakończeniu 
procedury zmienna lokalna przestaje istnieć i Excel zwalnia 
zajmowaną przez nią pamięć.

Jeśli zależy na utrzymaniu przez zmienną przechowanej 

wartości, należy zdeklarować ją przy użyciu słowa kluczowego 
Static. 

background image

Jeśli zmienna ma być dostępna dla wszystkich procedur
modułu,

wystarczy

deklarację

zmiennej

umieścić

przed

pierwszą procedurą modułu (na zewnątrz wszystkich procedur
lub funkcji).

Dim CurrentChart As Chart

Dim Fname As String

Private Sub UserForm_Initialize()

Set CurrentChart = 

ActiveSheet.ChartObjects(1).Chart
'   Zapisanie wykresu w formacie GIF

'   Zapisanie wykresu w formacie GIF

Fname = ThisWorkbook.Path & 

Application.PathSeparator & "temp.gif"

CurrentChart.Export FileName:=Fname, 

FilterName:="GIF"

ActiveSheet.ChartObjects(1).Delete

End Sub

Private Sub CloseButton_Click()

Unload Me

End Sub

background image

Aby udostępnić zmienną wszystkim procedurom zawartym we 
wszystkich modułach VBA projektu, należy na poziomie modułu 
zadeklarować zmienną przy użyciu słowa kluczowego Public 
zamiast instrukcji Dim.

Public CuurentRate As Long

Przesłanianie zmiennych

Przesłanianie zmiennych

background image

Charakterystyka dobrych programów

Oto kilka cech uważanych za takie, które charakteryzują 
dobry program.
• Poprawność (zgodność z wymogami użytkownika)
• Niezawodność (dobre dane wejściowe -> dobre wyniki)
• Przenośność (Łatwość instalacji na różnych komputerach)
• Łatwość konserwacji (Prosto napisany program łatwo 
przystosować do różnych warunków pracy)

przystosować do różnych warunków pracy)
• Czytelność (Prostota jest jedną z najważniejszych cech 
dobrych programów)
• Prawidłowe wykorzystanie zasobów (pamięci, dyski, itp), 
szybkość

User-oriented aplikacja

background image

Zadania realizowane z myślą o użytkowniku końcowym

Oto kilka ważnych kwestii związanych z projektowaniem, które 
uwidaczniają się, gdy stopień funkcjonalności aplikacji staje się 
coraz wyższy i nadchodzi moment pakowania i przesyłania 
produktu:   
• Testowanie – często zdarza się, że testowanie i usuwanie błędów 
z aplikacji zajmuje taką samą ilość czasu, jak jej tworzenie, 
• Zwiększanie odporności aplikacji:

• Blokowanie określonych komórek

• Blokowanie określonych komórek
• Ochrona całego skoroszytu
• Ukrywanie formuł określonych komórek
• Blokowanie obiektów arkusza
• Ukrywanie wierszy, kolumn, arkuszy i dokumentów
• Udostępnianie skoroszytu Excela w trybie tylko do 

odczytu

• Przypisanie hasła
• Użycie dodatku chronionego hasłem 

background image

Zadania realizowane z myślą o użytkowniku końcowym

• Testowanie – często zdarza się, że testowanie i usuwanie 
błędów z aplikacji zajmuje taką samą ilość czasu, jak jej 
tworzenie, 
• Tworzenie aplikacji intuicyjnej i estetycznie wyglądającej:

• Dążenie do zgodności (do okien dialogowych Excela)
• Dążenie do prostoty – błędem projektantów aplikacji 

jest umieszczanie na pojedynczym ekranie lub w oknie 
dialogowym zbyt wielu informacji

dialogowym zbyt wielu informacji

• Podział okien służących do wprowadzania danych
• Oszczędne używanie kolorów
• Kontrolowanie typografii i grafiki – formaty liczbowe, 

zgodność kroju i rozmiaru czcionek oraz ramek

Określanie jakości walorów estetycznych jest bardzo 
subiektywne. W razie wątpliwości należy zmierzać do prostoty 
i przejrzystości 

background image

Zadania realizowane z myślą o użytkowniku końcowym

• Tworzenie systemu pomocy przeznaczonego dla użytkownika –
dokumentacje pomocy: papierowe i elektroniczne 
• Dokumentowanie prac projektowych
• Przekazanie aplikacji użytkownikom
• Uaktualnianie aplikacji w razie konieczności

background image

METODY CAŁKOWANIA NUMERYCZNEGO

background image

Zadanie całkowania numerycznego
Na podstawie znajomości wartości y

i

funkcji f(x) w punktach x

i

(narzuconych

lub

wybieranych)

wyznaczyć

wartość

I

całki

oznaczonej (kwadratury) z funkcji w przedziale <a,b>:

background image

Zastosowania całek numerycznych
Wyznaczanie wielkości definiowanych całką
• Splot
• Wartość średnia, skuteczna
• Energia sygnału
• Pola powierzchni, objętości
• Prawdopodobieństwo na podstawie funkcji gęstości prawdopodobieństwa

Wartość przybliżona: odpowiadające im operacje sumacyjne na sygnałach
dyskretnych
W obliczeniach małej precyzji wystarczają proste metody prostokątów i
trapezów.

background image

Jakie dobrać wartości współczynników ogólnego wyrażenia:

ż

eby wartość A przybliżała:

• całkę w przedziale <x

-1

, x

1

> ,

• pochodną w punkcie x

0

,

• drugą pochodną w punkcie x

0

Załóżmy punkty równoodległe z odstępem h (x

-1

=x

0

-h, x

1

=x

0

+h).

background image

Metoda prostokątów

Metoda trapezów

Metoda parabol

(

)

=

=

+

=

n

i

i

n

i

i

h

,

x

f

h

A

1

1

1

5

0

( )

( )

( )



+

+

=

=

=

1

1

0

1

5

0

5

0

n

i

n

i

n

i

i

x

f

,

x

f

x

f

,

h

A

( )

(

)

( ) ( )



+

+

+

+

=

=

=

=

1

0

1

1

0

1

2

5

0

4

6

1

n

i

n

n

i

i

i

n

i

i

x

f

x

f

h

,

x

f

x

f

h

A

Metoda 3/8 Simpsona

( )

(

)

(

)

( ) ( )



+

+

+

+

+

+

=

=

=

=

=

1

0

1

1

1

0

3

2

3

1

0

1

2

3

3

8

1

n

i

n

n

i

i

n

i

i

i

n

i

i

x

f

x

f

h

x

f

h

x

f

x

f

h

A

background image

Zagadnienie  przybliżonego  obliczania  całki  oznaczonej 

I f

( )

  danej  funkcji  ciągłej  f x

( )   w  przedziale 

[ , ]

a b

 

=

b

a

x

x

f

f

I

d

)

(

)

(

                                            (24)

 

często występuje w praktyce obliczeniowej, gdyż wyznaczanie funkcji pierwotnej jest bardzo trudne lub 
wręcz niemożliwe, gdy funkcja 

f x

( )

 nie jest funkcją elementarną lub gdy funkcja 

f x

( )

 jest określona za 

pomocą tablicy. 
 
Zagadnienie przybliżonego obliczania całek można traktować jako aproksymację funkcjonału I innymi, 
prostszymi do obliczenia funkcjonałami. W rachunku numerycznym muszą mieć one postać pozwalającą 
na  obliczenie  ich  wartości  za  pomocą  skończonej  liczby  działań  arytmetycznych.  Wzory  numeryczne 
całkowania  funkcji  jednej  zmiennej  niezależnej  nazywane  są  kwadraturami,  funkcji  wielu  zmiennych 
niezależnych - kubaturami

niezależnych - kubaturami
 
Istnieją różne rodzaje kwadratur. Najważniejsze z nich to: 
 

 

- kwadratury interpolacyjne i aproksymacyjne, 

 

- kwadratury Newtona-Cotesa, 

 

- kwadratury Gaussa. 

 

background image

Mianem  kwadratur interpolacyjnych lub aproksymacyjnych określamy kwadratury otrzymane przez 
całkowanie wzorów interpolacyjnych lub aproksymacyjnych funkcji podcałkowej 

f x

( ).

 W szczególności 

mogą  to  być  wzory  oparte  na  całkowaniu  wielomianów  interpolacyjnych  Lagrange’a  niskiego  stopnia 
lub też równań funkcji sklejanych. 
 
Po scałkowaniu wielomianu interpolacyjnego Lagrange’a otrzymamy kwadraturę postaci 

 

,

)

(

)

(

0

=

=

n

i

i

i

x

f

A

f

Q

                                                                      (25)

 

w której 

x

i

 są ustalonymi węzłami, a współczynniki 

A

i

 są określone wzorem 

 

.

)

...,

,

1

,

0

(

)

(

n

i

x

x

A

b

n

=

ω

=

d

                                                       (26)

.

)

...,

,

1

,

0

(

)

(

)

(

)

(

n

i

x

x

x

x

x

A

b

a

i

n

i

n

i

=

ω′

ω

=

d

                                                       (26)

 

Dla wyznaczenia współczynników 

A

i

 zauważmy, że: 

 

 

1) współczynniki 

A

i

 przy danym wyborze węzłów nie zależą od wyboru postaci funkcji 

f x

( ),

 

 

2) wzór (25) jest dokładny dla wielomianu stopnia  n

 

background image

Podstawiając więc 

f x

x

k

n

k

( )

(

, , ..., )

=

=

 

0 1

 we wzorze (5.25) otrzymamy układ 

n

+

1

 równań liniowych: 

 

=

=

=

=

=

=

,

..

..........

..........

,

,

0

0

1

0

0

n

i

n

i

i

n

n

i

i

i

n

i

i

x

A

Q

x

A

Q

A

Q

                                                                   (27)

 

 

 

gdzie 

  

,

)

...,

,

1

,

0

(

1

1

1

n

k

k

a

b

x

x

Q

k

k

b

a

k

k

=

+

=

=

+

+

d

 

 

z którego można obliczyć współczynniki: 

A

A

A

n

0

1

,

, ...,

.

 

 

 

 Wyznacznik macierzy współczynników układu 

(27) jest wyznacznikiem Vandermonda. 

 

background image

Prostym przykładem kwadratury interpolacyjnej tego rodzaju może być kwadratura postaci 

 

.

6

5

2

1

6

1

 

2

1

0

1

0

+

+

=

f

A

f

A

f

A

x

d

                                                   (28)

 

Układ (27) dla  

n

=

2

  oraz: 

 

=

=

=

1

0

2

1

0

1

0

3

1

,

2

1

,

1

x

x

x

x

x

d

d

d

 

 

redukuje się do układu następującego: 

 

 

+  

A

A

A

0

1

2

1

+

=

,

 

+  

A

A

A

A

A

A

A

A

A

0

1

2

0

1

2

0

1

2

1

1

6

1

2

5

6

1

2

1

36

1

4

25

36

1

3

+

=

+

+

=

+

+

=

,

,

.

 

Stąd: 

 

A

A

A

0

1

2

3

8

1

4

3

8

=

=

=

,

,

 

 

i ostatecznie 

 

.

6

5

3

2

1

2

6

1

3

8

1

)

(

1

0

+

+

=

f

f

f

x

x

f

d

 

 

background image

Dokładność  obliczania  całki  (24)  za  pomocą  kwadratur  interpolacyjnych  lub  aproksymacyjnych  zależy 
od oszacowania dokładności przybliżenia funkcji 

f x

( )

 funkcją 

F x

( )

  

 

b

a

b

a

b

a

x

x

f

x

F

x

x

f

x

x

F

d

d

d

)

(

)

(

)

(

)

(

.

)

(

)

(

)

(

]

,

b

a

x

f

x

F

a

b

C

                    (29)

 

Wynika stąd, że w wielu przypadkach szczególnie przydatne mogą okazać się kwadratury interpolacyjne 
lub  aproksymacyjne  oparte  na  całkowaniu  równań  funkcji  sklejanych.  Przy  wykorzystaniu  równań 
wielomianowej funkcji sklejanej trzeciego stopnia otrzymujemy 

 

.

24

)

(

2

)

(

1

3

1

1

=

+

+

=

b

a

n

i

i

i

i

i

i

i

h

M

M

y

y

h

t

t

S

d

                                              (30)

  

W podobny sposób, po scałkowaniu równania hiperbolicznej funkcji sklejanej w połączeniu z układem 
równań, dostajemy 

 

.

sinh

cosh

1

2

)

(

2

)

(

1

2

1

1

=

σ

σ





σ

σ

σ

+

σ

+

+

=

σ

b

a

n

i

i

i

i

i

i

i

i

i

h

h

h

M

M

y

y

h

t

t

S

d

                                            (31)

 

background image

Kwadraturami  Newtona-Cotesa  nazywamy  kwadratury  postaci  (25),  otrzymane  przez  całkowanie 

wielomianów interpolacyjnych opartych na równoodległych węzłach 

 

.

,

...

,

,

1

0

b

h

n

a

x

h

a

x

a

x

n

=

+

=

+

=

=

                                                (32)

 

Współczynniki  kwadratur  Newtona-Cotesa  można  wyznaczyć  drogą  całkowania  wielomianu 

interpolacyjnego  Lagrange’a  lub  też,  stosowaną  w  rozdziale  poprzednim,  metodą  rozwijania  funkcji 

y

f x

=

( )

 w szeregi Taylora względem punktu 

x

0

.

 

 
Dla  zastosowania  drugiej  z  tych  możliwości  rozważymy  zależność  wynikającą  ze  wzorów  (24) 
i (25) 

 

+

=

n

x

n

h

n

R

y

A

x

x

f

,

)

(

)

(

d

                                                        (33)

=

+

=

x

i

i

i

h

n

R

y

A

x

x

f

0

0

,

)

(

)

(

d

                                                        (33)

gdzie 

)

h

n

R

 jest błędem przybliżenia. Po scałkowaniu rozwinięcia danej funkcji 

f x

( )

 w szereg Taylora 

 

f x

y

y

x

x

y

x

x

( )

(

)

!

(

)

...

=

+ ′

+

′′

+

0

0

0

0

0

2

2

 

 

 

background image

i podstawieniu rozwinięć 

 

y

y

ih y

ih

y

ih

y

i

=

+

′ +

′′ +

′′′ +

0

0

2

0

3

0

2

3

( )

( )

!

( )

!

...

 

 

 

 

uzyskujemy związek 

 

(

)

(

)

!

(

)

!

...

...

nh y

nh

y

nh

y

A y

A

y

h y

h

y

0

2

0

3

0

0

0

1

0

0

2

0

2

3

2

+

′ +

′′ +

=

+

+

′ +

′′ +



+

 

 

 

 

.

)

(

...

2

)

(

)

(

...

0

2

0

0

h

n

R

y

h

n

y

h

n

y

A

n

+

+

′′

+

+

+

+

                                                (34)

  

Z  porównania  mnożników  występujących  przy  kolejnych  potęgach  h,  z  lewej  i  prawej  strony  tego 
związku, otrzymujemy równania, z których wyznaczamy nieznane współczynniki 

A

i

n

i

 (

, , ..., ).

=

0 1

 

 
W przypadku 

n

=

1

 mamy 

 

h y

h

y

h

y

A y

A

y

h y

h

y

0

2

0

3

0

0

0

1

0

0

2

0

2

6

2

+

′ +

′′ +

=

+

+

′ +

′′ +



 

   

...

... ,

 

 

background image

skąd wynikają równania:  

 

A

A

h

0

1

+

=

,  

 

A h

h

1

2

2

=

 

 

i ostatecznie po porównaniu dokładnej wartości całki 

 

6

2

)

(

3

0

2

0

0

h

y

h

y

h

y

h

I

d

′′

+

+

=

 

 

z jej wartością przybliżoną 

z jej wartością przybliżoną 

 

4

2

)

(

3

0

2

0

0

h

y

h

y

h

y

h

I

p

′′

+

+

=

 

 

jest 

 

.

12

)

(

2

)

(

1

0

0

3

1

0

′′

+

=

x

x

y

h

y

y

h

x

x

f

d

                                                      (35)

 

Jest  to  znany  wzór  trapezów,  odznaczający  się  nadspodziewanie  małym  błędem 

.

)

(

3

h

O

  Widzimy  więc, 

ż

e  operacja  całkowania  przybliżonego  jest  znacznie  dokładniejsza  od  operacji  różniczkowania 

numerycznego. 

 

background image

Zależność (34) w przypadku 

n

=

2

 przyjmuje postać 

 

=

+

+

′′

+

′′

+

+

...

120

)

2

(

24

)

2

(

6

)

2

(

2

)

2

(

)

2

(

0

5

0

4

0

3

0

2

0

IV

y

h

y

h

y

h

y

h

y

h

 

=

+

+

′ +

′′ +

′′′ +

+



+

A y

A

y

h y

h

y

h

y

h

y

IV

0

0

1

0

0

2

0

3

0

4

0

2

6

24

...

 

                                       

+

+

′ +

′′ +

′′′ +

+

A

y

h y

h

y

h

y

h

y

IV

2

0

0

2

0

3

0

4

0

2

2

2

2

6

2

24

(

)

(

)

(

)

(

)

... .

      

 

Stąd otrzymujemy układ równań: 

 

A

A

A

h

0

1

2

2

+

+

=

,

 

A h

A h

h

1

2

2

2

2

+

=

,

 

 

A

h

A h

h

1

2

2

2

3

2

2

4

3

+

=

,

 

 

którego rozwiązaniem są liczby: 

 

.

3

4

,

3

1

2

0

h

A

h

A

A

=

=

=

 

 

background image

Podstawiając je do (33) uzyskujemy znany wzór parabol, zwany też wzorem Simpsona 

 

(

)

.

90

4

3

)

(

0

5

2

1

0

2

0

IV

x

x

y

h

y

y

y

h

x

x

f

+

+

=

d

                                          (36) 

 

Zwraca  uwagę  bardzo  wysoka  dokładność  tego  wzoru,  wynikająca  z  tożsamościowego  znikania 

współczynników przy pochodnej 

′′′

y

0

 po podstawieniu wyznaczonych wartości  A

0

,  

A

1

 i 

A

2

.

 

 

 

Ze  względu  na  trudności  związane  ze  stosowaniem  wielomianów  interpolacyjnych  wysokich 

stopni,  w  praktyce  raczej  nie  wykorzystuje  się  kwadratur  Newtona-Cotesa  wysokich  rzędów.  Na  ogół 
bardziej  celowe  jest  podzielenie  przedziału  całkowania  na  większą  liczbę  podprzedziałów  i  stosowanie 
dla nich kwadratur Newtona-Cotesa niskiego rzędu. Skonstruowane w ten sposób kwadratury, określone 
na całym przedziale 

[ , ]

a b

, są nazywane złożonymi kwadraturami Newtona-Cotesa

na całym przedziale 

[ , ]

a b

, są nazywane złożonymi kwadraturami Newtona-Cotesa

 
 

Złożony wzór trapezów otrzymujemy po podzieleniu przedziału całkowania 

[ , ]

a b

 na m równych 

części 

h

b a m

= −

(

)

 i zsumowaniu całek (35) dla każdego podprzedziału 

 

Q f

h

y

y

h

y

y

y

y

i

m

i

i

m

m

( )

(

)

...

.

=

+

=

+

+ +

+



=

2

2

2

1

1

0

1

1

                                   (37)

 

background image

Na podstawie oszacowania (35) błąd złożonego wzoru trapezów wynosi 

 

R

h

f

x

b

a

h f

i

i

m

1

3

1

1

2

12

12

= −

′′

= − −

′′

=

(

)

(

)

( ),

 

ξ

                                           (38)

 

gdzie 

 
 
 

′′

=

′′

=

f

m

f

x

a b

i

i

m

( )

(

),

,

ξ

ξ

1

1

1

    

[

].

 

 

Analogicznie wyprowadza się złożony wzór parabol przy założeniu, że m jest parzyste. Po zsumowaniu 

Analogicznie wyprowadza się złożony wzór parabol przy założeniu, że m jest parzyste. Po zsumowaniu 
całek (5.36) dla kolejnych 

2

 podprzedziałów o długości 2 h mamy 

 

[

]

,

2

4

)

(

3

)

4

(

3

)

(

2

1

0

2

/

1

2

1

2

2

2

σ

σ

+

+

+

=

+

+

=

=

m

m

k

k

k

k

y

y

h

y

y

y

h

f

Q

                                 (39) 

 

gdzie: 

 

.

...

,

...

2

4

2

2

1

3

1

1

+

+

+

=

+

+

+

=

σ

σ

m

m

y

y

y

y

y

y

 

 

background image

Błąd złożonego wzoru parabol jest następujący: 

 

,

)

(

180

)

(

)

(

90

2

/

1

4

2

2

5

2

=

ξ

=

=

m

k

IV

k

IV

f

h

a

b

x

f

h

R

                                        (40)

 

gdzie 

 

[

]

.

,

,

)

(

2

)

(

2

/

1

2

2

b

a

x

f

m

f

m

k

k

IV

IV

=

ξ

=

ξ

=

  

 

 

Rozważane dotąd kwadratury interpolacyjne lub aproksymacyjne, jak i kwadra-tury Newtona-Cotesa są 

Rozważane dotąd kwadratury interpolacyjne lub aproksymacyjne, jak i kwadra-tury Newtona-Cotesa są 
kwadraturami  z  ustalonymi  węzłami.  Kwadratury  Gaussa  są  natomiast  kwadraturami  postaci  (25), 

w  których  dobierane  są  nie  tylko  współ-czynniki 

A

i

n

i

 (

, , ..., ),

=

0 1

  ale  także  węzły 

x i

n

i

 (

, , ..., )

=

0 1

  -

w taki sposób, aby kwadratura była dokładna dla możliwie najwyższego stopnia wielomianu. 
 
Przy  wyznaczaniu  parametrów  kwadratur  Gaussa  wygodnie  jest  w  obliczanej  całce  (24)  dokonać 
liniowej zamiany zmiennej całkowania 
 

x

b

a

b

a

t

= + + −

2

2

,

                                                               (41)

 

pozwalającej na transformację dowolnego przedziału 

[ , ]

a b

 na przedział znormalizowany 

[

, ]

1 1

 

 

 

 

background image

Rozważymy teraz zadanie: jak wybrać węzły: 

t

t

t

n

0

1

,

, ...,

 

 

 

 oraz współczynniki: 

A

A

A

n

0

1

,

, ...,

,

 

 

 

 żeby kwadratura 

postaci 

 

=

=

1

1

0

)

(

)

(

n

i

i

i

t

f

A

t

t

f

d

                                                            (43)

 

była  dokładna  dla  wielomianu  stopnia 

2

1

n

+

,  którego  liczba  współczynników  jest  równa  liczbie 

nieznanych parametrów 

A

i

 i  

t

i

.

 Oznacza to, że równość (5.43) musi być spełniona dla wielomianów: 

 

f t

t t

t

n

( )

, ,

, ...,

,

=

+

1

2

2

1

   

 

 

           

 

gdyż dla 

  

+

=

=

1

2

0

)

(

n

k

k

k

t

C

t

f

 

 

mamy 

 

∑ ∑

∑ ∫

∑ ∑

=

+

=

=

+

=

+

=

=

=

=

=

=

n

i

n

k

n

i

i

i

k

i

k

i

n

k

n

k

n

i

k

i

i

k

k

k

t

f

A

t

C

A

t

A

C

t

t

C

t

t

f

0

1

2

0

0

1

1

1

2

0

1

1

1

2

0

0

.

)

(

)

(

d

d

 

 

background image

Stąd przy wykorzystaniu związków: 

 

 

ego,

nieparzyst

dla

0

,

parzystego

dla

1

2

1

1

+

=

k

k

k

t

k

t

d

 

otrzymujemy układ równań: 
 

=

=

=

=

2

....

..........

..........

,

0

,

2

2

0

0

n

n

i

n

i

i

n

i

i

t

A

A

                                                                  (44)

=

+

=

+

=

=

.

0

,

1

2

2

1

2

0

2

0

n

i

n

i

i

n

i

n

i

i

t

A

n

t

A

                                                                  (44)

 

Bezpośrednie  rozwiązywanie  nieliniowego  układu  równań  (44)  napotyka  na  duże  trudności 
matematyczne. Dlatego też najczęściej funkcję 

f t

( )

 przyjmuje się w postaci 

 

f t

t P

t

k

n

k

n

( )

( )

, , ..., ),

=

=

+

1

0 1

(

                                                          (45)

 

gdzie 

P

t

n

+

1

( )

 są wielomianami Legendre’a, zdefiniowanymi wzorami: 

 

background image

 

=

=

=

=

=

=

=

.

...)

,

3

,

2

(

)

(

1

)

(

1

2

        

)

1

(

!

2

1

)

(

..

..........

..........

..........

,

)

1

3

(

2

1

,

)

(

,

1

)

(

2

1

2

2

2

1

0

n

x

P

n

n

x

P

x

n

n

x

x

n

x

P

x

P

x

x

P

x

P

n

n

n

n

n

n

n

d

d

                                            (46)

 

Wielomian Legendre’a 

P x

n

( )

 jest funkcją parzystą dla n = m i nieparzystą dla n = = +1, dla 

 1 

ma n różnych pierwiastków rzeczywistych, leżących w przedziale otwartym (

1, 1). 

ma n różnych pierwiastków rzeczywistych, leżących w przedziale otwartym (

1, 1). 

 
Wielomiany  Legendre’a 

P

t

n

+

1

( )

  są  ortogonalne  do  wszystkich  wielomianów  stopnia  mniejszego 

od  n+1. Zatem mamy 

 

1

dla

0

)

(

1

1

1

+

<

=

+

n

k

t

t

P

t

n

k

d

 

i następnie po podstawieniu (45) do (43) stwierdzamy, że suma 

 

A t P

t

k

n

i i

k

n

i

i

n

+

=

=

1

0

0 1

( )

(

, , ..., )

    

                                                     (47)

 

 

background image

znika dla dowolnych 

A

i

,

 jeśli 

 

P

t

i

n

n

i

+

=

=

1

0

0 1

( )

(

, , ..., ).

    

                                                       (48)

 

Kwadratura  (43)  będzie  więc  dokładna  dla  wielomianów  stopnia 

2

1

n

+

,

  gdy  jej  węzłami  będą  zera 

wielomianu Legendre’a 

P

t

n

+

1

( ).

 Po obliczeniu wartości węzłów 

t

i

 współczynniki 

A

i

 

(

, , ..., )

i

n

=

0 1

 można 

łatwo wyznaczyć z układu równań liniowych (44). 
 
W najprostszym przypadku dla = 0  jest 

t

0

0

=

 - co oznacza,  że kwadratura  Gaussa z  jednym  węzłem 

jest równoważna wzorowi prostokątów 

 

.

)

0

(

2

=

)

(

1

1

f

t

t

f

d

 

1

 

W przypadku 

n

=

1

 obliczając najpierw pierwiastki wielomianu Legendre’a drugiego stopnia 

 

P t

t

2

2

1

2

3

1

( )

(

)

=

 

 

otrzymujemy: 

 

t

t

0

1

1

3

1

3

= −

=

,

 

 

background image

i następnie z układu równań:  

 

A

A

0

1

2

+

=

,  

 

+

=

1

3

1

3

0

0

1

A

A

,

 

 

dostajemy 

 

A

A

0

1

1

=

=

.  

 

Interpretacja geometryczna kwadratury Gaussa z dwoma węzłami 

  

(

) ( )

,

3

1

3

1

)

(

1

1

f

f

t

t

f

+

=

d

                                                      (49)

 

dokładnej dla wielomianów stopnia trzeciego, jest przedstawiona na rysunku 3. Funkcja podcałkowa 

f x

( )

jest interpolowana funkcją liniową 

,

β

+

α

=

t

y

 przechodzącą przez punkty 

f t

( )

0

 i 

f t

( ).

1

 

 

 

Rys. 3 

 

background image

Po wyznaczeniu pierwiastków wielomianu Legendre’a trzeciego stopnia 

 

P t

t

t

3

3

1

2

5

3

( )

(

)

=

 

 

można, w podobny sposób, otrzymać kwadraturę Gaussa z trzema węzłami 

 





+

+



=

5

3

5

)

0

(

8

5

3

5

9

1

)

(

1

1

f

f

f

t

t

f

d

                                            (50)

oraz kwadratury z większą liczbą węzłów. 
 
Błąd  popełniany  przy  obliczaniu  całki  (5.24)  za  pomocą  kwadratur  Gaussa  dla  dowolnej  wartości 

Błąd  popełniany  przy  obliczaniu  całki  (5.24)  za  pomocą  kwadratur  Gaussa  dla  dowolnej  wartości 
n

 wynosi 

 

[

]

[

]

R

n

b

a

n

n

f

a b

n

n

n

=

+

+

+

+

+

(

)! (

)

(

) (

)!

( ),

[ , ].

(

)

1

2

3

2

3

4

2

3

3

2

2

ξ

ξ

   

                                          (51)

 

Tak  samo  jak  w  przypadku  kwadratur  Newtona-Cotesa  można  budować  złożone  kwadratury  Gaussa
dzieląc przedział całkowania na mniejsze podprzedziały i stosując w każdym z nich kwadraturę Gaussa 
ustalonego stopnia 

 

.

2

2

2

)

(

1

0

1

1

∑∑

= =

+

+

=

b

a

m

j

n

i

i

j

j

j

j

i

t

x

x

x

x

f

A

a

b

x

x

f

d

 

 

background image

Dziękuję

Materiały przygotowane dla studentów Wydziału Mechanicznego – Politechniki Opolskiej

przez: dr inż. Jacka Wydrycha