Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Metody numeryczne Copyright, 2004 © Jerzy R. Nawrocki Wprowadzenie do informatyki.

Коpie: 1
Metody numeryczne Copyright, 2005 © Jerzy R. Nawrocki Wprowadzenie do informatyki.

Podobne prezentacje


Prezentacja na temat: "Metody numeryczne Copyright, 2004 © Jerzy R. Nawrocki Wprowadzenie do informatyki."— Zapis prezentacji:

1 Metody numeryczne Copyright, 2004 © Jerzy R. Nawrocki Jerzy.Nawrocki@put.poznan.pl http://www.cs.put.poznan.pl/jnawrocki/wsb-wdi/ Wprowadzenie do informatyki Wykład 8

2 J.Nawrocki, Metody numeryczne Plan wykładu Reprezentacja liczb rzeczywistych Obliczanie e x Obliczanie wartości wielomianu

3 J.Nawrocki, Metody numeryczne Reprezentacja liczb rzeczywistych x 0:x = s 2 c m s= +1 lub –1 (znak liczby) c= cecha (liczba całkowita) m= mantysa: liczba rzeczywista [1/2, 1) 0,5 = 2 0 1/2, dlatego s=+1, c=0, m=1/2 1 = 2 1 1/2, dlatego s=+1, c=1, m=1/2 0,25 = 2 -1 1/2, dlatego s=+1, c=-1, m=1/2 0,75 = 2 0 3/4, dlatego s=+1, c=0, m=3/4 1,5 = 2 1 3/4, dlatego s=+1, c=1, m=3/4 -3 = -2 -2 3/4, dlatego s=-1, c=-2, m=3/4

4 J.Nawrocki, Metody numeryczne Reprezentacja liczb rzeczywistych x 0:x = s 2 c m s= +1 lub –1 (znak liczby) c= cecha (liczba całkowita) m= mantysa: liczba rzeczywista [1/2, 1) Ciąg cyfr binarnych c 1 c 2 c 3..c t reprezentuje mantysę m = c 1 /2 + c 2 /4 + c 3 /8 +.. + c t /2 t m=4/8 na 4 bitach: 1000 m=5/8 na 4 bitach: 1010 m=6/8 na 4 bitach: 1100 m=7/8 na 4 bitach: 1110

5 J.Nawrocki, Metody numeryczne Obliczanie e x e x = 1 + x/1! + x 2 /2! + x 3 /3! + x 4 /4! +... e(1) = 2,71.. e(0) = 1 Wyraz = Licznik Mianownik x 1! x2x2 2! x3x3 3! 1 1

6 J.Nawrocki, Metody numeryczne Obliczanie e x e x = 1 + x/1! + x 2 /2! + x 3 /3! + x 4 /4! +... e(1) = 2,71.. e(0) = 1 Wyraz = Licznik Mianownik x 1! x2x2 2! x3x3 3! 1 1 *x *1*2*3

7 J.Nawrocki, Metody numeryczne Obliczanie e x e x = 1 + x/1! + x 2 /2! + x 3 /3! + x 4 /4! +... e(1) = 2,71.. e(0) = 1 void main(){ float x; // Argument e(x) scanf("%g", &x); printf("e(%g)= %g\n", x, e(x)); return; } e(0)= 1 0

8 J.Nawrocki, Metody numeryczne Obliczanie e x e x = 1 + x/1! + x 2 /2! + x 3 /3! + x 4 /4! +... e(1) = 2,71.. e(0) = 1 float e(float x){ float suma=0; licznik = mianownik = 1.0; for (...){ suma += licznik / mianownik; licznik *= x; mianownik *= i; } return suma; } x 1! x2x2 2! x3x3 3! 1 1 *x *1*2*3

9 J.Nawrocki, Metody numeryczne Obliczanie wielomianu – schemat Hornera p(x,0) = a 0 p(x,1) = a 0 x + a 1 p(x,2) = a 0 x 2 + a 1 x + a 2 p(x,n) = a 0 x n + a 1 x n-1 +.. + a n-1 x 1 + a n p(x,3) = a 0 x 3 + a 1 x 2 + a 2 x + a 3 p(x,4) = a 0 x 4 + a 1 x 3 + a 2 x 2 + a 3 x + a 4

10 J.Nawrocki, Metody numeryczne Obliczanie wielomianu – schemat Hornera p(x,0) = a 0 p(x,1) = a 0 x + a 1 = p(x, 0)x + a 1 p(x,2) = a 0 x 2 + a 1 x + a 2 p(x,n) = a 0 x n + a 1 x n-1 +.. + a n-1 x 1 + a n p(x,3) = a 0 x 3 + a 1 x 2 + a 2 x + a 3 p(x,4) = a 0 x 4 + a 1 x 3 + a 2 x 2 + a 3 x + a 4

11 J.Nawrocki, Metody numeryczne Obliczanie wielomianu – schemat Hornera p(x,0) = a 0 p(x,1) = a 0 x + a 1 = p(x, 0)x + a 1 p(x,2) = a 0 x 2 + a 1 x + a 2 = (a 0 x 1 + a 1 )x + a 2 = p(x,1)x+a 2 p(x,n) = a 0 x n + a 1 x n-1 +.. + a n-1 x 1 + a n p(x,3) = a 0 x 3 + a 1 x 2 + a 2 x + a 3 p(x,4) = a 0 x 4 + a 1 x 3 + a 2 x 2 + a 3 x + a 4

12 J.Nawrocki, Metody numeryczne Obliczanie wielomianu – schemat Hornera p(x,0) = a 0 p(x,1) = a 0 x + a 1 = p(x, 0)x + a 1 p(x,2) = a 0 x 2 + a 1 x + a 2 = (a 0 x 1 + a 1 )x + a 2 = p(x,1)x+a 2 p(x,3) = a 0 x 3 + a 1 x 2 + a 2 x + a 3 = = (a 0 x 2 + a 1 x 1 + a 2 )x + a 3 = p(x,2)x + a 3 p(x,4) = a 0 x 4 + a 1 x 3 + a 2 x 2 + a 3 x + a 4 p(x,n) = a 0 x n + a 1 x n-1 +.. + a n-1 x 1 + a n

13 J.Nawrocki, Metody numeryczne Obliczanie wielomianu – schemat Hornera p(x,0) = a 0 p(x,1) = a 0 x + a 1 = p(x, 0)x + a 1 p(x,2) = a 0 x 2 + a 1 x + a 2 = (a 0 x 1 + a 1 )x + a 2 = p(x,1)x+a 2 p(x,3) = a 0 x 3 + a 1 x 2 + a 2 x + a 3 = = (a 0 x 2 + a 1 x 1 + a 2 )x + a 3 = p(x,2)x + a 3 p(x,4) = a 0 x 4 + a 1 x 3 + a 2 x 2 + a 3 x + a 4 = = (a 0 x 3 + a 1 x 2 + a 2 x 1 + a 3 )x + a 4 = p(x,3)x + a 4 p(x,n) = a 0 x n + a 1 x n-1 +.. + a n-1 x 1 + a n

14 J.Nawrocki, Metody numeryczne Obliczanie wielomianu – schemat Hornera p(x,0) = a 0 p(x,1) = a 0 x + a 1 = p(x, 0)x + a 1 p(x,2) = a 0 x 2 + a 1 x + a 2 = (a 0 x 1 + a 1 )x + a 2 = p(x,1)x+a 2 p(x,3) = a 0 x 3 + a 1 x 2 + a 2 x + a 3 = = (a 0 x 2 + a 1 x 1 + a 2 )x + a 3 = p(x,2)x + a 3 p(x,4) = a 0 x 4 + a 1 x 3 + a 2 x 2 + a 3 x + a 4 = = (a 0 x 3 + a 1 x 2 + a 2 x 1 + a 3 )x + a 4 = p(x,3)x + a 4 p(x,n) = a 0 x n + a 1 x n-1 +.. + a n-1 x 1 + a n p(x,n) = p(x, n-1)x + a n

15 J.Nawrocki, Metody numeryczne Obliczanie wielomianu – schemat Hornera p(x,0) = a 0 p(x,n) = a 0 x n + a 1 x n-1 +.. + a n-1 x 1 + a n p(x,n) = p(x, n-1)x + a n float p(float x, int n, float a[ ])... #define MaxN 50 void main(){ float x; // Zmienna x int n; // Stopien wielomianu float a[MaxN+1]; // Wspolczynniki wielomianu... printf("%g\n", p(x, n, a)); return; } Nagłówek p Wywołanie p

16 J.Nawrocki, Metody numeryczne Obliczanie wielomianu – schemat Hornera p(x,0) = a 0 p(x,n) = a 0 x n + a 1 x n-1 +.. + a n-1 x 1 + a n p(x,n) = p(x, n-1)x + a n float p(float x, int n, float a[ ]) { if (n==0){ return a[0]; }else{ return p(x, n-1, a)*x + a[n]; } #define MaxN 50 void main(){... printf("%g\n", p(x, n, a)); return; }

17 J.Nawrocki, Metody numeryczne Obliczanie wielomianu – schemat Hornera p(x,n) = a 0 x n + a 1 x n-1 +.. + a n-1 x 1 + a n float p(float x, int n, float a[ ]) { if (n==0){ return a[0]; }else{ return p(x, n-1, a)*x + a[n]; } #define MaxN 50 void main(){... printf("%g\n", p(x, n, a)); return; } 2x 2 + 3x + 4; x=5 x=5; n=2; a= IP= ret= a[i]i234 012

18 J.Nawrocki, Metody numeryczne Obliczanie wielomianu – schemat Hornera p(x,n) = a 0 x n + a 1 x n-1 +.. + a n-1 x 1 + a n float p(float x, int n, float a[ ]) { if (n==0){ return a[0]; }else{ return p(x, n-1, a)*x + a[n]; } #define MaxN 50 void main(){... printf("%g\n", p(x, n, a)); return; } 2x 2 + 3x + 4; x=5 x=5; n=2; a= IP= ret= a[i]i234 012 x=5; n=1; a= IP= ret=

19 J.Nawrocki, Metody numeryczne Obliczanie wielomianu – schemat Hornera p(x,n) = a 0 x n + a 1 x n-1 +.. + a n-1 x 1 + a n float p(float x, int n, float a[ ]) { if (n==0){ return a[0]; }else{ return p(x, n-1, a)*x + a[n]; } #define MaxN 50 void main(){... printf("%g\n", p(x, n, a)); return; } 2x 2 + 3x + 4; x=5 x=5; n=2; a= IP= ret= a[i]i234 012 x=5; n=1; a= IP= ret= x=5; n=0; a= IP= ret=

20 J.Nawrocki, Metody numeryczne Obliczanie wielomianu – schemat Hornera p(x,n) = a 0 x n + a 1 x n-1 +.. + a n-1 x 1 + a n float p(float x, int n, float a[ ]) { if (n==0){ return a[0]; }else{ return p(x, n-1, a)*x + a[n]; } #define MaxN 50 void main(){... printf("%g\n", p(x, n, a)); return; } 2x 2 + 3x + 4; x=5 x=5; n=2; a= IP= ret= a[i]i234 012 x=5; n=1; a= IP= ret= 2

21 J.Nawrocki, Metody numeryczne Obliczanie wielomianu – schemat Hornera p(x,n) = a 0 x n + a 1 x n-1 +.. + a n-1 x 1 + a n float p(float x, int n, float a[ ]) { if (n==0){ return a[0]; }else{ return p(x, n-1, a)*x + a[n]; } #define MaxN 50 void main(){... printf("%g\n", p(x, n, a)); return; } 2x 2 + 3x + 4; x=5 x=5; n=2; a= IP= ret= a[i]i234 012 13

22 J.Nawrocki, Metody numeryczne Obliczanie wielomianu – schemat Hornera p(x,n) = a 0 x n + a 1 x n-1 +.. + a n-1 x 1 + a n float p(float x, int n, float a[ ]) { if (n==0){ return a[0]; }else{ return p(x, n-1, a)*x + a[n]; } #define MaxN 50 void main(){... printf("%g\n", p(x, n, a)); return; } 2x 2 + 3x + 4; x=5 69 a[i]i234 012

23 J.Nawrocki, Metody numeryczne Obliczanie wielomianu – schemat Hornera 2x 2 + 3x + 4; x=5 p(x,n)=a 0 x n + a 1 x n-1 +.. void main(){ float x; // Zmienna x int n; // Stopien wielomianu float a[MaxN+1]; // Wspolczynniki wielomianu int i; // Zmienna robocza scanf("%g %d", &x, &n); for(i=0; i<=n; i++){ scanf("%g", &a[i]); } printf("p(x)= %gx^%d", a[0], n); for(i=1; i<=n; i++){ printf(" + %gx^%d", a[i], n-i); } printf("\n"); printf("p(%g)= %g\n", x, p(x, n, a)); return; }

24 J.Nawrocki, Metody numeryczne Podsumowanie Liczby rzeczywiste są reprezentowane za pomocą cechy i mantysy. Funkcje matematyczne takie jak e x, sin(x), stała itp. oblicza się za pomocą operacji mnożenia, dodawania, odejmowania i dzielenia. Bardzo wygodną techniką programowania jest rekursja, czyli wywoływanie funkcji przez nią samą (patrze wielomian). Wreszcie!


Pobierz ppt "Metody numeryczne Copyright, 2004 © Jerzy R. Nawrocki Wprowadzenie do informatyki."

Podobne prezentacje


Reklamy Google