Sie sind auf Seite 1von 7

Anlisis Numrico

Universidad Nacional de Misiones

Clculo de Raices
Matlab incluye tres funciones bsicas para calcular raices de funciones.
fzero

Calcula raices de funciones de una varible.

fsolve

Calcula raices de sistemas de funciones no lineales.

roots

Calcula raices de polinomios.

Empleando fzero

Comandos utilizados
en esta gua
fzero
fsolve
roots
ezplot
inline
hold
grid

El formato de este comando se describe en el siguiente esquema:

>> t = fzero ( f ( x), xo )


Punto inicia para el
clculo

Funcin cuya raz se


quiere calcular

El comando fzero admite diferentes maneras de introducir la funcin, todas ellas respondiendo a
declaraciones de funciones de tipo inline Por ejemplo, sea la siguiente funcin:

10 10 * x + x 2
f ( x) =
(1 x)
Puede escribirse de las siguientes maneras:
>> fzero('10+x^2/(1-x)',10)
ans =
8.8730
en este caso la variable debe declararse como x (equis). Si se necesita utilizar otro nombre de variable
puede escribirse as:
>> fzero(inline('10+m^2/(1-m)'),10)
ans =
8.8730
y si se desea declarar en pasos separados,
>> g = inline ('10+m^2/(1-m)'); fzero(g,10)
ans =
8.8730
tambin admite invocar a una funcin declarada en un archivo m.
function fun = f(x)
Mario R. ROSENBERGER

1 de 7

Clculo de races
fun = 10+x^2/(1-x);
>> fzero ( fun' , 10 )
a ans =
8.8730

Comprese la influencia de la eleccin del punto inicial:


>> fzero(inline('10+m^2/(1-m)'),3)
ans =
1.1270
>> fzero(inline('10+m^2/(1-m)'),4)
ans =
8.8730
Se puede observa que hay dos racices, por lo menos, una en 1.1270 y otra en 8.8730, por lo tanto para
la eleccin del punto inicial suele ser conveniente una visualizacin previa de la funcin. En Matlab lo
podemos realizar con el comando ezplot, as:
>> ezplot('10+x^2/(1-x)',-10,10)
>> grid

raices

En la figura se destacan ambas raices encerradas con una elipse. Una manera ms directa de calcular
a el valor de una de las races en particular requiere de introducir el intervalo, observado a priori,
donde el programa buscar las races, en este caso las imgenes de los extremos del intervalo deben
tener signos opuestos. Por ejemplo:
>> fzero ( inline ( ' 10+m^2/(1-m) ' ) , [ 2 , 10 ] )
ans =
8.8730
>> fzero(inline('10+m^2/(1-m)'),[1.1,2])
ans =
1.1270

Mario R. ROSENBERGER

2 de 7

Clculo de races

Empleando fsolve
El formato de este comando se describe en el siguiente esquema:

>> t = fsolve( f ( x), xo )


Punto inicial para el
clculo

Funcin cuya raz se


quiere calcular

La funcin debe definirse como vector columna, donde cada elemento corresponde a una de las
funciones. Por ejemplo para el caso de tratarse de las siguientes funciones:

x1 x2 = 0

2 x1 + 2 x2 = 0

3
El vector a definir debe tener la forma:

x1 x2

3
2
x
2
x
+

1
2

y debera definirse as:


[(2.*x(1)+2)^(1/3)-x(2);x(1)-x(2)]
Donde x(1) representa una de las variables y x(2) representa la segunda, este formato (equisparentesis-ndice_numrico-parentesis) para la declaracin de variables es estricto y debe
respetarse para el comando fsolve.
El punto inicial para el clculo se de los elementos se introduce por medio de un vector columna. Todo
esto junto se ve en el siguiente ejemplo:
>> fsolve(inline('[(2.*x(1)+2)^(1/3)-x(2);x(1)-x(2)]'),[1;1], optimset('fsolve'))
Optimization terminated successfully:
First-order optimality is less than options.TolFun.
ans =
1.7693
1.7693
Aqu, adems, se emple el argumento Optimset(fsolve) el cual indica que se emplear el formato y
funciones primitivas (de las primeras versiones de Matlab) para este comando. Las nuevas
implementaciones de Matlab extendieron sus funciones para realizar clculos de optimizacin. En el
siguiente ejemplo se configure el argumento Optimset para que presente en la pantalla los resultados
parciales de cada iteracin. (Probar el funcionamiento del comando sin usar el argumento optimset)

Mario R. ROSENBERGER

3 de 7

Clculo de races
>>fsolve(inline('[(2.*x(1)+2)^(1/3)-x(2);x(1)-x(2)]'),[1;1], optimset('display','iter'))
Norm of
First-order Trust-region
Iteration Func-count f(x)
step
optimality radius
1
3
0.34504
0.587
1
2
6
0.00208249
1
0.0315
1
3
9 3.06173e-008
0.0924342
0.000175
4
12 1.6094e-018 0.000314412
1.27e-009
Optimization terminated successfully:
First-order optimality is less than options.TolFun.
ans =
1.7693
1.7693

2.5
2.5

En forma grafica se puede identificar el punto, en dos dimensiones, de la siguiente manera:


>> ezplot('x1-x2',[0,2])
>> hold on
>> ezplot('(2*x1+2)^(1/3)-x2',[0,2])
>> grid

En cambio cuando se tienen mayores dimensiones, 4 o ms, la visualizacin grfica pierde utilidad y el
criterio para seleccionar el punto inicial parte de las caractersticas del problema que se intenta
resolver, algunas veces muy complejas, por lo que debe estudiarse las soluciones obtenidas en
relacin con el punto inicial adoptado, determinando su influencia, y con ello la estabilidad y
Condicionamiento del sistema.

Empleando roots
El comando roots calcula las races reales o complejas de polinomios. El formato de este comando se
ilustra en el siguiente esquema:

Mario R. ROSENBERGER

4 de 7

Clculo de races

roots ([ an an 1 an 2 .... a2 a1 a0 ])
coeficientes del
polinomio de grado N
Por ejemplo si se desea calcular las races del polinomio siguiente:

x3 2x 2 = 0
debera escribirse algo as:
>> roots ([1 0 -2 -2])
ans =
1.7693
-0.8846 + 0.5897i
-0.8846 - 0.5897i
El vector tambin puede asignarse a una variable, y luego invocarla con el comando roots, as:
>> p =[1 0 -2 -2]
p=
1 0 -2 -2
>> roots(p)
ans =
1.7693
-0.8846 + 0.5897i
-0.8846 - 0.5897i

Mario R. ROSENBERGER

5 de 7

Clculo de races
Aplicacin de clculo de races

k
A

B+C

Sistema de Ecuaciones:
F
F
dX A3 F1
= X A1 + 6 X A60 3 X A3 k X A3 (1)
dt
V1
V1
V1
F
F
dX B 3
=
+ 6 X B 60 3 X B 3 + k X A3 (2)
dt
V1
V1
F
dX C 3
=
3 X C 3 + k X A3 (3)
dt
V1
dM totales
= F3 (F4 + F5 + F6 ) (4)
dt
F
dX A6 F3
= X A3
6 X A6 (5)
dt
V2
V2

F F
dX B 6 F3
= X B 3
5 6 X B 6 (6)
dt
V2
V2 V2
F
dX C 6 F3
= X C 3 4 (7)
dt
V2
V2
F3 * X A3 = 0,6 * (F1 * X A1 + F6 * X A6 ) (8)

Nmero de incgnitas: 8 (F1, F6, F3, XA3, k, XB3, XC3, F4)


Datos:

9
9
9
9
9
9
9
9

V1 = 1 m3
V2 = 2 m3
= constante
Reaccin de primer orden
rA = -k*XA
rB = k*XA
rC = rB
XA1 = 1

Mario R. ROSENBERGER

6 de 7

Clculo de races

Clculo de las races


Crear en un archivo fun.m que permite resolver el sistema de 8 ecuaciones y 8 incgnitas a travs de
MATLAB.
function f=fun(x)
f=[x(1)/1000+x(2)*0.8/1000-x(3)*x(4)/1000-x(5)*x(4);
x(2)*0.2/1000-x(3)*x(6)/1000+x(5)*x(4);
-x(3)*x(7)/1000+x(5)*x(4);
x(3)-(x(8)+50+x(2));
x(3)*x(4)/2000-x(2)*0.8/2000;
x(3)*x(6)/2000-50/2000-x(2)*0.2/2000;
x(3)*x(7)/2000-x(8)/2000;
0.6*(x(1)+x(2)*0.8)-x(3)*x(4)];

Luego en la ventana de comando utilizamos la funcin fsolve, donde los valores entre corchetes son los
valores de las variables elegidos en forma conveniente para iniciar la iteracin.
options=(optimset('MaxFunEvals',10000,'Maxiter',1000,'TolFun',1e-10))

fsolve(@fun,[110,40,150,.5,.1,.3,.2,60],options)
Optimization terminated: first-order optimality is less than options.TolFun.
ans =
50.0000
93.7500 193.7500
0.3871
0.1292
0.3548
0.2581
50.0000

Mario R. ROSENBERGER

7 de 7

Das könnte Ihnen auch gefallen