155GIT1 / 8. cvičení
Uživatelské funkce
Náplň
- drobné úlohy
Ukázky
Drobné úlohy
Funkce pro výpočet nekonečné řady do zadané přesnosti (příklad iterativního výpočtu)
např. výpočet funkce arctg(), viz Taylorova řada:
function arctgx = arctg(x,mez)
% vypocet funkce arctg rozvojem v radu do zadane presnosti
% IN: x ... vektor argumentu funkce
% mez ... zadana presnost vypoctu
% OUT: arctgx ... vektor vypoctenych uhlu z intervalu <-pi/2,pi/2>
if any(x > 1) | any(x < -1)
error('arctg: Vstupni hodnoty musi byt z intervalu <-1,1>.')
end
if nargin < 2
mez = 1e-10;
end
% výpočet pro každý prvek daného vektoru samostatně
for i=1:length(x)
% start iterace pro i-tý vstupní prvek
y0 = 100; % vkládám fiktivní hodnotu, kterou x na vstupu nikdy nemůže nabýt
% 1.iterace
n = 1;
y = x(i);
while abs( y-y0 ) > mez
% n-ta iterace
n = n+1;
y0 = y;
y = y0 + (-1)^(n+1) * x(i)^(2*n-1) / (2*n-1);
end
% uložení vypočtené hodnoty do výstupní proměnné
arctgx(i) = y;
fprintf('Pocet iteraci vypoctu: %d\n',n)
end
function arctgx = arctg(x,mez)
% vypocet funkce arctg rozvojem v radu do zadane presnosti
% IN: x ... matice argumentu funkce
% mez ... zadana presnost vypoctu
% OUT: arctgx ... matice vypoctenych uhlu z intervalu <-pi/2,pi/2>
if any(any(x > 1)) | any(any(x < -1))
error('arctg: Vstupni hodnoty musi byt z intervalu <-1,1>.')
end
if nargin < 2
mez = 1e-10;
end
% výpočet pro každý prvek dané matice samostatně
for i=1:size(x,1)
for j=1:size(x,2)
% start iterace pro i,j-tý vstupní prvek
y0 = 100; % vkládám fiktivní hodnotu, kterou x na vstupu nikdy nemůže nabýt
% 1.iterace
n = 1;
y = x(i,j);
while abs( y-y0 ) > mez
% n-ta iterace
n = n+1;
y0 = y;
y = y0 + (-1)^(n+1) * x(i,j)^(2*n-1) / (2*n-1);
end
% uložení vypočtené hodnoty do výstupní proměnné
arctgx(i,j) = y;
fprintf('Pocet iteraci vypoctu: %d\n',n)
end
end