Вы находитесь на странице: 1из 12

□ INGENIERÍA FUENTE PEN

Un socio profesional SCILAB

abier anil
to lo
energizado por

Resolución de sistemas no lineales en Scilab


ingenieros de todos los días se encuentran con problemas no lineales de estado estable en
sus aplicaciones a casos reales.
En este tutorial se muestra cómo los sistemas no lineales pueden resolverse fácilmente
mediante Scilab.

Nivel

Este trabajo es bajo licencia 3.0 Licencia Creative Commons Reconocimiento-No comercial-Sin obras
derivadas.

www.openeering.com
Paso 1: Propósito de este tutorial
Es muy común en el área de ingeniería para resolver problemas no lineales
de estado estacionario.

Por lo general, dos tipos de sistemas no lineales surgen:


(sistemas con n ecuaciones lineales con n incógnitas)
• Los sistemas con n ecuaciones lineales con n incógnitas.

• Los sistemas con n ecuaciones no lineales en m <n desconocidos

Si el lector está interesado en la determinación de los ceros de polinomios,


por favor, consulte la ayuda de los principales comandos de Scilab para la
(sistemas con n ecuaciones no lineales en m <n incógnitas)
gestión de polinomios (por ejemplo, raíces, poli, y Horner).

Paso 2: Hoja de Ruta


En la primera parte de este tutorial se muestra cómo utilizar el comando
fsolve de ecuaciones y sistemas de ecuaciones. El comando se utiliza para
la resolución de sistemas con exactamente el mismo número de descripciones Pasos
ecuaciones e incógnitas. fsolve 3-7
La segunda parte se centra en el uso de la lsqrsolve comando. En esta lsqrsolve 8-10
última parte el lector puede ver cómo resolver sistemas con un menor Ejercicio 11
Observaciones finales y 12-13
número de incógnitas que ecuaciones. referencias
La función “fsolve" resuelve sistemas de ecuaciones no lineales n y n Scilab sintaxis para fsolve:
incógnitas.

Las características del algoritmo son: argumentos:


• La función fsolve se basa en la idea del método de Newton; • x0: vector real (valor inicial de argumentos de la función);
• Es un método iterativo, es decir, se parte de un valor de • fct: externa (es decir, la función o de la lista o de cadena);
aproximación inicial x0 y luego se realiza una iteración, la • fjac: externa (es decir, la función o de la lista o de cadena);
• tol: escalar real, la tolerancia de precisión: la terminación se
obtención de x1, y así sucesivamente; produce cuando el algoritmo calcula que el error relativo entre
• Sólo una solución se encuentra por el comando y esta solución x y la solución es a lo sumo tol. (Tol = ld-l0 es el valor
depende de la aproximación inicial x0 (cuenca de atracción). predeterminado);
• x: Vector real (valor final del argumento de la función, que se estima
cero);
• v: vector real (valor de la función en x);
• Info: indicador de terminación:
- 0: parámetros de entrada inadecuada;
- 1: algoritmo estima que el error relativo entre x y la solución
es como máximo tol;
- 2: número de llamadas a FCT alcanzado;
- 3: tol es demasiado pequeño. No mejora adicional en la
solución aproximada x es posible;
- 4: iteración no está haciendo un buen progreso.

Para ejemplos y más detalles ver:


http://help.scilab.Org/docs/5.3.0/en EE.UU. / fsolve.html
En este ejemplo queremos resolver la siguiente
función;

o, lo que es equivalente, para encontrar el cero de

// Ejemplo 1
deff ( 'res = fct 1 (x)', 'res = cos (x) -x')
La representación gráfica se da en la siguiente figura. x0 = 0.
xsol = fsolve (x0, fct 1)

x = linspace (-2,2,51)
FCOS = cos (x)
fx = x
SCF (1)
CLF (1)
plot (x, fcos, 'r-');
p = get ( "hdl"); p.children.thickness = 3; plot (x, fx,
'B-');
p = get ( "hdl"); p.children.thickness = 3;
(Codificación del
ejemplo)
La solución obtenida es: xsol = 0,7390851
// Ejemplo 2
En este ejemplo se resuelve el siguiente problema de 2 dimensiones
deff ( 'res = fct_2 (x) , [ 'Res (1) = x (2) -
(X (1) .A2 + 1) '; 'Res (2) = x (1) - (2 * x (2) -x (2)
.A2) / 3'])
SCF
(2)
CLF
(2)
x1 = linspace (-3,3,101)
La representación gráfica se da en la siguiente figura. La figura revela la y1 = x1.A2 + 1
presencia de dos soluciones. Dependiendo del punto inicial, el fsolve
función puede llegar a la primera o la segunda solución según lo informado y2 = linspace (-3,5,51)
x2 = (2 * y2-y2.a2) / 3
por el ejemplo.
parcela (x1, y1, 'r-');
p = get ( "hdl"); p.children.thickness = 3;
parcela (x2, y2, 'B-');

p = get ( "hdl"); p.children.thickness = 3;

x0 = [1; 0]
xsol1 = fsolve (x0,
fct_2) res1 = fct_2
(xsol1)
(Codificación del ejemplo)
x0 = [-3; 8]
Las soluciones obtenidas son
xsol2 = fsolve (x0, fct_2)
• Xteórico = [0.3294085; 1,10851]
res2 = fct 2 (xsol2) ___________________________________
• xsol2 = [- 1.5396133; 3.3704093]

con
• res1 = 10A (-14) * [0,1332268; 0.0610623]
• res2 = 10A (-13) * [- 0.3375078; - 0.1310063]
Paso 6: ejemplo fsolve con solucionador incrustado
En este ejemplo se combinan el uso de la función fsolve para resolver un
problema de contorno utilizando el método de toma.
La idea es la de insertar la ecuación diferencial (ODE) solver (método de
disparo) ordinario dentro de la función fsolve la creación de una función
apropiada para ser resueltos. Este enfoque es bastante general ya que el
solucionador ODE puede ser visto como una función de la caja negro
Llamando a la función
externa f

El problema en cuestión es la siguiente:

Este problema de contorno se puede reducir a la siguiente problema inicial solucionador no Caja negra
ecuación diferencial lineal función

donde una de la condición inicial en desconocido, es decir,

Volviendo evaluación externa


Para utilizar la función fsolve necesitamos introducir la función para la que (residual)
queremos encontrar el cero. En este caso, definimos la función como
(Ejemplo de negro-box)

donde w1 (1; s) es la solución del problema de valor sujeto límite a la


condición inicial que depende.
El código Scilab se informó a la derecha. En las siguientes figuras se
presenta la solución inicial y la solución óptima. // Ejemplo 3
función wdot = wsystem (t, W)
wdot (1) = W (2)
wdot (2) = 3/2 * w (1)
.A2 endfunctions = -1 w0 =
[4; s] t0 = 0
t = linspace (0,1)
// winit = oda (w0, t0, t, wsystem);
// plot (t, winit)
(Solución inicial con s = 1 y la solución óptima con s = - 7,999999 7)
deff ( 'res = fct_3 (s) , [ 'W0 = [4; s];', "w =
oda (w0, t0, t, wsystem);', 'Res = w (1,
$) - 1']) s = -1
SSOL = fsolve (s, fct_3)
Cambiar el punto s inicial para s = - 3 0 es posible encontrar una
solución diferente. // solución de
cómputo w0 = [4;
SSOL] t0 = 0
t = linspace (0,1)
Wsol = oda (w0, t0, t, wsystem);
trama (t, Wsol)
p = get ( "hdl"); p.children.thickness = 3

(Código de
Ejemplo)
(Solución inicial con s = - 3 0 y solución óptima con s = - 3
5,858547)
Paso 8: ajuste no lineal de mínimos cuadrados
No lineal de mínimos cuadrados es una técnica numérica utilizada cuando
tenemos n ecuaciones lineales en incógnitas. Estasignifica que, en
estos casos,
tenemos más ecuaciones que incógnitas. Este caso es muy común e
interesante y que surge, por ejemplo, cuando queremos ajustar los datos
con no lineal (y no polinómicas) ecuaciones.

El problema matemático corresponde a encontrar un minimizador local x *

de la siguiente ecuación

donde n es el número de puntos, y fi representa el residual entre el punto


de datos i-ésimo medida dada y el modelo de interpolación (datos
estimada). La reducción de la suma total de los residuos corresponde a
encontrar los parámetros óptimos para nuestro modelo apropiado con
nuestros datos dados.
Por ejemplo, esto es particularmente útil para interpolaciones de datos
experimentales.
Scilab sintaxis para
Isqrsolve:
En Scilab se obtiene la solución de problemas en la que tenemos más
ecuaciones que incógnitas utilizando la función Isqrsolve.

argumentos:
Las características del algoritmo son:
• x0: vector real de longitud n (valor inicial del argumento de la
• La función Isqrsolve se basa en el algoritmo de Levenberg-
función);
Marquardt;
• fct: externa (es decir, la función o de la lista o de cadena);
• Si no se proporciona la jacobiana se calcula una aproximación de • m: número entero, el número de funciones. m debe ser mayor que
diferencias orientadas hacia; o igual a n;
• fjac: externa (es decir, la función o de la lista o de cadena);
• Es un método iterativo, es decir, se parte de un valor de
• detener: Vector opcional
aproximación inicial x0 y luego se realiza una iteración obtener [Ftol, xtol, GTOL, maxfev, epsfcn, factor de] el valor
x1, y así sucesivamente; predeterminado es [1.d-8,1.d-8,1.d-5,1000,0,100]
• Sólo uno se encuentra una solución y esta solución depende de • diag: es una matriz de longitud n. diag debe contener entradas
la aproximación inicial x0 (cuenca de atracción). positivas que sirven como factores multiplicativos escala de
las variables;
• x: vector real (estimación final de la solución vector);
• v: vector real (valor de fct (x));
• Info: indicador de terminación
Para ejemplos y más detalles ver:
http://help.scilab.Org/docs/5.3.3/en EE.UU. / lsqrsolve.html
Paso 10: ejemplo Isqrsolve
En este ejemplo queremos estimar el parámetro de la siguiente función de
Gauss (fgauss)

sobre un conjunto de 100 puntos de datos. Los puntos de datos se generan


a partir de una distribución de Gauss, la adición de un ruido uniforme. El
resultado obtenido se recogen en la siguiente figura.
Tendremos una ecuación para cualquier punto, por lo que el número total
de ecuaciones es igual a 100. En nuestro código de la función de error se
denomina fgausseq.

(Solución óptima y datos dados)


Modificar el ejemplo anterior
teniendo en cuenta la siguiente
distribución (distribución t de
Student)

En este caso, estamos interesados en la estimación de V a


partir de datos medidos.

Comparar t de Student y la distribución de


Gauss. (Distribución inicial)

Hints: La función gamma en Scilab es gamma.

(Las comparaciones entre dos distribuciones


diferentes)
1. Scilab Página Web: www.scilab.org
Paso 12: Observaciones y referencias finales
2. Openeering: www.openeering.com
En este tutorial hemos mostrado cómo resolver problemas no lineales en
3.
Scilab. Describimos el uso tanto de las funciones Isqrsolve fsolve y.
4.
En la columna de la derecha se puede encontrar una lista de referencias 5.
interesantes para estudios posteriores.

Paso 13: El contenido del software

Para informar de errores o sugerir mejoras póngase en contacto con el


equipo en Openeering www.openeering.com.

Gracias por leer,

Manolo Venturin y Silvia Polos

Вам также может понравиться