Mostrando entradas con la etiqueta SciLab. Mostrar todas las entradas
Mostrando entradas con la etiqueta SciLab. Mostrar todas las entradas

miércoles, 2 de agosto de 2023

Polinomios con SciLab

-->help poly
// (1) Especificando un polinomio

// el primer argumento es un vector con las raíces del polinomio
// el segundo argumento es la etiqueta que desgna el nombre de la variable independiente
// el tercer argument especifica que se definie el polinomio dando sus raíces
-->poly([1,2],'x',"r")
ans =

2
2 - 3x + x




// el primer argumento es un vector con los coeficientes del polinomio
// el segundo argumento es la etiqueta que desgna el nombre de la variable independiente
// el tercer argument especifica que se definie el polinomio dando el valor de sus coeficientes

-->poly([4,5,6],'x',"c")
ans =

2
4 + 5x + 6x


// ( 2) Evaluación del valor de un polinomio para un valor determinado de la variable
// mediante la regla de HORNER
-->P=poly([4,5,6],'x',"c")
P =

2
4 + 5x + 6x

// ¿ P(1) ?
-->horner(P,1)
ans =

15.

Obtener ayuda al trabajar con SciLab

Funciones para obtener ayuda de los comandos y funciones predefinidas
Ejemplos
--> apropos triu
--> help triu
--> help lu

Visualización de variables activas y borrado de las mismas en SciLab

Visualizar las variables activas
--> who

Borrar una cierta variable x
--> clear x

Factorización LU con SciLab

Quereremos resolver el sistema de ecuaciones
$$\left\{\begin{matrix}x+y+z=3\\2x-y+z=2\\x+2y-2z=1\end{matrix}\right.$$

por lo que podemos expresarlo en forma matricial: $AX=b$ siendo $A$ la matriz de los coeficientes del sistema y $b$ la matriz columna de los términos independientes

Vamos a utilizar el método de factorizació de la matriz $A$ como $LU$, de forma que $AX=b \Leftrightarrow LUX=b$, con lo cual ( una vez obtenida la f. LU ) procederemos en dos etapas:
i) $LY=b \Rightarrow Y=L^{-1}\,B$ ( eliminación progresiva )
ii) $UX=Y \Rightarrow X=U^{-1}\,Y$ ( sustitución retrógrada )

Antes que nada, debemos factorizar
Factorización LU
Nota: L es una matriz triangular inferior y U una matriz triangular superior ( E es la matriz de permutación )
-->A
A =

1. 1. 1.
2. - 1. 1.
1. 2. - 2.

-->[L,U,E]=lu(A)
E =

0. 1. 0.
0. 0. 1.
1. 0. 0.
U =

2. - 1. 1.
0. 2.5 - 2.5
0. 0. 2.
L =

1. 0. 0.
0.5 1. 0.
0.5 0.6 1.

Comprobación LU=A ?
-->L*U
ans =

2. - 1. 1.
1. 2. - 2.
1. 1. 1.
Cuidado, se ha utilizado el método de pivotamiento parcial, por lo que el orden de las filas se ha cambiado, de modo que ahora el sistema a resolver es
$$\left\{\begin{matrix}2x-y+z=2\\x+2y-2z=1\\ x+y+z=3\end{matrix}\right.$$ y, por tanto, $$b=\begin{pmatrix}2\\1\\3\end{pmatrix}$$

Procedamos ahora con los dos pasos anunciados ( eliminación progresiva seguida de sustitución retrógrada ):

-->b=[2;1;3]
b =

2.
1.
3.

-->Y=inv(L)*b
Y =

2.
0.
2.

-->X=inv(U)*Y
X =

1.
1.
1.
que es la solución del sistema de ecuaciones


------------------------
Cuidado:
las funciones tril(A) y triu(A) también dan matrices triangulares inferiores y superiores, respectivamente, pero no son las que cumplen A=LU

Factorización QR en SciLab

Factorización QR
Nota: Q es una matriz ortogonal y R una matriz triangular superior

-->A=[1,2;3,4]
A =

1. 2.
3. 4.
-->[Q,R]=qr(A)
R =

- 3.1622777 - 4.4271887
0. - 0.6324555
Q =

- 0.3162278 - 0.9486833
- 0.9486833 0.3162278

-->Q*R
ans =

1. 2.
3. 4.

Funciones en SciLab

Podemos editar una función en el propio panel de comandos, sin necesidad de almacenarlo en un fichero de texto .sci y cargarlo a continuación. Por ejemplo:

-->function f=cuadxy(x,y)
-->f=x**2+y**2;
-->endfunction

Para hacer actuar la función que acabamos de definir, para calcular, pongamos que 2^3, escribiremos:
-->cuadxy(2,3)
ans =

13.

Ejemplo

// --------------------------------------------------------------------
// Comprobación numérica de
// $\lim_{x \rightarrow 0}\,\dfrac{\sin x}{x}=1$
//
//
// Cargar el fichero ( al que se refiere esta imagen )
// en SciLab desde la consola del programa:
// exec('C:\...\mifuncion.sci')
// y, a continuación, para ejecutar la función invocar
// el nombre de la función con los argumentos de entrada
// y de salida
// Ejemplo con un paso incremental de 0.001
// teclear a continuación de "-->":
// [vi,vd]=limites_i_d(0.001)
//
// Joan Aranes Clua
// 2015
// --------------------------------------------------------------------
// valor avanzado de $\lim_{x \rightarrow 0^{+}}\,\dfrac{\sin x}{x}$
function [vi,vd]=limites_i_d(incremento)
disp("límites por la derecha ( vd ) y por la izquierda (vi)")
vd=0;
incremento_neg=-1*incremento
for i=1:incremento_neg:0.0000001
vd=sin(i)/i;
//disp(vd);
end
//
// valor avanzado de $\lim_{x \rightarrow 0^{-}}\,\dfrac{\sin x}{x}$
//vi=0
for j=-1:incremento:-0.0000001
vi=sin(j)/j;
//disp(vi);
end
endfunction
$\diamond$