Funkce, řešení rovnic

1 Funkce

Pro definování funkcí používáme operátor :=.

(%i1) f(x):=x^2;

Result

(%i2) f(2);f(y);

Result

Vypsání seznamu uživatelem definovaných funkcí

(%i4) functions;

Result

Vypsání definice uživatelem definované funkce

(%i5) fundef(f);

Result

Ekvivalentní způsob zápisu pomocí define

(%i6) define(g(x), x^3);

Result

(%i7) g(3);

Result

(%i8) functions;

Result

(%i9) solve(f(x)=9,x);

Result

Rozdíl mezi operatorem := a funkcí define

(%i10) f1(x):=print(x)$

(%i11) define(f2(x), print(x))$

Result

V případě ":=" zůstávají obě strany nevyhodnoceny. V případě použití define je pravá
strana vyhodnocena.

(%i12) fundef(f1);

Result

(%i13) fundef(f2);

Result

(%i14) f1(5);

Result

(%i15) f2(5);

Result

(%i16) f(x):=x^3;

Result

(%i17) fp(x):=diff(f(x),x);

Result

(%i18) fp(1);

Result

Chybové hlášení je vyvoláno operací diff(f(1),1), nejdříve se provede substituce
hodnoty za proměnnou a teprve poté výpočet derivace.

(%i19) define(fd(x), diff(f(x), x));

Result

(%i20) fd(1);

Result

Funkce více proměnných

(%i21) f(x,y):=x^3-3*x*y^2;

Result

(%i22) f(3,2);

Result

Definování funkce jako posloupnosti výrazů

(%i23) f(x):= (a: x^2+4, b: x^3+3*x, 2/a+b/a+b^2);

Result

(%i24) f(t);

Result

(%i25) f(2);

Result

(%i26) f(x):= (a: x^2+4, b: x^3+3*x, ratsimp(2/a+b/a+b^2));

Result

(%i27) f(t);

Result

(%i28) unit_step(1);unit_step(0);unit_step(-1);

Result

(%i31) wxplot2d(unit_step(x),[x,-2,2],[y,-1,2]);

Result

Definování po částech spojité funkce

(%i32) f1(x):=(if x<1 then -1 elseif x=1 then 0 else 1);

Result

(%i33) wxplot2d(f1(x),[x,-1,2],[y,-2,2]);

Result

(%i34) f1(%pi);

Result

(%i35) sgn(n):=(if integerp(n)=true then (-1)^n else print(n, "neni integer"));

Result

(%i36) sgn(%pi);

Result

(%i37) sgn(4);

Result

Rekurzivní definice

(%i38) L(n):=(if n=1 then 1 elseif n=2 then 3 else L(n-1)+L(n-2))$

(%i39) L(20);

Result

(%i40) trace(L);

Result

(%i41) L(4);

Result

(%i42) untrace(L);

Result

(%i43) L[n]:=(if n=1 then 1 elseif n=2 then 3 else L[n-1]+L[n-2])$

(%i44) L[20];

Result

(%i45) arrays;

Result

(%i46) arrayinfo(L);

Result

(%i47) showtime:true$

Result

(%i48) L(21);

Result

(%i49) L[21];

Result

(%i50) showtime:false$

Spočtené hodnoty jsou ukládány do pole a v případě potřeby nejsou opětně počítány.
Pro výpočet L[21] je tedy potřeba jen jeden krok.

(%i51) kill(all);

Result

Vytvoření funkce z výrazu

(%i1) vzorec:(b^2*x^2*sin(b*x)-2*sin(b*x)+2*b*x*cos(b*x)*a*t)/b^3;

Result

(%i2) define(F(x,t), vzorec);

Result

(%i3) F(0,1);F(%pi/b,5);

Result

Operace s funkcemi

(%i5) f(x):=log(x)+1;g(y):=exp(y)-1;

Result

(%i7) f(z)+g(z);

Result

(%i8) f(z)*g(z);

Result

(%i9) f(g(z));

Result

(%i10) g(f(z));

Result

Použití anonymní funkce

(%i11) kill(all);

Result

(%i1) functions;

Result

(%i2) f : lambda([x], x^2);

Result

(%i3) f(a);

Result

(%i4) f(2);

Result

(%i5) functions;

Result

(%i6) map(f, a+b+c);

Result

(%i7) map(lambda([x], x^2), a+b+c);

Result

(%i8) map(lambda([x], x^2), [1,2,3]);

Result

2 Rovnice

(%i9) eqn:(x-1)*(x^2+x+1);

Result

(%i10) sol:solve(eqn,x);

Result

Pokud rovnice obsahuje pouze jednu proměnnou, nemusíme druhý parametr zadávat.

(%i11) sol: solve(eqn);

Result

(%i12) sol[1];sol[2];

Result

(%i14) ev(expand(eqn), sol[1]);ev(expand(eqn), sol[2]);

Result

(%i16) rov: x^3 - 4*x^2 + 6*x - 4 = 0;

Result

(%i17) solve(rov);

Result

Pouze reálná řešení

(%i18) algsys([rov],[x]), realonly:true;

Result

Rovnice s parametrem

(%i19) eqn:x^3+2*a*x^2+a*x=1;

Result

(%i20) solve(eqn,x);

Result

Řešení nerovnic

(%i21) load(solve_rat_ineq);

Result

(%i22) solve_rat_ineq(x^3+4*x^2+2*x-1>0);

Result

Soustavy rovnic

(%i23) s:solve([x+2*y=3, y+1/x=1], [x,y]);

Result

(%i24) ev([x+2*y=3, y+1/x=1],s[1]);

Result

(%i25) solve([y^2+1=x,x+2=y], [x,y]);

Result

Příkaz linsolve slouží k řešení lineárních rovnic a jejich soustav

(%i26) linsolve([y+x=1,x-2=3],[y,x]);

Result

(%i27) solve(sin(x)=1/2,x);

Result

(%i28) eqn :product(x-k,k,1,110);

Result

(%i29) solve(eqn,x);

Result

(%i30) eqn:x+x^(1/3)=-2;

Result

(%i31) solve(eqn, x);

Result

Příliš mnoho řešení

(%i32) eqn :sin(x)^3 -13/2*sin(x)^2 + 11*sin(x) = 4;

Result

(%i33) solve(eqn,x);

Result

(%i34) solve(eqn,sin(x));

Result

(%i35) solve(sin(x)=1/2,x);

Result

(%i36) r1:(x-1)^2/(x^2-1)=0;

Result

(%i37) solve(r1,x);

Result

(%i38) ev(r1,x=1);

Result

Numerické řešení

(%i39) r:x^7-2*x^6-4*x^5-x^3+x^2+6*x+4;

Result

(%i40) solve(r);

Result

(%i41) if numer#false then numer:false else numer:true;

Result

(%i42) solve(r);

Result

Příkaz find_root slouží pro numerické řešení rovnic. První dva parametry jsou stejné
jako u příkazu solve, druhé dva určují krajní body intervalu, na kterém rovnici řešíme.

(%i43) find_root(r,x,-2,0);

Result

(%i44) find_root(r,x,0,2);

Result

(%i45) find_root(r,x,2,4);

Result

(%i46) allroots(r);

Result

(%i47) realroots(r);

Result

(%i48) load(mnewton);

Result

(%i49) mnewton(r,x,2);

Result

(%i50) mnewton(sin(x),x,0);

Result

(%i51) mnewton(sin(x),x,3);

Result


Created with wxMaxima.