Informatyka - Podstawy Programowania w Języku C++
prow. Sławomir Czarnecki
Zadania na laboratorium nr. 5
1. Zdefiniuj następującą funkcję f
sin ( 2
x ) 3 cos( x)
f ( x) =
,
10 x
3
e
którą wywołaj następnie dla pewnego x ∈ ℝ wyświetlając wynik na ekranie.
2. Zdefiniuj dwie funkcje (ich deklaracje są podane poniżej): void XY (double x,double y); (zmienne x i y przekazywane przez wartość) void xy (double& x,double& y); (zmienne x i y przekazywane przez referencję) których celem powinna być zamiana wartości dwóch zmiennych: x i y.
Przeprowadź test polegający na wyświetleniu na ekranie wartości przekazywanych do tych funkcji zmiennych przed i po ich wywołaniu.
3. Zdefiniuj własną wersję double SIN (double x, double ε) funkcji sinus (zwracającą poprawne pod względem numerycznym wyniki dla „małych” x ) w oparciu o przybliżoną wartość nieskończonej sumy następującego szeregu funkcyjnego: 3
5
7
x
x
x
(− ) i 2 i 1
1 x +
∞
a x = x −
+
−
+
=
x
a =
i =
∑
.
i (
)
...
sin ( ),
i
(
0,1,...)
+
=
i
i
3!
5!
7!
2
1 !
0
(
)
n
Dla ustalonej, małej liczby rzeczywistej ε > 0 obliczaj sumy cząstkowe s =
a
∑
n
i
i=0
∞
( n = 0,1,2,...) szeregu nieskończonego a = a + a + a + ...
∑
dopóty dopóki a > ε ,
i
0
1
2
i
i=0
i=0,1,2,... .Ostatnią obliczoną sumę cząstkową traktujemy jako przybliżoną wartość sumy szeregu. Zdefiniowany powyżej, najprostszy warunek przerwania obliczeń sformułowany został w oparciu o (nie najlepszy pod względem numerycznym) warunek konieczny lim a = 0 zbieżności szeregów. Skonfrontuj otrzymany wynik z wartością zwracaną przez i
i→∞
funkcję biblioteczną sin(...).
Wskazówka. Mamy następują (łatwą do udowodnienia indukcyjnie) zależność rekurencyjną na kolejne wyrazy szeregu funkcyjnego:
a
a
i 1
−
2
a = x , a = −
x
i ≥ 1 , k = 2, 4, 6,... lub
i 1
−
2
a = −
x
i ≥
i
(
)
1
0
i
(
)
k ( k + )
1
2 i (2 i + )
1
double W1 (double* a, int n, double x); double W2 (double* a, int n, double x); które dla ustalonej liczby naturalnej n i ustalonej liczby rzeczywistej x, obliczają wartość wielomianu stopnia n:
n
W ( x)
2
= a + a x + a x + ...
n
+ a x ,
0
1
2
n
gdzie a ( i = 0,1,..., n są składowymi wektora a definiującymi współczynniki tego
i
)
n 1
+
wielomianu. Wartość
n
W ( x) oblicz na dwa sposoby:
4a) bezpośrednio, na podstawie podanego wyżej wzoru, 4b) korzystając ze schematu Hornera (opartym o rozkład wielomianu na czynniki): n
W ( x) = ((( a x + a
x + a
x + ... + a x + a
n
n 1
− )
n−2 )
1 )
0
5. Zdefiniuj funkcję
void matrix (double** A, double** B, double** C, int m, int k, int n); która oblicza iloczyn C
= A
B
∈ M
macierzy A
∈ M
i B
∈ M
.
m × n
m × k
k × n
m × n
m × k
m × k
k × n
k × n
Przetestuj funkcję wywołując ją dla losowo wygenerowanych macierzy A i B
.
m × k
k × n
Wyświetl na ekranie składowe wszystkich trzech macierzy.