Herramientas computacionales para la matemática MATLAB: Álgebra Simbólica Verónica Borja Macías Junio 2012 1 Matlab Sustitución de variables simbólicas Es posible sustituir un variables simbólicas dentro de otra por un valor numérico y evaluar con la función subs. Ejemplo: >> syms a b c; >> S = (a^2 - a*b - a*c + b^2 - b*c + c^2)^(1/2) >> a = 10; b = 2; c = 10; >> subs(S) ans = 8 Pero de este modo las variables a, b y c dejan de ser simbólicas y se convierten en arreglos de 1x1. 2 Matlab Sustitución de variables simbólicas Es posible sustituir una variable simbólica sin que esta deje de ser una variable simbólica. Ejemplo: >> syms x; >> f = 2*x^2 - 3*x + 1; >> subs(f, 2) ans = 3 >> syms x y; >> f = x^2*y + 5*x*sqrt(y); >> subs(f, x, 3) ans = 9*y + 15*y^(1/2) 3 Matlab Sustitución de variables simbólicas Ejemplo: >> subs(f, y, x) ans = x^3 + 5*x^(3/2) %Sustitución en matrices: elemento a elemento. >> A = [1 2 3;4 5 6]; >> syms x; f = x^3 - 15*x^2 - 24*x + 350; >> subs(f,A) ans = 312 250 170 78 -20 -118 4 Matlab Sustitución de variables simbólicas Ejemplo: >> syms x; f = x^3 - 15*x^2 - 24*x + 350; A = magic(3) A= 8 1 6 3 5 7 4 9 2 >> b = sym2poly(f)%Obtiene los coeficientes de la variable f b= 1 -15 -24 350 >> A^3 - 15*A^2 - 24*A + 350*eye(3) ans = -10 0 0 0 -10 0 0 0 -10 5 Matlab Sustitución de variables simbólicas Es posible sustituir una variable simbólica de un polinomio por un una matriz de la siguiente forma. Ejemplo: %Sustitución en matrices: como matrices. polyvalm(sym2poly(f),A) ans = -10 0 0 0 -10 0 0 0 -10 6 Matlab Sustitución de variables simbólicas Es posible sustituir un conjunto de variables simbólicas de una expresión de manera simultanea de la siguiente forma. Ejemplo: >> syms a b c; >> S = (a^2 - a*b - a*c + b^2 - b*c + c^2)^(1/2) >>subs(S, {a, b, c}, {10, 2, 10}) ans = 8 7 Matlab Sustitución de variables simbólicas Otra función que de algún modo sustituye largas expresiones por terminos más simples, esta es subexpr. Ejemplo: >> syms a x >> s = solve(x^3 + a*x + 1) >> r = subexpr(s) sigma = (a^3/27 + 1/4)^(1/2) - ½ r = sigma^(1/3) - a/(3*sigma^(1/3)) a/(6*sigma^(1/3)) - sigma^(1/3)/2 - (3^(1/2)*(a/(3*sigma^(1/3)) + sigma^(1/3))*i)/2 a/(6*sigma^(1/3)) - sigma^(1/3)/2 + (3^(1/2)*(a/(3*sigma^(1/3)) + sigma^(1/3))*i)/2 8 Matlab Restricciones para variables simbólicas MATLAB considera cualquier variable simbólica como variable compleja a menos que se especifique un tipo distinto. Se pueden restringir los valores de una variable simbólica a reales o positivos, por ejemplo: Ejemplo: >> syms x real; >> solve(x^2+1) Warning: Explicit solution could not be found. > In solve at 81 ans = [ empty sym ] 9 Matlab Restricciones para variables simbólicas Ejemplo: >> y=sym('y','positive'); >> solve(y^2-1) ans = 1 >> clear y; sym y; solve(y^2-1) % no borro las restricciones ans = 1 >> syms y clear; % solo borramos las restricciones >> solve(y^2-1) ans = -1 1 10 Matlab Restricciones para variables simbólicas Para que quede un poco mas claro necesitamos saber que existe un workspace asociado al motor simbólico (symengine) independiente del workspace de variables habituales de MATLAB. Para saber si una variable tiene alguna restricción usamos: >> evalin(symengine,'getprop(x)') 11 Matlab Restricciones para variables simbólicas Ejemplo: >> syms a >> evalin(symengine,'getprop(a)') ans = C_ >> syms b real >> evalin(symengine,'getprop(b)') ans = R_ >> syms c positive >> evalin(symengine,'getprop(c)') ans = (0, Inf) >> clear; reset(symengine); 12 Matlab Solución de ecuaciones Una de las funciones más útiles en la caja de herramientas simbólica es solve. Se le puede usar para determinar las raíces de expresiones, para encontrar respuestas numéricas cuando hay una sola variable y para resolver simbólicamente una incógnita. La función solve también puede resolver sistemas de ecuaciones tanto lineales como no lineales. Cuando se parea con la función sustitución (subs), la función solve permite al usuario encontrar soluciones analíticas a una variedad de problemas. 13 Matlab Solución de ecuaciones Cuando se usa con una expresión, la función solve iguala la expresión a cero y resuelve para las raíces. Ejemplo: >> E1=x-3 >> solve (E1) ans = 3 >> sol ve ( ' x^2 - 9 ' ) ans = 3 -3 14 Matlab Solución de ecuaciones Podemos resolver fácilmente expresiones simbólicas con más de una variable. MATLAB resuelve preferentemente para x. Si no hay x en la expresión, MATLAB encuentra la variable más cercana a x. Si quiere especificar la variable por resolver, sólo inclúyala en el segundo campo. Ejemplo: solve('a*x^2+b*x +c ' ) ans = -(b + (b^2 - 4*a*c)^(1/2))/(2*a) -(b - (b^2 - 4*a*c)^(1/2))/(2*a) >> solve('a*x^2+b*x +c ', 'a' ) ans = -(c + b*x)/x^2 15 Matlab Solución de ecuaciones Para resolver ecuaciones que no están igualadas a cero debemos colocarlas como cadenas de caracteres. Ejemplo: >> E2=sym('5*x^2 + 6*x +3=10' ) >> solve(E2) ans = -3/5+2/5* 11^(1/2) - 3/5-2/5 * 11^( 1/2) >> E3=sym( 'P=PO*exp(r*t)') >> solve (E3, 't') ans = log (P/PO) /r 16 Matlab Solución de ecuaciones La función solve también puede resolver sistemas de ecuaciones. Ejemplo: >> uno = sym( ' 3*x + 2*y -z = 10 ' ) ; >> dos = sym ( ' -x + 3*y + 2 * z = 5'); >> tres = sym ( ' x - y - z = - 1 ' ) ; >> [x , y , z] =solve (uno , dos, tres) x= -2 y= 5 z= -6 17