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