Matematické Fórum

Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.

Nástěnka
22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.

Nejste přihlášen(a). Přihlásit

#1 22. 09. 2019 13:36

byk7
InQuisitor
Příspěvky: 4713
Reputace:   221 
 

Metoda proste iterace v Matlabu

Zdravim, mam za ukol vytvorit funkci pro metodu proste iterace.
Muj kod je nasledujici.

Code:

function [ x ] = fixedpoint(g,I,y,tol,m)
% metoda pevneho bodu pro reseni rovnice g(x)=x
% vstup: g, I, y, tol, max
% g - funkce
% I - interval
% y - pocatecni iterace
% tol - tolerance
% m - maximalni pocet iteraci
% x - priblizne reseni

a=I(1);b=I(2);

if(y<a | y>b)
    error('Pocatecni iterace lezi mimo zadany interval.')
end

gx=g(y);

while(abs(x-gx)>tol & m>0)
    if(gx<a | gx>b)
        error('Funkce g nezobrazuje interval I do sebe.')
    end
    x=g(x);
    gx=g(x);
    m=m-1;
end

Kdyz to sputim, vyhazuje to chybu
> Undefined function 'fixedpoint' for input arguments of type 'function_handle'.

Bohuzel, tim, ze v Matlabu se teprv zacinam ucit, tak chybu nevidim (syntaktickou nebo logickou).
Takze, co delam, prosim, spatne<


Příspěvky psané červenou barvou jsou moderátorské, šedá je offtopic.

Offline

 

#2 22. 09. 2019 18:07

mák
Místo: Vesmír, Galaxie MD
Příspěvky: 864
Reputace:   61 
 

Re: Metoda proste iterace v Matlabu

Zdravím,
Matlab neznám, zjistil jsem, že podobný je octave, tak jsem si jej stáhl a nainstaloval.
Program, aby mi chodil, jsem musel trochu upravit:

Code:

function [result] = g(x)
  result = sqrt(10-3*x);
endfunction


function [x] = fixedpoint(I,y,tol,m)
% metoda pevneho bodu pro reseni rovnice g(x)=x
% vstup: g, I, y, tol, max
% g - funkce
% I - interval
% y - pocatecni iterace
% tol - tolerance
% m - maximalni pocet iteraci
% x - priblizne reseni

a=I(1);
b=I(2);

if(y<a | y>b)
    error('Pocatecni iterace lezi mimo zadany interval.');
    return;
endif

x=g(y);

while (abs(x-y)>tol & m>0)
    if (x<a | y>b)
        error('Funkce g nezobrazuje interval I do sebe.');
        break;
    endif 
    y=x;   
    x=g(y);
    m=m-1;
endwhile

endfunction


[r] = fixedpoint([0,5],1,0.0001,20)
[r] = fixedpoint([0,5],3,0.0001,20)
[r] = fixedpoint([0,5],2.5,0.0001,20)

Jsem v tom taky poprvé, nevím jestli je to správně, ale nehlásí to chyby a hlavně to funguje. Možná to pomůže.


LibreOffice Verze: 7.6.6.3, Maxima 5.47.0 (SBCL)

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson