155GIT1 / 7. cvičení: Porovnání verzí

Z GeoWikiCZ
mBez shrnutí editace
mBez shrnutí editace
Řádek 15: Řádek 15:


<source lang=octave>
<source lang=octave>
function [arctgx] = arctg(x,mez)
function [arctgx] = arctg(x,mez)
% vypocet funkce arctg rozvojem v radu do zadane presnosti
% vypocet funkce arctg rozvojem v radu do zadane presnosti
% IN:  x      ... vektor argumentu funkce
% IN:  x      ... vektor argumentu funkce
%      mez    ... zadana presnost vypoctu
%      mez    ... zadana presnost vypoctu
% OUT: arctgx ... vektor vypoctenych uhlu z intervalu <-pi/2,pi/2>
% OUT: arctgx ... vektor vypoctenych uhlu z intervalu <-pi/2,pi/2>


if any(x > 1) | any(x < -1)
if any(x > 1) | any(x < -1)
    error('arctg: Vstupni hodnoty musi byt z intervalu <-1,1>.')
    error('arctg: Vstupni hodnoty musi byt z intervalu <-1,1>.')
end
end


% vypocet pro kazdy prvek daneho vektoru samostatne
% vypocet pro kazdy prvek daneho vektoru samostatne
for i=1:length(x)
for i=1:length(x)
    % start iterace pro i-ty vstupni prvek
    % start iterace pro i-ty vstupni prvek
    y0 = 100; % vkladam fiktivni hodnotu, kterou x na vstupu nikdy nemuze nabyt
    y0 = 100; % vkladam fiktivni hodnotu, kterou x na vstupu nikdy nemuze nabyt
    % 1.iterace
    % 1.iterace
    n = 1;
    n = 1;
    y = x(i);
    y = x(i);
    while  abs( y-y0 ) > mez
    while  abs( y-y0 ) > mez
        % n-ta iterace
        % n-ta iterace
        n = n+1;
        n = n+1;
        y0 = y;
        y0 = y;
        y = y0 + (-1)^(n+1) *  x(i)^(2*n-1)  / (2*n-1);
        y = y0 + (-1)^(n+1) *  x(i)^(2*n-1)  / (2*n-1);
    end
    end
    % ulozeni vypoctene hodnoty do vystupni promenne
    % ulozeni vypoctene hodnoty do vystupni promenne
    arctgx(i) = y;
    arctgx(i) = y;
    fprintf('Pocet iteraci vypoctu: %d\n',n)
    fprintf('Pocet iteraci vypoctu: %d\n',n)
end
end
</source>
</source>


Řádek 49: Řádek 49:


<source lang=octave>
<source lang=octave>
function teckazacarku(file)
function teckazacarku(file)
% vyhleda vsechny carky v souboru a zameni je za tecku
% vyhleda vsechny carky v souboru a zameni je za tecku
% IN: file ... jmeno vstupniho souboru (textovy retezec)
% IN: file ... jmeno vstupniho souboru (textovy retezec)


if ischar(file) == 0
if ischar(file) == 0
    error('Jmeno vstupniho souboru musi byt textovy retezec.');
    error('Jmeno vstupniho souboru musi byt textovy retezec.');
end
end


vstup = fopen(file,'r');
vstup = fopen(file,'r');
filenew = [file(1:end-4), '_upr', file(end-3:end)];  % jmeno noveho souboru
filenew = [file(1:end-4), '_upr', file(end-3:end)];  % jmeno noveho souboru
vystup = fopen(filenew,'w');
vystup = fopen(filenew,'w');


konec = 0;  % indentifikator konce souboru
konec = 0;  % indentifikator konce souboru
while konec==0
while konec==0
    radek = fgets(vstup);  % fgets() nacte 1 radek souboru (se znakem \n)
    radek = fgets(vstup);  % fgets() nacte 1 radek souboru (se znakem \n)
    for i=1:length(radek)
    for i=1:length(radek)
        if radek(i) == ','
        if radek(i) == ','
            radek(i) = '.';
            radek(i) = '.';
        end
        end
    end
    end
    fprintf(vystup,'%s',radek);
    fprintf(vystup,'%s',radek);
    konec = feof(vstup);  % feof() vrati pro konec souboru hodnotu 1, jinak vraci hodnotu 0  
    konec = feof(vstup);  % feof() vrati pro konec souboru hodnotu 1, jinak vraci hodnotu 0  
end
end


fclose all;
fclose all;
fprintf('Data ulozena do souboru %s\n',filenew);
fprintf('Data ulozena do souboru %s\n',filenew);
</source>
</source>


Řádek 82: Řádek 82:


<source lang=octave>
<source lang=octave>
teckazacarku('carky.txt')
teckazacarku('carky.txt')
</source>
</source>



Verze z 26. 3. 2017, 05:36

Uživatelské funkce

Náplň cvičení

  1. drobné smíšené ú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():

 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

 % vypocet pro kazdy prvek daneho vektoru samostatne
 for i=1:length(x)
     % start iterace pro i-ty vstupni prvek
     y0 = 100; % vkladam fiktivni hodnotu, kterou x na vstupu nikdy nemuze nabyt
     % 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
     % ulozeni vypoctene hodnoty do vystupni promenne
     arctgx(i) = y;
     fprintf('Pocet iteraci vypoctu: %d\n',n)
 end

Funkce pro načtení neformátovaných dat po řádcích

např. záměna čárky za tečku:

 function teckazacarku(file)
 % vyhleda vsechny carky v souboru a zameni je za tecku
 % IN: file ... jmeno vstupniho souboru (textovy retezec)

 if ischar(file) == 0
     error('Jmeno vstupniho souboru musi byt textovy retezec.');
 end

 vstup = fopen(file,'r');
 filenew = [file(1:end-4), '_upr', file(end-3:end)];  % jmeno noveho souboru
 vystup = fopen(filenew,'w');

 konec = 0;  % indentifikator konce souboru
 while konec==0
     radek = fgets(vstup);  % fgets() nacte 1 radek souboru (se znakem \n)
     for i=1:length(radek)
         if radek(i) == ','
             radek(i) = '.';
         end
     end
     fprintf(vystup,'%s',radek);
     konec = feof(vstup);   % feof() vrati pro konec souboru hodnotu 1, jinak vraci hodnotu 0 
 end

 fclose all;
 fprintf('Data ulozena do souboru %s\n',filenew);

datový soubor carky.txt ke stažení

Volání funkce:

 teckazacarku('carky.txt')

Úlohy