155GIT1 / 8. cvičení

Z GeoWikiCZ
Verze z 24. 4. 2023, 19:07, kterou vytvořil Holesovsky (diskuse | příspěvky)
(rozdíl) ← Starší verze | zobrazit aktuální verzi (rozdíl) | Novější verze → (rozdíl)
Skočit na navigaci Skočit na vyhledávání
předchozí cvičenístránky předmětudalší cvičení

Uživatelské funkce

Náplň

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

Úlohy