#!/usr/bin/env python # coding: utf-8 #
Greške kod računanja vrijednosti funkcije

# # Neka je zadana funkcija $n$ promjenljivih $f(x_1,\ldots,x_n)$ definisana i diferencijabilna po svim argumenima u nekoj oblasti. Pretpostavimo da nisu poznate tačne vrijednosti promjenljivih $x_1,\ldots,x_n,$ nego umjesto njih znamo približne vrijednosti $x^{\star}_1,\ldots,x^{\star}_n,$ takođe smatrajmo da znamo i vrijednost greške približnog broja $x_i-x^{\star}_i$ i apsolutne greške $\triangle x^{\star}=\left|x_i-x^{\star}_i\right|,\:i=1,\ldots,n.$ # Potrebno je izračunati vrijednost apsolutne greške funkcije $f$ u tački $x^{\star}=(x^{\star}_1,\ldots,x^{\star}_n),$ gdje je $x^{\star}_i,$ iz relacije $x_i=x_i^{\star}\pm\triangle x_i^{\star},\,i=1,\ldots,n.$ # # Na osnovu Lagrangeove teoreme o srednjoj vrijednosti vrijedi # $$ # \triangle f^{\star}=\left|f(x_1,\ldots,x_n)-f(x^{\star}_1,\ldots,x^{\star}_n)\right| # =\left|\sum_{i=1}^{n}{\frac{\partial f\left(\tilde{x}_1,\ldots,\tilde{x}_n \right)}{\partial x_i}}(x_i-x^{\star}_i)\right|, # $$ # gdje je $\tilde{x}_i$ između $x_i$ i $x^{\star}_i.$ Dalje vrijedi # $$ # \left|\sum_{i=1}^{n}{\frac{\partial f\left(\tilde{x}_1,\ldots,\tilde{x}_n \right)}{\partial x_i}}(x_i-x^{\star}_i) \right| # \leqslant \sum_{i=1}^{n}{\left|\frac{\partial f\left(\tilde{x}_1,\ldots,\tilde{x}_n \right)}{\partial x_i}\right|}\left|x_i-x^{\star}_i\right| # =\sum_{i=1}^{n}{\left|\frac{\partial f\left(\tilde{x}_1,\ldots,\tilde{x}_n \right)}{\partial x_i}\right|}\triangle x^{\star}_i # $$ # Pošto vrijednosti $\tilde{x}_i$ nisu poznate, umjesto $\frac{\partial f\left(\tilde{x}_1,\ldots,\tilde{x}_n \right)}{\partial x_i},$ koristićemo # $\frac{\partial f\left(x^{\star}_1,\ldots,x^{\star}_n \right)}{\partial x_i},$ pa dobijamo formulu za apsolutnu grešku vrijednosti funkcije # $$ # \triangle f^{\star}\approx\sum_{i=1}^{n}{\left|\frac{\partial f\left(x^{\star}_1,\ldots,x^{\star}_n \right)}{\partial x_i}\right|}\triangle x^{\star}_i,(\star) # $$ # a relativnu grešku približne vrijednosti funkcije je sada # $$ # \delta f^{\star}\approx\frac{\triangle f^{\star}}{\left| f^{\star}\right|},(\star\star) # $$ # gdje je $f^{\star}=f(x^{\star}_1,\ldots,x^{\star}_n).$ #
# Napomena. # Umesto relacija datih u $(\star)$ i $(\star \star)$, mogu se koristiti i sljedeće relacije # $$ # \triangle f^{\star}=\sum_{i=1}^{n}{\left|\frac{\partial f\left(x^{\star}_1,\ldots,x^{\star}_n \right)}{\partial x_i}\right|}\triangle x^{\star}_i, # $$ # i # $$ # \delta f^{\star}=\frac{\triangle f^{\star}}{|f^{\star}|} # $$ # Ovakve greške se nazivaju linearna ocjena apsolutne i relativne greške vrijednosti funkcije, vidjeti više u npr. Bahvalov $[Bah77]$. #
#
# Zadatak. Izračunati apsolutnu i relativnu grešku pri računanju zapremine lopte $V=\frac{4}{3}r^3\pi,$ ako je poluprečnik lopte $r=10.3\pm 0.02$ cm, a $\pi^{\star}=3.14.$ #
#
# Rješenje. Vrijedi # \begin{align*} # & r^{\star}=10.3,\, \triangle r^{\star}=0.02,\, \pi^{\star}=3.14,\, \triangle \pi^{\star}\approx 0.00159265\\ # & \frac{\partial V(r^{\star},\pi^{\star})}{\partial r}=4(r^{\star})^2\pi^{\star}\\ # & \frac{\partial V(r^{\star},\pi^{\star})}{\partial \pi}=\frac{4}{3}(r^{\star})^3\\ # & \triangle V^{\star}\approx \left|\frac{\partial V(r^{\star},\pi^{\star})}{\partial r} \right|\triangle r^{\star}+ # \left|\frac{\partial V(r^{\star},\pi^{\star})}{\partial \pi} \right|\triangle \pi^{\star} # \end{align*} # In[6]: import numpy as np import sympy #as sym r, pi=sympy.symbols('r, pi') deltar=0.02 deltapi=0.00159265 izvodr=sympy.diff(zapremina,r) izvodpi=sympy.diff(zapremina,pi) zapremina=(4/3)*r**3*pi deltav=abs(izvodr)*deltar+abs(izvodpi)*deltapi deltaV=deltav.subs([(r,10.3),(pi,3.14)]) zap=zapremina.subs([(r,10.3),(pi,3.14)]) print('Apsolutna greška je %f,'%deltaV, ' približna vrijednost zapremine je %f.'%zap) # Vrijedi $$V=\frac{4}{3}\left( r^3\right)^{\star}(\pi)^{\star}\pm \Delta V^{\star}=4574.88\pm 28.97.$$ # Kako je $\Delta V^{\star}\approx 28.97=0.2897\cdot 10^{2}\leqslant \frac{1}{2}\cdot 10^{3-2+1},$ sigurne su samo dvije cifre pa možemo zaokružiti $V^{\star}\approx 4600.$ I na kraju relativna greška je # $$\delta V=\frac{\Delta V^{\star}}{|V^{\star}|}\approx 0.006332\approx 0.6\%.$$ #
# Zadatak. Po kosinusnoj teoremi, ako su za neki trougao poznate dužine stranica $a$ i $b,$ te ugao izmedju njih $\gamma,$ dužina treće stranice $c$ računa se koristeći formulu $$ c^2=a^2+b^2-2ab\cos \gamma.$$ Ako je za trougao $\Delta ABC$ poznato $a=10.2\pm 0.05$ cm, $b=7.5\pm 0.05$ cm i $\gamma=31.3^{0}\pm0.05^{0},$ odrediti apsolutnu i relativnu grešku pri računanju stranice $c.$ #
# # # Rješenje. Vrijednosti uglova iz stepena u radijane pretvaraju se po formuli $\psi_{rad}=\frac{\psi_{step}\cdot\pi}{180}.$ Dužinu stranice $c$ računamo po formuli # # $$c=\sqrt{a^2+b^2-2ab\cos \gamma}.$$ # # # Vrijedi # \begin{align*} # &a^{\star}= 10.2,\, \triangle a^{\star}=0.05,\, b^{\star}=7.5, \, \triangle b^{\star}=0.05,\, \gamma^{\star}=\frac{31.3\cdot \pi}{180}, \, \triangle\gamma^{\star}=\frac{0.05\cdot\pi}{180} \\ # &\frac{\partial c(a^{\star},b^{\star}, \gamma^{\star})}{\partial a} # =\frac{a^{\star}-b^{\star}\cos\gamma^{\star}}{\sqrt{(a^{\star})^2+(b^{\star})^2-2a^{\star}b^{\star}\cos\gamma^{\star}}}\\ # &\frac{\partial c(a^{\star},b^{\star}, \gamma^{\star})}{\partial b} # =\frac{b^{\star}-a^{\star}\cos\gamma^{\star}}{\sqrt{(a^{\star})^2+(b^{\star})^2-2a^{\star}b^{\star}\cos\gamma^{\star}}}\\ # &\frac{\partial c(a^{\star},b^{\star}, \gamma^{\star})}{\partial \gamma} # =\frac{a^{\star}b^{\star}\sin\gamma^{\star}}{\sqrt{(a^{\star})^2+(b^{\star})^2-2a^{\star}b^{\star}\cos\gamma^{\star}}}\\ # &\triangle c^{\star}=\left|\frac{\partial c(a^{\star},b^{\star}, \gamma^{\star})}{\partial a} \right|\triangle a^{\star} # +\left|\frac{\partial c(a^{\star},b^{\star}, \gamma^{\star})}{\partial b} \right|\triangle b^{\star} # +\left|\frac{\partial c(a^{\star},b^{\star}, \gamma^{\star})}{\partial \gamma} \right|\triangle \gamma^{\star} # \end{align*} # In[15]: import numpy as np from sympy import * #drugi način učitavanja biblioteke a,b,gama=symbols('a,b,gama') stranicaC=sqrt(a**2+b**2-2*a*b*cos(gama)) deltaA=.05;deltaB=.05; deltaGama=(.05*np.pi)/180; izvodA=diff(stranicaC,a) izvodB=diff(stranicaC,b) izvodGama=diff(stranicaC,gama) deltac=abs(izvodA)*0.05+abs(izvodB)*deltaB+abs(izvodGama)*deltaGama deltaC=deltac.subs([(a,10.2),(b,7.5),(gama,(31.3*np.pi/180))]) c=stranicaC.subs([(a,10.2),(b,7.5),(gama,(31.3*np.pi/180))]) print('Apsolutna greška je %f,'%deltaC, ' približna dužina stranice c je %f.'%c) # Vrijedi $\Delta c^{\star}\approx0.052428=0.052428\cdot 10^{0}\leqslant 0.5\leqslant 0.5\cdot 10^{0} # =0.5\cdot 10^{0-1+1},$ dakle sigurna je samo prva cifra, pa je možemo zaokružiti $c^{\star}\approx 5.$ Relativna greška je $$\delta c^{\star}\approx \frac{\Delta c^{\star}}{|c^{\star}|}\approx 0.0096433\approx1\%.$$ #
Inverzni (obratni) problem greške

# # # # Inverzni problem greške je određivanje granice dopustivih vrijednosti grešaka argumenata za koje greška funkcije ne prelazi unaprijed zadanu vrijednost. U slučaju funkcija jedne realne promjenljive, ako je ta funkcija diferencijabilna vrijedi # \begin{equation} # f(x)=f(x^{\star})+f'(\tilde{x})(x-x^{\star}), # \label{uvod24} # \end{equation} # gdje je $\tilde{x}$ između $x$ i $x^{\star}.$ Sada za $f'(\tilde{x})\neq 0,$ vrijedi # \begin{equation} # x-x^{\star}=\frac{f(x)- f(x^{\star})}{f'\left( \tilde{x}\right) }. # \label{uvod25} # \end{equation} # Kako ne znamo $\tilde{x},$ to je # \begin{equation} # \triangle x^{\star}\approx\frac{\triangle f^{\star}}{\left|f'\left(x^{\star}\right) \right|},\:f'\left(x^{\star}\right) \neq 0. # \label{uvod26} # \end{equation} # Ako je $f$ funkcija od $n$ argumenata, tj. $f(x_1,\ldots,x_n),$ onda se zadavanjem greške funkcije zadaje samo jedna veza između $n$ nepoznatih $\triangle x^{\star}_1,\ldots,\triangle x^{\star}_n.$ Ako je poznata apsolutna greška vrijednosti funkcije $\triangle f^{\star}$, dodatni uslovi koje apsolutne greške argumenata treba da zadovoljavaju obično se definišu na jedan od sljedećih načina # #
(1) Princip jednakih uticaja (doprinosa, efekata)
# Neka vrijedi # $$\left| \frac{\partial f(x^{\star}_1,\ldots,x^{\star}_n)}{\partial x_1}\right|\triangle x^{\star}_1= # \cdots=\left|\frac{\partial f(x^{\star}_1,\ldots,x^{\star}_n)}{\partial x_n}\right|\triangle x^{\star}_n,$$ te zbog $\triangle f^{\star}\approx\sum_{i=1}^{n}{\left|\frac{\partial f\left(x^{\star}_1,\ldots,x^{\star}_n \right)}{\partial x_i}\right|}\triangle x^{\star}_i,$ vrijedi # $$\triangle f^{\star}\approx n\left|\frac{\partial f(x^{\star}_1,\ldots,x^{\star}_n)}{\partial x_k} \right|\triangle x^{\star}_k,$$ i na kraju # $$ # \triangle x^{\star}_k\approx\frac{\triangle f^{\star}}{n\left|\frac{\partial f(x^{\star}_1,\ldots,x^{\star}_n)}{\partial x_k} \right|},\,k=1,\ldots,n. # $$ # (2) Princip jednakih apsolutnih grešaka
# Neka je sada # $$\triangle x^{\star}_1=\cdots=\triangle x^{\star}_n,$$ ponovo zbog $\triangle f^{\star}\approx\sum_{i=1}^{n}{\left|\frac{\partial f\left(x^{\star}_1,\ldots,x^{\star}_n \right)}{\partial x_i}\right|}\triangle x^{\star}_i,$ imamo # $$ # \triangle f^{\star}\approx\triangle x^{\star}_k\sum_{j=1}^{n}{\left|\frac{\partial f(x^{\star}_1, # \ldots,x^{\star}_n)}{\partial x_j} \right|}, # $$ te dobijamo # $$ # \triangle x^{\star}_k\approx\frac{\triangle f^{\star}}{\displaystyle\sum_{j=1}^{n}{\left|\frac{\partial f(x^{\star}_1,\ldots,x^{\star}_n)}{\partial x_j} \right|}},\,k=1,\ldots,n. # $$ # (3) Princip jednakih relativnih grešaka
# Neka je sada $$\delta x^{\star}_1=\cdots=\delta x^{\star}_n,$$ te ponovo zbog $\triangle f^{\star}\approx\sum_{i=1}^{n}{\left|\frac{\partial f\left(x^{\star}_1,\ldots,x^{\star}_n \right)}{\partial x_i}\right|}\triangle x^{\star}_i,$ imamo # # \begin{align*} # \triangle f^{\star}\approx&\sum_{j=1}^{n}{\left|\frac{\partial f(x^{\star}_1,\ldots,x^{\star}_n)}{\partial x_j} \right|} # \triangle x^{\star}_j\cdot \frac{\left|x^{\star}_j\right|}{\left|x^{\star}_j \right|} # =\sum_{j=1}^{n}{\left|\frac{\partial f(x^{\star}_1,\ldots,x^{\star}_n)}{\partial x_j} \right|} # \left| x^{\star}_j\right|\cdot \frac{\triangle x^{\star}_j}{\left|x^{\star}_j \right|}\\ # =&\frac{\triangle x^{\star}_k}{\left|x^{\star}_k \right|}\cdot\sum_{j=1}^{n}{\left|\frac{\partial f(x^{\star}_1,\ldots,x^{\star}_n)}{\partial x_j} \right|} # \left| x^{\star}_j\right|,\,k=1,\ldots,n, # \end{align*} # # pa je # \begin{equation*} # \triangle x^{\star}_k\approx\frac{\triangle f^{\star} \left|x^{\star}_k \right|}{\displaystyle\sum_{j=1}^{n}{\left|x^{\star}_j\frac{\partial f(x^{\star}_1,\ldots,x^{\star}_n)}{\partial x_j} \right|}},\,k=1,\ldots,n. # \label{uvod29} # \end{equation*} # #
# Zadatak. # Potrebno je izradi pravilnu šestostranu piramidu, dužine stranice baze $a = 3.5$ cm i # dužine visine bočne stranice $h = 7.2$ cm. Odrediti najveće dopuštene apsolutne greške promjenljivih $a$ i $h,$ tako da se površina izrad̄ene piramide razlikuje najviše za $\Delta P = 0.5$ od predvid̄ene. Zadatak uraditi koristeći sva tri principa. #
# # Rješenje. Površinu date šestostrane piramide računamo po formuli $$P=B+O=\frac{3\sqrt{3}a^2}{2}+3ah.$$ # (1) Princip jednakih uticaja # # Vrijednost najveće dopuštene apsolutne greške argumenata računamo po formuli # $$\triangle x^{\star}_k=\frac{\triangle f^{\star}}{n\left|\frac{\partial f{(x^{\star}_1,\ldots,x^{\star}_n)}}{\partial x_k} \right|},\,k=1,\ldots,n.$$ # U ovom slučaju to je # # \begin{align*} # \triangle a^{\star}&\approx \frac{\triangle P^{\star}}{2\left| \frac{\partial P(a^{\star},h^{\star})} # {\partial a}\right|},\\ # \triangle h^{\star}&\approx \frac{\triangle P^{\star}}{2\left| \frac{\partial P(a^{\star},h^{\star})} # {\partial h}\right|},\\ # \frac{\partial P(a^{\star},h^{\star})}{\partial a}&=3\sqrt{3}a+3h,\\ # \frac{\partial P(a^{\star},h^{\star})}{\partial h}&=3a. # \end{align*} # In[8]: import sympy import numpy as np a,h=sympy.symbols('a,h') deltaP=.5 povrsina=1.5*np.sqrt(3)*a**2+3*a*h izvoda=sympy.diff(povrsina,a) izvodh=sympy.diff(povrsina,h) deltaa=deltaP/(2*(abs( izvoda.subs([(a,3.5),(h,7.2)])))) deltah=deltaP/(2*(abs( izvodh.subs([(a,3.5),(h,7.2)])))) print('Najveća dopuštena vrijednost apsolutne greške stranice a je %1.7f,'%deltaa, '\nnajveća dopuštena vrijednost apsolutne greške visine h je %1.7f.'%deltah) # (2) Princip jednakih apsolutnih grešaka # # Vrijednost najveće dopuštene apsolutne greške argumenata računamo po # $$\triangle x^{\star}_k # =\frac{\triangle f^{\star}}{\sum_{j=1}^{n}\left|\frac{\partial f(x^{\star}_1,\ldots,x^{\star}_n)}{\partial x_k} \right| },\,k=1,\ldots,n,$$ # Pa je # $$\triangle a^{\star}=\triangle h^{\star}=\frac{\triangle P^{\star}} # {\left|\frac{\partial P(a^{\star}, h^{\star})}{\partial a} \right| # +\left|\frac{\partial P(a^{\star}, h^{\star})}{\partial h} \right|}.$$ # In[5]: import sympy import numpy as np a,h =sympy.symbols('a,h') deltaP=.5 povrsina=1.5*np.sqrt(3)*a**2+3*a*h izvoda=sympy.diff(povrsina,a) izvodh=sympy.diff(povrsina,h) deltaah=deltaP/(abs(izvoda.subs([(a,3.5),(h,7.2)]))+abs(izvodh.subs([(a,3.5),(h,7.2)]))) print('Najveća dopuštena vrijednost apsolutne greške argumenata a i h je %1.7f.'%deltaah) # (3) Princip jednakih relativnh grešaka # # Vrijednost najveće dopuštene apsolutne greške argumenata računamo po formuli # # $$\triangle x^{\star}_k=\frac{\triangle f^{\star}|x^{\star}_k|} # {\sum_{j=1}^{n}{\left|x^{\star}_j \frac{\partial f(x^{\star}_1,\ldots,x^{\star}_n )}{\partial x_j} \right|}}, # \,k=1,\ldots,n, $$ # u ovom slučaju # \begin{align} # \triangle a^{\star}&\approx\frac{\triangle P^{\star}|a^{\star}|} # {\left|a^{\star}\frac{\partial P(a^{\star},h^{\star})}{\partial a} \right| # +\left|h^{\star}\frac{\partial P(a^{\star},h^{\star})}{\partial h} \right|},\\ # \triangle h^{\star}&\approx\frac{\triangle P^{\star}|h^{\star}|} # {\left|a^{\star}\frac{\partial P(a^{\star},h^{\star})}{\partial a} \right| # +\left|h^{\star}\frac{\partial P(a^{\star},h^{\star})}{\partial h} \right|} . # \end{align} # In[17]: import sympy import numpy as np a,h=sympy.symbols('a,h') deltaP=.5; povrsina=1.5*np.sqrt(3)*a**2+3*a*h izvoda=sympy.diff(povrsina,a) izvodh=sympy.diff(povrsina,h) deltaa=(deltaP*a)/(abs(a*izvoda)+abs(h*izvodh)) deltah=(deltaP*h)/(abs(a*izvoda)+abs(h*izvodh)) print('Najveća dopuštena vrijednost apsolutne greške argumenta a je %1.7f,'%deltaa.subs([(a,3.5),(h,7.2)]), '\nnajveća dopuštena vrijednost apsolutne greške argumenta h je %1.7f'%deltah.subs([(a,3.5),(h,7.2)])) #
Literatura

# # [Bah77] N.S. Bahvalov, Numerical Methods: Analysis, Algebra, Ordinary Differential Equations, MIR, USSR, 1977. ISBN: 9780714712079.

# [Sci15] R. Scitovski, Numerička matematika, Sveučilišta Josipa Jurja Strossmayera u Osijeku – Odjel za matematiku, R.Hrvatska, 2015. ISBN: 978-953-6931-79-8.