Blogun sonunda kaynak gösterilen kitabın “sayfa 44 Example 2.4” kısmından incelenerek çözümlenmiştir. Belirtilen kısımdan C yerine Fortran koduna ulaşabilir ve aynı bölümden konu anlatımına ulaşabilirsiniz.
Örnek 2.4:
fonksiyonu için n= 2, 4, 8, 16 olacak şekilde polinomu hesaplayın,
Pn(x) fonksiyonunun derecesi, n+1 eşit aralıklarla enterpole edilen f(x)’den küçüktür
Ardından maksimum interpolasyon hatasını
[-5, 5] aralığında hesaplayın
C Kod:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | #include <stdio.h> #include <math.h> #ifndef MAX #define MAX(a, b) (((a) > (b)) ? (a) : (b)) #endif float _F(float x) { x = 1 / (1 + (x * x)); return x; } int main() { int i, j, k, n = 2, NP_1; float _D[17], _maxhata, h, _ynum, _X[17], y; printf("N MAXIMUM ERROR \n", n, _maxhata); while (n <= 16) { NP_1 = n + 1; h = 10 / (float)n; for (i = 1; i <= NP_1; i++) { _X[i] = (float)(i - 1) * h - 5; _D[i] = _F(_X[i]); } for (k = 1; k <= n; k++) { for (i = 1; i <= NP_1 - k; i++) { _D[i] = (_D[i + 1] - _D[i]) / (_X[i + k] - _X[i]); } } for (j = 1; j <= 101; j++) { y = (float)(j - 1) / 10 - 5; _ynum = _D[1]; for (k = 2; k <= NP_1; k++) { _ynum = _D[k] + (y - _X[k]) * _ynum; } _maxhata = MAX(fabs(_F(y) - _ynum), _maxhata); } printf("%d -> %.16e \n", n, _maxhata); _maxhata = 0, n += 2; } return 0; } |
Konsol Çıktısı:
Yararlanılan Kaynak:
ELEMENTARY NUMERICAL ANALYSIS
An Algorithmic Approach
Third Edition
S. D. Conte (Purdue University )
Carl de Boor (Universiry of Wisconsin—Madison)