w6a


Adam Szustalewicz Matematyka obliczeniowa 2002/2003 w.6 18.11.02
Wykład 6: Kilka przykładów obliczeń, algorytmy
1. Skutki błedów arytmetyki komputerowej, grafika
1. Zadanie 1 z wykładu 4
-14
Wykres funkcji y=(x-1)8
x 10
2
function y=oszcz(x)
1.5
y=(x-1); y=y.^2;
y=y.^2; y=y.^2;
1
0.5
function y=horner(x)
y=(((((((x-8).*x+28)...
0
.*x-56).*x+70)...
y
.*x-56).*x+28)...
-0.5
.*x-8).*x+1;
-1
function y=potegowa(x)
-1.5
y=x.^8-8*x.^7+28 ...
*x.^6-56*x.^5 ...
-2
Rozwiniecie potegowe
+70*x.^4-56*x...
schemat Hornera
.^3+28*x.^2-8*x+1; oszczedna
-2.5
0.99 0.992 0.994 0.996 0.998 1 1.002 1.004 1.006 1.008 1.01
x
clc, clear, close all, x=linspace(0.99, 1.01, 201);
y1=oszcz(x); y2=horner(x); y3=potegowa(x);
figure(1)
hold on,
plot(x,y3, m ), plot(x,y2, k ), plot(x,y1, r , linewidth ,2)
axis([0.99 1.01 -3e-14 2.5e-14]), set(gcf, color , w );
title( Wykres funkcji y=(x-1)^8 )
xlabel( x , fontsize ,20, horizontalalignment ,...
 left , verticalalignment , middle , fontangle , italic )
ylabel( y , fontsize ,20, rotation ,0, horizontalalignment , left ,...
 fontangle , italic )
legend( Rozwiniecie potegowe , schemat Hornera , oszczedna )
albo:
plot(x,potegowa(x), b ), plot(x,horner(x), r ), plot(x,oszcz(x), k )
albo:
plot(x,eval( potegowa(x) ), b ), plot(x,eval( horner(x) ), r ), plot(x,eval( oszcz(x) ), k )
albo:
plot(x,feval( potegowa ,x), b ), plot(x,feval( horner ,x), r ), plot(x,feval( oszcz ,x), k )
2. Sprawdzimy prawdziwość zależności:
f(x + h) - f(x)
lim - f (x) = 0
h0 h
1
Adam Szustalewicz Matematyka obliczeniowa 2002/2003 w.6 18.11.02
0 5
10 10
f(x) = cos(x) f(x) = ex
0
10
-5
10
-5
10
-10 -10
10 10
0 20 40 60 0 20 40 60
0 5
10 10
f(x) = 2x
-5
10
0
10
-10
10
-5
10
-15
10
f(x) = ln(x)
-20 -10
10 10
0 20 40 60 0 20 40 60
- log2(h) - log2(h)
clc, clear, close all
wykl=[1:60]; h=pow2(-wykl); x=1;
figure(1), hold on, set(gcf, color , w );
ilrozn = (feval( cos ,x+h)-feval( cos ,x))./h;
blad = abs(-feval( sin ,x) - ilrozn);
subplot(2,2,1);
semilogy(wykl, blad, linewidth ,2);
legend( f(x) = cos(x) ); ylabel( log(|blad(h)|) );
subplot(2,2,2);
ilrozn = eval( (exp(x+h)-exp(x))./h ); blad = abs(exp(x)-ilrozn);
semilogy(wykl, blad); legend( f(x) = e^x );
subplot(2,2,3);
semilogy(wykl, eval( abs( 1/x - (log(x+h)-log(x))./h ) ));
legend( f(x) = ln(x) ); xlabel( - log_2(h) ); ylabel( log(|blad(h)|) );
subplot(2,2,4);
blad = eval( abs( feval(  pow2  ,x) * feval(  log  ,2)- (pow2(x+h) - pow2(x))./h) );
semilogy(wykl, blad); legend( f(x) = 2^x ); xlabel( - log_2(h) );
3. Zadania na układanie algorytmów
1. Zaprogramować gre w odgadywanie wybranej liczby:
Wybieramy sobie liczbe naturalna z przedziału [1, 1000]. Komputer (tj. program) proponuje liczbe z
tego przedziału. Odpowiadamy znakiem:
= jeżeli jest to liczba wybrana i gra sie kończy,
ż jeżeli liczba wybrana jest wieksza od proponowanej,
Ą jeżeli liczba wybrana jest mniejsza od proponowanej.
Po odgadnieciu liczby program podaje ilość prób.
2
log(|blad(h)|)
log(|blad(h)|)
Adam Szustalewicz Matematyka obliczeniowa 2002/2003 w.6 18.11.02
2. Zaprogramować obliczanie n! dla dużych n. Obliczona wartość należy  ładnie wydrukować na ekranie
monitora lub w pliku w postaci skróconej, tzn. bez końcowych zer:
liczba " 10wykładnik .
3. Dla zadanej liczby naturalnej (dużej) wyznaczyć krotność wystepowania poszczególnych cyfr w roz-
winieciu liczby.
4. Zaprogramować funkcje, która przedstawia liczbe naturalna, podana w układzie dziesietnym w postaci
liczby zapisanej w układzie szesnastkowym.
Można opracować funkcje bardziej skomplikowana;
danymi sa m, a, n:
m  aktualna podstawa układu liczbowego,
a  liczba naturalna, w tym układzie zapisana,
n  podstawa nowego układu liczbowego,
wynik: b  liczba zapisana w nowym układzie.
Jeszcze ogólniej: liczba a może zawierać cześć ułamkowa ...
* * *
3


Wyszukiwarka

Podobne podstrony:
ulog w6a
W6a
W6a

więcej podobnych podstron