Pogreške u numeričkom računanju¶
Podsjetimo se da je Taylorov red za funkciju $\sin x$ $$\sin x=\sum_{n=0}^\infty (-1)^n\frac{x^{2n+1}}{(2n+1)!}$$
In [2]:
import math
import numpy as np
def func_sin(x):
sin_approx = 0
t=x
n=1
while sin_approx+t!= sin_approx:
sin_approx=sin_approx+t
t=-(x**2)/((n+1)*(n+2))*t
n=n+2
print("n=", n)
return sin_approx
print("sin(pi/2)=",func_sin(math.pi/2))
print("sin(11pi/2)=",func_sin(11*math.pi/2))
print("sin(21pi/2)=", func_sin(21*math.pi/2))
print("sin(31pi/2)=",func_sin(31*math.pi/2))
n= 23 sin(pi/2)= 1.0000000000000002 n= 75 sin(11pi/2)= -1.0000000002128728 n= 121 sin(21pi/2)= 0.9998667640418495 n= 157 sin(31pi/2)= -5822.01852702401
In [9]:
from IPython.lib.display import YouTubeVideo
vid = YouTubeVideo("xJvJSjAJuyc ")
display(vid)
Rješavanje kvadratne jednadžbe¶
In [4]:
a=1.0
c=1.0
b=-(1.e+8+1.e-8)
coeff= [a, b, c]
print("Roots=",np.roots(coeff))
x1=(-b+np.sqrt(b**2-3*a*c))/(2*a)
print("x1=",x1)
x2=(-b-np.sqrt(b**2-3*a*c))/(2*a)
print("x2=",x2)
Roots= [1.e+08 1.e-08] x1= 100000000.0 x2= 7.450580596923828e-09
Računanje $\frac{\ln(1+x)}{x}$¶
Znamo $\frac{\ln(1+x)}{x}\approx 1$ za $x\approx 0$
In [5]:
np.log(1+3e-16)/(3e-16)
Out[5]:
0.7401486830834376
In [7]:
np.log(1+3e-16)/((1+3.e-16)-1)
Out[7]:
0.9999999999999999
Još malo o pogreškama i stabilnosti algoritama¶
In [10]:
from IPython.lib.display import YouTubeVideo
vid = YouTubeVideo("cKUZA2aWnHU ")
display(vid)
Rješavanje linearnih sustava¶
In [11]:
from IPython.lib.display import YouTubeVideo
vid = YouTubeVideo("KLbaQoV-yOU")
display(vid)
In [50]:
A = np.array([[17, 5], [1.7, 0.5]])
B = np.array([22,2.2])
X = np.linalg.solve(A,B)
print("X=",X)
X= [-1.05882353 8. ]