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

Slides:



Advertisements
Podobne prezentacje
1 Dzisiejszy wykład Wzorce funkcji Wzorce klas. 2 Wzorce Często pojawia się konieczność pisania podobnych funkcji lub klas operujących na argumentach.
Advertisements

1 Dzisiejszy wykład Wzorce funkcji Wzorce klas Tablica asocjacyjna Składowe statyczne.
Informatyka jako dziedzina wiedzy
Imperatywne modele obliczeń Copyright, 2000 © Jerzy R. Nawrocki Wprowadzenie do.
Języki programowania C++
Język asemblera Copyright, 2000 © Jerzy R. Nawrocki Wprowadzenie do informatyki.
argumenty wiersza poleceń: getopt
Metody numeryczne Wykład no 1.
formatowanie kodu źródłowego
Funkcje Modularyzacja : program główny , funkcje Funkcje :
Zakres i zasięg deklaracji Zakres : obszar programu, w którym identyfikator może być użyty zakres globalny : cały program zakres lokalny : definicja pojedynczej.
Przetwarzanie tekstów i AWK Copyright, 2000 © Jerzy R. Nawrocki Wprowadzenie do.
Rekurencja Copyright, 2000 © Jerzy R. Nawrocki Wprowadzenie do informatyki Wykład.
Imperatywne modele obliczeń Copyright, 2001 © Jerzy R. Nawrocki Wprowadzenie do.
Rekursja Teoretyczne podstawy informatyki Wykład 5
Procesy współbieżne Copyright, 2004 © Jerzy R. Nawrocki Teoretyczne podstawy informatyki.
Obliczalność i złożoność obliczeniowa
Budowa komputera Wstęp do informatyki Wykład 15
Testy akceptacyjne Analiza systemów informatycznych Wykład 9
Rekurencja Copyright, 2001 © Jerzy R. Nawrocki Wprowadzenie do informatyki Wykład.
Imperatywne modele obliczeń Copyright, 2003 © Jerzy R. Nawrocki Teoretyczne podstawy.
Programowanie imperatywne i język C Copyright, 2004 © Jerzy R. Nawrocki Wprowadzenie.
Bazy danych Wprowadzenie do informatyki Wykład 9
Asembler i koncepcja von Neumanna
Informatyka jako dziedzina wiedzy Copyright, 2004 © Jerzy R. Nawrocki Wprowadzenie.
Programowanie imperatywne i granice obliczalności Copyright, 2004 © Jerzy R. Nawrocki
Rekursja Copyright, 2004 © Jerzy R. Nawrocki Teoretyczne podstawy informatyki.
Programowanie imperatywne i język C
Procesy współbieżne Copyright, 2005 © Jerzy R. Nawrocki Wstęp do informatyki.
Informatyka jako dziedzina wiedzy Copyright, 2005 © Jerzy R. Nawrocki Wstęp.
Asembler i koncepcja von Neumanna Copyright, 2005 © Jerzy R. Nawrocki Wstęp do informatyki Wykład 5
Od algebry Boole’a do komputera
Modularyzacja i struktury danych w C Copyright, 2005 © Jerzy R. Nawrocki Wprowadzenie.
Modularyzacja i struktury danych w C Copyright, 2005 © Jerzy R. Nawrocki Wprowadzenie.
Programowanie imperatywne i język C Copyright, 2005 © Jerzy R. Nawrocki Wstęp.
Przetwarzanie tekstów i AWK Copyright, 2005 © Jerzy R. Nawrocki Wprowadzenie do informatyki Wykład 7
Programowanie imperatywne i język C Copyright, 2004 © Jerzy R. Nawrocki Wprowadzenie.
Język C – Część II Copyright, 2004 © Jerzy R. Nawrocki Wprowadzenie do informatyki.
Wyrażenia regularne i język AWK
Komunikacja poprzez Internet
Dokumenty i prezentacje Copyright, 2004 © Jerzy R. Nawrocki Wprowadzenie do.
1 Dygresja: cztery płyty główne…. 2 Dygresja: osobliwości C /* cos o nieistniejacym typie Boolean */ /* oraz o operatorze przecinkowym */ #include int.
Podstawy programowania PP – WYK3 Wojciech Pieprzyca.
Podstawy programowania PP – LAB4 Wojciech Pieprzyca.
Programowanie obiektowe W2
nowe operatory & . (kropka) * operator rzutowy -> , (przecinek)
Programowanie imperatywne i język C Copyright, 2006 © Jerzy R. Nawrocki Wstęp do.
Jerzy F. Kotowski1 Informatyka I Wykład 9 TABLICE PREPROCESOR OPERATORY c.d. (nie tylko binarne)
Podstawy programowania
Podstawy programowania w języku C i C++
Pierwsze programy.
Przekazywanie argumentów
Jerzy F. Kotowski1 Informatyka I Wykład 8 STRUKTURA PROGRAMU n Funkcje n Klasy zmiennych n Projekt.
Jerzy F. Kotowski1 Informatyka I Wykład 15 PIERWSZE KROKI.
STEROWANIE Ale nie tylko
Liczby całkowite dodatnie BCN
Informatyka jako dziedzina wiedzy
Translatory Copyright, 2006 © Jerzy R. Nawrocki Wprowadzenie do informatyki Wykład 11.
Gramatyki i translatory
PWSZ Gniezno // codefly 2009 Łukasz Tomczak
Procesy współbieżne Copyright, 2005 © Jerzy R. Nawrocki Wstęp do informatyki.
Dokumenty elektroniczne Copyright, 2005 © Jerzy R. Nawrocki Wprowadzenie do.
Języki formalne Copyright, 2006 © Jerzy R. Nawrocki Wprowadzenie do informatyki Wykład.
Wprowadzenie do teoretycznych podstaw informatyki Copyright, 2004 © Jerzy R. Nawrocki
Od algebry Boole’a do komputera Copyright, 2007 © Jerzy R. Nawrocki Wprowadzenie.
Funkcje - rekurencja Zajęcia 8. Funkcje - definicja Ogólna postać funkcji w C++: typZwracany nazwaFunkcji(listaParametrówWejściowychFunkcji) { ciało funkcji.
Programowanie imperatywne i język C Copyright, 2007 © Jerzy R. Nawrocki Wstęp do.
Wstęp do programowania Wykład 2 Dane, instrukcje, program.
1 Opisy funkcji Adres strony WWW : html (należy odszukać hyperlink Function Index) (
Inżynieria oprogramowania
Zapis prezentacji:

Metody numeryczne Copyright, 2004 © Jerzy R. Nawrocki Wprowadzenie do informatyki Wykład 8

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

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, 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 = /4, dlatego s=-1, c=-2, m=3/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 / 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

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

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

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

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

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 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

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 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

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 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

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 a n-1 x 1 + a n

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 a n-1 x 1 + a n

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 a n-1 x 1 + a n p(x,n) = p(x, n-1)x + a n

J.Nawrocki, Metody numeryczne Obliczanie wielomianu – schemat Hornera p(x,0) = a 0 p(x,n) = a 0 x n + a 1 x n 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

J.Nawrocki, Metody numeryczne Obliczanie wielomianu – schemat Hornera p(x,0) = a 0 p(x,n) = a 0 x n + a 1 x n 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; }

J.Nawrocki, Metody numeryczne Obliczanie wielomianu – schemat Hornera p(x,n) = a 0 x n + a 1 x n 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]i

J.Nawrocki, Metody numeryczne Obliczanie wielomianu – schemat Hornera p(x,n) = a 0 x n + a 1 x n 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]i x=5; n=1; a= IP= ret=

J.Nawrocki, Metody numeryczne Obliczanie wielomianu – schemat Hornera p(x,n) = a 0 x n + a 1 x n 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]i x=5; n=1; a= IP= ret= x=5; n=0; a= IP= ret=

J.Nawrocki, Metody numeryczne Obliczanie wielomianu – schemat Hornera p(x,n) = a 0 x n + a 1 x n 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]i x=5; n=1; a= IP= ret= 2

J.Nawrocki, Metody numeryczne Obliczanie wielomianu – schemat Hornera p(x,n) = a 0 x n + a 1 x n 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]i

J.Nawrocki, Metody numeryczne Obliczanie wielomianu – schemat Hornera p(x,n) = a 0 x n + a 1 x n 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]i

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 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; }

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!