\305\230e\305\241en\303\255 algebraick\303\275ch a transcendentn\303\255ch rovnic (hled\303\241n\303\255 ko\305\231en\305\257 funkc\303\255)
Autorsk\303\241 pr\303\241va:
U\305\276ivatel, tj. \304\215ten\303\241\305\231, m\305\257\305\276e tento text pou\305\276\303\255vat pro svoje pot\305\231eby bez omezen\303\255. Distribuce a p\305\231evod do ti\305\241t\304\233n\303\251 podoby pouze se svolen\303\255m autor\305\257. Text m\305\257\305\276e m\303\255t v\303\255ce verz\303\255, kter\303\251 vznikaj\303\255 t\303\255m, \305\276e auto\305\231i mohou text v pr\305\257b\304\233hu \304\215asu m\304\233nit a dopl\305\210ovat.
Kontaktn\303\255 adresy: nemecek@math.feld.cvut.cz navara@cmp.felk.cvut.cz
Inicializace \342\200\223 jednotliv\303\251 metody
restart;
Pomocn\303\251 procedury
testsign := proc(f,a,b,fa,fb);
if evalf(fa*fb)>0 then
ERROR("funkce", f('x'),"nem\304\233n\303\255 znam\303\251nko na intervalu", a..b)
fi
end:
meze := proc(a,b); userinfo(8, meze, [a..b]) end:
reseni := proc(s,fs); userinfo(4, res, "x=", s, "f(x)=", fs) end:
Metoda bisekce
bisekce := proc (f,podm,a,b) local s,fs,fa,fb; global n;
meze(a,b);
if nargs>4 then n:=n+1; fa:=args[5]; fb:=args[6]
else n:=0; fa:=f(a); fb:=f(b); testsign(f,a,b,fa,fb) fi;
s:=(a+b)/2; fs:=f(s);
reseni(s,fs);
if podm(s, a) then RETURN(s)
elif evalf(fa*fs)<0 then bisekce(f,podm,a,s,fa,fs)
elif evalf(fb*fs)<0 then bisekce(f,podm,s,b,fs,fb)
else RETURN(s) fi
end: ##
Metoda regula-falsi
regula_falsi := proc (f,podm,a,b) local s,fs,fa,fb,last; global n;
meze(a,b);
if nargs>4 then n:=n+1; fa:=args[5]; fb:=args[6]; last:=args[7]
else n:=0; fa:=f(a); fb:=f(b); last:=a; testsign(f,a,b,fa,fb) fi;
s:=(a*fb-b*fa)/(fb-fa); fs:=f(s);
reseni(s,fs);
if podm(s, last) then RETURN(s)
elif evalf(fa*fs)<0 then regula_falsi(f,podm,a,s,fa,fs,b)
elif evalf(fb*fs)<0 then regula_falsi(f,podm,s,b,fs,fb,a)
else RETURN(s) fi
end: ##
Metoda se\304\215en
secny := proc (f,podm,a,b) local s,fs,fa,fb; global n;
meze(min(a,b),max(a,b));
if nargs>4 then n:=n+1; fa:=args[5]; fb:=args[6]
else n:=0; fa:=f(a); fb:=f(b) fi;
s:=(a*fb-b*fa)/(fb-fa); fs:=f(s);
reseni(s,fs);
if podm(s, a) then RETURN(s)
else secny(f,podm,s,a,fs,fa) fi
end: ##
Newtonova metoda
Newton := proc (f,podm,a) local s,fs,fa; global n;
if nargs>3 then n:=n+1; fa:=args[4]
else n:=0; fa:=f(a) fi;
s:=a-fa/D(f)(a); fs:=f(s);
reseni(s,fs);
if podm(s, a) then RETURN(s)
else Newton(f,podm,s,fs) fi
end: ##
Metoda prost\303\251 iterace
1. s automatickou volbou itera\304\215n\303\255 funkce
Mpi := proc (f,podm,a) local s,fs,fa; global n;
if nargs>3 then n:=n+1; fa:=args[4]
else n:=0; fa:=f(a) fi;
s:=a-fa; fs:=f(s);
reseni(s,fs);
if podm(s, a) then RETURN(s)
else Mpi(f,podm,s,fs) fi
end: ## Mpi s automatickou volbou itera\304\215n\303\255 funkce
2. s explicitn\304\233 zadanou itera\304\215n\303\255 funkc\303\255 phi \342\200\223 \305\231e\305\241\303\255 rovnici phi(x)=x
iterace := proc (phi,podm,a) local s; global n;
if nargs>3 then n:=n+1
else n:=0 fi;
userinfo(4, res, "x=", a);
s:=phi(a);
if podm(s, a) then RETURN(s)
else iterace(phi,podm,s,a) fi
end: ## Mpi se zadanou itera\304\215n\303\255 funkc\303\255 phi \342\200\223 \305\231e\305\241\303\255 rovnici phi(x)=x
Standardn\303\255 procedury Maplu
1. Symbolick\303\251 \305\231e\305\241en\303\255
MSymb := proc (f) solve(f('x'),'x') end: ## symbolicke reseni v Maplu
2. Numerick\303\251 \305\231e\305\241en\303\255
MNum := proc (f) local interval; ##
if nargs>2 then interval:=args[2]..args[3] else interval:=NULL fi;
fsolve(f('x'),'x',interval)
end: ## numerick\303\251 \305\231e\305\241en\303\255 v Maplu
Podm\303\255nky ukon\304\215en\303\255
podle funk\304\215n\303\255 hodnoty
podm_hodnota := proc (x, lastx) evalf(abs(f(x))<delta) end:
delta:=epsilon:
podle vzd\303\241lenosti posledn\303\255ch dvou iterac\303\255
podm_krok := proc (x, lastx) evalf(abs(x-lastx)<eta) end:
eta:=epsilon:
Kontrola vyhodnocen\303\255 p\305\231\303\255kaz\305\257.
print("Inicializce provedena");
P\305\231\303\255klady pou\305\276it\303\255
Pro ka\305\276dou metodu se standardn\304\233 vyp\303\255\305\241e aproximace ko\305\231ene (posledn\303\255 iterace), funk\304\215n\303\255 hodnota v posledn\303\255 iteraci a po\304\215et iterac\303\255 do spln\304\233n\303\255 podm\303\255nky ukon\304\215en\303\255. Pokud chcete zobrazit dal\305\241\303\255 informace (meziv\303\275sledky) pou\305\276ijte nastaven\303\255 v p\305\231edchoz\303\255 podsekci. Dopln\304\233n\303\255 odhadu chyby a zd\305\257vodn\304\233n\303\255 dosa\305\276en\303\251 p\305\231esnosti je na v\303\241s.
bisekce(f, podm_krok, a, b); `funk\304\215n\303\255 hodnota`=f(%); `po\304\215et iterac\303\255`=n;
regula_falsi(f, podm_hodnota, a, b); `funk\304\215n\303\255 hodnota`=f(%); `po\304\215et iterac\303\255`=n;
secny(f, podm_krok, a, b); `funk\304\215n\303\255 hodnota`=f(%); `po\304\215et iterac\303\255`=n;
Newton(f, podm_krok, a); `funk\304\215n\303\255 hodnota`=f(%); `po\304\215et iterac\303\255`=n;
Mpi(f, podm_krok, a); `funk\304\215n\303\255 hodnota`=f(%); `po\304\215et iterac\303\255`=n;
iterace(x -> (10-x^4)^(1/5), podm_krok, a); `funk\304\215n\303\255 hodnota`=f(%); `po\304\215et iterac\303\255`=n;
Mo\305\276nosti Maple:
symbolicky
MSymb(f);
evalf(%);
numericky bez separace
MNum(f);
numericky se separac\303\255
MNum(f, a, b);
Maplets, Tutors a Math Apps
Maplets jsou nov\304\233 definovan\303\241 grafick\303\241 u\305\276ivatelsk\303\241 rozhran\303\255 pro grafick\303\251 demonstrace a v\303\275po\304\215ty. Ovl\303\241daj\303\255 se v\304\233t\305\241inou tla\304\215\303\255tkov\303\275mi li\305\241tami a obsahuj\303\255 okna pro zad\303\241n\303\255 vstupn\303\255ch a zobrazen\303\255 v\303\275stupn\303\255ch hodnot. Maj\303\255 tak\303\251 samostatn\303\275 Help (p\305\231ed pou\305\276it\303\255m prostudujte). M\305\257\305\276ete je spoust\304\233t jako ostatn\303\255 p\305\231\303\255kazy Maple, v\304\233t\305\241inou bez uveden\303\255 argument\305\257.
Pro lep\305\241\303\255 p\305\231edstavu a pochopen\303\255 lze pou\305\276\303\255t dal\305\241\303\255 interaktivn\303\255 grafick\303\251 ilustrace zpracovan\303\251 v Tutors (volba v z\303\241lo\305\276ce Tools \342\206\222 Tutors), Math Apps (dostupn\303\251 tak\303\251 volbou v z\303\241lo\305\276ce Tools \342\206\222 Math Apps) nebo p\305\231\303\255kazy ze specializovan\303\275ch knihoven.
Inicializace p\305\231\303\255kaz\305\257 z knihoven.
with(Student[NumericalAnalysis], Bisection, FalsePosition, Secant, Newton, FixedPointIteration, Roots);
with(Student[Calculus1], NewtonsMethodTutor);
P\305\231ipomenut\303\255 zad\303\241n\303\255 nebo nastaven\303\255 prom\304\233nn\303\275ch.
g:=f(x);
interval:=a..b;
epsilon;
iterace metody bisekce graficky i numericky (lze m\304\233nit tvar v\303\275stupu, podm\303\255nky ukon\304\215en\303\255 a dal\305\241\303\255 parametry \342\200\223 viz Help)
Bisection(g, x = [a, b], tolerance = epsilon, maxiterations = 10, stoppingcriterion = function_value, output = animation);
Bisection(g, x = [a, b], tolerance = epsilon, stoppingcriterion = function_value, output = value);
iterace metody regula-falsi graficky i numericky (lze m\304\233nit tvar v\303\275stupu, podm\303\255nky ukon\304\215en\303\255 a dal\305\241\303\255 parametry \342\200\223 viz Help)
FalsePosition(g, x = [a, b], tolerance = epsilon, maxiterations = 10, stoppingcriterion = absolute, output = plot);
iterace metody se\304\215en graficky i numericky (lze m\304\233nit tvar v\303\275stupu, podm\303\255nky ukon\304\215en\303\255 a dal\305\241\303\255 parametry \342\200\223 viz Help)
Secant(g, x = [a, b], tolerance = epsilon, maxiterations = 10, stoppingcriterion = relative, output = information);
iterace Newtonovy metody graficky i numericky (lze m\304\233nit tvar v\303\275stupu, podm\303\255nky ukon\304\215en\303\255 a dal\305\241\303\255 parametry \342\200\223 viz Help)
Newton(g, x = a, tolerance = epsilon, maxiterations = 10, stoppingcriterion = function_value, output = sequence);
NewtonsMethodTutor(g, interval);
iterace MPI graficky i numericky (lze m\304\233nit nebo i vynechat itera\304\215n\303\255 funkci, tvar v\303\275stupu, podm\303\255nky ukon\304\215en\303\255 a dal\305\241\303\255 parametry \342\200\223 viz Help)
g;
gg:=(10-x^4)^(1/5); # itera\304\215n\303\255 funkce
automatick\303\241 volba itera\304\215n\303\255 funkce
FixedPointIteration(g, x = a, tolerance = epsilon, maxiterations = 10, stoppingcriterion = relative, output = plot, plotoptions=[scaling=constrained]);
p\305\231edepsan\303\241 itera\304\215n\303\255 funkce
FixedPointIteration(fixedpointiterator = gg, x = a, tolerance = epsilon, maxiterations = 10, stoppingcriterion = relative, output = plot, plotoptions=[scaling=constrained]);
v\305\241echno v jednom (bisection, falseposition, secant, newton, fixedpointiteration, dal\305\241\303\255 parametry \342\200\223 viz Help)
Roots(g, x = [a, b], method = bisection, tolerance = epsilon, maxiterations = 20, output = information);
Roots(g, x = a, method = newton, tolerance = epsilon, output = plot);