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
!! 17.06.2018 (Jel.) Khanova škola zve nadšence ke spolupráci na překladech návodů pro učitele a rodiče.
! 04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
17.01.2016 (Jel.) Rok 2016 s novými a novějšími krystaly od kolegy Pavla!
17.01.2016 (Jel.) Nabídka knih z oborů matematiky, fyziky, chemie
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: 4644
Škola: PřF MUNI
Reputace:   219 
 

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: 744
Reputace:   57 
 

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.

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson