w06 b, Inżynierskie, Semestr III, Metody obliczeniowe, Wyklady

Nie obrażaj więc mojej inteligencji poprzez czynione na pokaz zaniżanie własnej.
>
restart:
Przykład 1.
>
a1:=evalf(Pi)*10^5;
a1
314159.2654
:=
>
a2:=evalf(Pi)*10^(-5);
a2
0.00003141592654
:=
>
a3:=a1+a2:
>
is(a1=a3);
true
Przykład 2.
>
y:=1/1*(10^x*(1+(x)*10^(-x))-10^x);
y
:=
10
x
(
1
x
10
()
+

x
)

10
x
>
eval(y,x=10.5);
0.
>
simplify(eval(y,x=21/2));
21
2
>
>
restart:
Błąd przybliżenia liczby π
>
xs:=Pi;
xs
π
:=
>
xp:=3.1415; # 3.1416
xp
3.1415
:=
>
Delta[x]:=xs-xp;

x
:=
π 3.1415

>
epsilon[x]:=Delta[x]/xs;
π 3.1415
π
>
solve(abs(epsilon[x])<1/2*10^(-d),d);
(
ε
x
:=

RealRange
−∞ (
,
Open 4.229257627
)
)
>
evalf(Pi);
3.141592654
>
Błąd odejmowania bliskich sobie liczb
>
Digits:=12;
Digits
12
:=
Pierwsza liczba
>
x1s:=sqrt(2);
x1s
:=
2
>
x1p:=evalf[10](x1s);
x1p
1.414213562
>
Delta[x1]:=evalf(x1s-x1p);
:=

x1
0.37 10
-9
>
epsilon[x1]:=evalf((x1s-x1p)/x1s);
:=
:=
ε
x1
0.261629509038 10
-9
Druga liczba
>
x2s:=sqrt(201/100);
x2p:=evalf[10](x2s);
Delta[x2]:=evalf(x2s-x2p);
epsilon[x2]:=evalf((x2s-x2p)/x2s);
x2s
:=
201
10
x2p
1.417744688
:=
:=

x2
-0.12 10
-9
ε
x2
:=
-0.846414739035 10
-10
Błąd względny różnicy
ε
=

r
=

x
1


x
2
r
r
x

x
1
2
>
epsilon[r]:=evalf((Delta[x1]-Delta[x2])/(x1s-x2s));
:=
ε
r
-0.138765953975 10
-6
Natomiast błąd względny sumy
ε
=

s
=

x
1
+

x
2
s
s
x
+
x
1
2
>
epsilon[s]:=evalf((Delta[x1]+Delta[x2])/(x1s+x2s));
:=
ε
s
0.882781375672 10
-10
>
restart:
Propagacja błędów
>
f:=(x1,x2)->4/3*x1*x2^3;
f
:=
(
x1 x2
,
)

3
x1 x2
3

2
 

f
∆≈
f
 

x

 
x
xx
=
i
i
=
1
i
4
 >
Delta[f]:=add((D[i](f)(x1p,x2p))*Delta[x||i],i=1..2);

f
:=
3
x2p
3

x1
+
4
x1p x2p
2

x2
1
()

2

f
ε≈

x
>
epsilon[f]:=expand(Delta[f]/f(x1p,x2p));
f
f
x

x
xx
i
i
=
i
ε
f
:=

x1
x1p
+
3 ∆
x2
x2p
>
x1p:=3.14;x2p:=5.00;
x1p
3.14
:=
:=
x2p
5.00
>
f(x1p,x2p);
523.3333333
>
Delta[x1]:=0.0016; Delta[x2]:=0.001;
:=

x1
0.0016

x2
:=
0.001
>
'Delta[f]'=Delta[f];

f
=
0.5806666667
>
'epsilon[f]'=epsilon[f];
ε
f
=
0.001109554140
>
Błędy obcięcia
>
restart:
>
f:=exp(-x);
f
e
()
:=

x
Rozwinięcie funkcji wokół x = 0
>
sz:=taylor(f,x); # taylor(f,x,6);
sz
− + − + − +
:=
1
x
2
x
2
6
x
3
24
x
4
120
x
5
1
O
x
6
()
>
w:=convert(sz,polynom);
w
− + − + −
:=
1
x
2
x
2
6
x
3
24
x
4
1
120
x
5
>
plot([f,w],x=0..2,0..1);
4
=
1
1
1
1
1
1
1
 Wyznaczenie wartości funkcji dla x = 0.1
>
x0:=0.1;
x0
0.1
:=
>
fp:=eval(w,x=x0);
fp
0.9048374167
:=
>
fd:=eval(f,x=x0);
fd
0.9048374180
:=
>
Delta['f']:=fd-fp;

f
:=
0.13 10
-8
ε
f
0.1436722194 10
-8
Wyznaczenie wartości funkcji w punkcie x = 2.1
>
x0:=2.1;
x0
2.1
:=
>
fp:=eval(w,x=x0);
fp
0.0314957500
:=
>
fd:=eval(f,x=x0);
fd
0.1224564283
:=
>
Delta['f']:=fd-fp;

f
:=
0.0909606783
>
epsilon['f']:=Delta['f']/fd;
:=
ε
f
0.7428003541
Błąd rzędu 74% !!!
>
Zwiększenie liczby wyrazów rozwinięcia (10)
>
sz:=taylor(f,x,10);
sz
− + − + − + − +
1
x
2
x
2
6
x
3
24
x
4
120
x
5
1
720
x
6
1
5040
x
7
40320
x
8
1

362880
x
9
1
+
O
x
10
>
w:=convert(sz,polynom);
:=
w
− + − + − + − +
1
x
2
x
2
6
x
3
24
x
4
1
120
x
5
720
x
6
5040
x
7
1
40320
x
8

362880
x
9
>
epsilon['f']:=Delta['f']/fd;
:=
1
1
1
1
:=
( )
1
1
1
1
1
1
>
plot([f,w],x=0..2,0..1);
>
fp:=eval(w,x=x0);
fp
0.1220713254
:=
>
fd:=eval(f,x=x0);
fd
0.1224564283
:=
>
Delta['f']:=fd-fp;

f
:=
0.0003851029
>
epsilon['f']:=Delta['f']/fd;
:=
ε
f
0.003144815714
Błąd rzędu 0.3%
>
Zmiana punktu rozwinięcia (tylko 6 wyrazów)
>
sz:=taylor(f,x=2);
sz
e
()
-2

e
()
-2
(
x
2
)
+
2
e
()
-2
(
x
2
)
2

6
e
()
-2
(
x
2
)
3
+
24
e
()
1
-2
(
x
2
)
4

120
e
()
1
-2
+
>
w:=convert(sz,polynom);
w
:=
x
2
)
5
O(
(
x
2

)
6
)
e
()
-2

e
()
-2
(
x
2

)
+
2
e
()
-2
(
x
2

)
2

6
e
()
-2
(
x
2

)
3
+
24
e
()
1
-2
(
x
2

)
4

120
e
()
1
-2
(
x
2

)
5
>
plot([f,w],x=0..2,0..1);
1
1
:=




(

1
1
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • alter.htw.pl
  • Powered by WordPress, © Nie obrażaj więc mojej inteligencji poprzez czynione na pokaz zaniżanie własnej.