Sunteți pe pagina 1din 19

5.

SISTEMA DE ECUACIONES LINEALES:


Los sistemas de ecuaciones lineales simultáneas consisten en un conjunto de dos o más
ecuaciones, con igual número de incógnitas, por ejemplo, para resolver un sistema de dos
incógnitas se requiere un sistema con dos ecuaciones linealmente independientes. Para
resolver un sistema de tres incógnitas se requiere un sistema con tres ecuaciones y así para
cualquier otro número de incógnitas.
En el siguiente ejemplo veremos un sistema de ecuaciones lineales de 3 incógnitas y se podrá
denotar usando notación de matrices.
x+2y+z= 8
2x+2y+z=9
3x+3y+5z=24
Se crea la matriz de los coeficientes de las incógnitas y la llamamos matriz A, en este caso será
una matriz de 3x3. Creamos un vector X, con las incógnitas de dimensión 3x1. Y finalmente el
vector B, con el valor de las constantes, que se encuentran en el lado derecho de las
ecuaciones, este vector también es de dimensión 3 x 1.
Ahora lo que queremos es resolver la ecuación A * X = B y obtener el valor del vector X.
A*X=B
A-1 *A * X = A-1 * B
Recordemos que A-1 *A = I (la matriz identidad) y que
A-1 * B = A\B es la división izquierda.
X = A\B
Así que la solución en Scilab de un sistema de ecuaciones lineales se reduce a crear la matriz A
de coeficientes y la matriz B de constantes y hacer la operación de división izquierda.

Para la resolución “rápida” de sistemas de ecuaciones lineales Scilab dispone del “operador” \ :

Si A es una matriz cuadrada nxn no singular y b es un vector columna de longitud n, entonces

-->A\b

Calcula la solución del sistema lineal de ecuaciones Ax=b. Para recordar la sintaxis, debe
asimilarse el operador \ con una “división por la izquierda”, es deir A\b es como A-1b.

Este operador debe ser usado con precaución: Si la matriz A es singular o mal condicionada, la
instrucción A\b emite un mensaje de advertencia y devuelve una solución del correspondiente
problema de mínimos cuadrados.

Si la matriz A no es cuadrada( teniendo el mismo número de líneas que el segundo miembro)


entonces la instrucción A\b devuelve directamente una solución de minimos cuadrados sin
advertir absolutamente nada. En el caso en que la solución de mínimos cuadrados no es única
(la matriz A no es de rango máximo), la solución que devuelve NO es la de norma mínima. Para
obtener esta última es mejor utilizar la instrucción siguiente, que utiliza la pseudo-inversa de la
matriz A:

-->pinv(A)*b

Los autovalores de una matriz se pueden calcular mediante la función spec:


-->spec(A)

Si se desean obtener, además, los vectores propios, hay que llamar a la función spec de la
siguiente forma:

--> [x,v]=spec(A)

Mediante la cual se obtienen: v: matriz cuadrada diagonal con los autovalores y x : matriz
cuadrada invertible cuya i-ésima columna es un vector propio asociado al i-esimo autovalor

Otras funciones de interés pueden ser:

det(A) Determinante de la matriz cuadrada A

rank(A) Rango de la matriz

xcond(A) Numero de condición de la matriz A en


norma 2: λmax/λmin (Si es muy grande, la
matriz está mal condicionada).

rcond(A) Inverso del numero de condición de la


matriz A en norma 1: ( Si es próximo a 1, la
matriz esta bien condicionada; si es
próximo a cero está mal condicionada).

inv(A) Inversa de la matriz A

lu(A) Factorización de LU de la matriz A

chol(A) Factorización de Cholesky de la matriz A

qr(A) Factorización QR de la matriz A


También se puede resolver utilizado la función linsolve la cual resuelve una ecuación de forma:
A*X + B = 0
donde:
X = linsolve(A,B)
Hay que tomar en consideración que el signo de los valores del vector B que se utiliza con la
función linsolve son el negativo de los valores del vector b utilizados cuando se utiliza la
división izquierda. La razón es que para resolver linsolve se está pasando el vector del lado
derecho de la ecuación al lado izquierdo de la ecuación.
A*X=b
A*X + (-b) = 0
A*X + B = 0
Donde B = -b

EJEMPLO

// ejem
B=-b
A=[1 -1 1; 2 1 0; 0 1 -2]
b=[3 -2 -1 ]
B=[-3 2 1]

linsolve(A,B)
ans =
0.75
-3.5
-1.25

6. POLINOMIOS:
un polinomio se puede definir de dos maneras por sus coeficientes o por sus raíces. Es
necesario además, indicar la variable simbólica del polinomio. La orden

p = poly([2 3 5 7], "x", "coeff")

define en la variable p el polinomio 2 + 3x + 5x^2 + 7x^3. La orden

q = poly([2 3 5], "x", "roots")

define en la variable q el polinomio -30+31x-10x^2+x^3, cuyas raíces son exactamente 2, 3 y 5.


Escribir q = poly([2 3 5], "x") produce exactamente el mismo resultado, o sea, "roots" es el tipo
de definición por defecto.

La doble comilla “ se puede reemplazar por la comilla sencilla '. Más aún, se puede reemplazar
'coeff' por 'c' y 'roots' por 'r'. Es lícito escribir

r = poly([6 7 8], 'y', 'c')

La función roots calcula las raíces de un polinomio, sean éstas reales o complejas. Por ejemplo

roots(p)
Con polinomios se pueden hacer sumas, multiplicaciones, restas, multiplicación por un
número. Deben ser polinomios en la misma variable. Por ejemplo:

v = p + q + p*q – 3.1*q

También se puede elevar un polinomio a una potencia, por ejemplo:

r = p^3

La función coeff tiene dos parámetros, el primero es el polinomio y el segundo la potencia. La


siguiente orden asigna a la variable k el valor -10, el coeficiente de x2 en el polinomio q.

k = coeff(q,2)

si se utiliza simplemente:

c = coeff(q)

se obtendrán todos los coeficientes. La variable c será un vector (ver sección siguiente sobre
matrices y vectores).

Si se utiliza p = poly(a,'x'), donde a es una matriz cuadrada, se obtiene el polinomio


característico de la matriz a.

Para evaluar un polinomio p en un valor t se usa

horner(p,t)

Por ejemplo, horner(q,1) dará como resultado -8. Si q es un polinomio, es lícito utilizar la orden

r = horner(p.q)

para obtener p(q(x)).

EJEMPLO

// ejem:

--> a=[1,2,3];

--> p=poly(a, "x")

p =

2 3

-6 +11x -6x +x

--> roots(p)

ans =

3.
2.

1.

--> r=poly(a, "x", "coeff")

r =

1 +2x +3x

--> k=horner(r,2)

k =

17.

Dados los polinomios P(x)=2x4-8x3+3x2+5 y Q(x)=x2+2x-3, Calcula -3P(x)+5Q(x), P(x).Q(x), Q5(x) y


P(x)/Q(x).

EJEMPLO

// ejem:

-->P=poly([5,0,3,-8,2],"x","coeff"), Q=poly([-3,2,1],"x","coeff")
P =

2 3 4
5 + 3x - 8x + 2x
Q =

2
- 3 + 2x + x

-->-3*P+5*Q
ans =

2 3 4
- 30 + 10x - 4x + 24x - 6x

-->P*Q
ans =
2 3 4 5 6
- 15 + 10x - 4x + 30x - 19x - 4x + 2x

-->Q^5
ans =
2 3 4 5 6 7 8 9 10
- 243 + 810x - 675x - 360x + 570x + 92x - 190x - 40x + 25x + 10x + x

-->[R,C]=pdiv(P,Q)
C =

2
33 - 12x + 2x
R =

104 - 102x

-->Q*C+R
ans =

2 3 4
5 + 3x - 8x + 2x

EJERCICIO

Sea el polinomio f(x)=x5 -12.1x4+40.59x3-17.015x2-71.95x+35.88

a) Calcular f(9)

--> p=[35.88,-75.95,-17.015,40.59,-12.1,1];
--> f=poly(p, "x", "coeff")

f =

2 3 4 5

35.88 -75.95x -17.015x +40.59x -12.1x +x

--> horner(f,9)
ans =

7225.125

b) Representar gráficamente la función f(x) en el dominio -1.5<=x<=6.7

--> x=[-1.5:0.1:6.7];

--> y=horner(f,x);

--> plot2d(x,y)

c) Raíces del polinomio:

--> roots(f)

ans =

6.5515008

3.7686049

2.5288706

-1.2200014

0.4710251
7. RESOLUCION DE ECUACIONES NO LINEALES:

Para resolver (sistemas de ecuaciones no lineales)

f(x)=0, x vRn , f : Rn Rn

scilab dispone de la función fsolve, cuya utilización mas sencilla es:

-->x=fsolve(x0, fun)

-->[x,va]=fsolve(x0, fun)

Donde

 fun es el nombre de la función Scilab que calcula f(x).


debe responder a la forma: [y]=fun(x)
 x0 es el valor inicial de x para comezar las iteraciones.
 x es la solución del sistema.
 val (opcional) es el valor de f en la solución

EJEMPLO

// ejem:

--> deff('y=f(x)' , 'y=2*sin(x+2)+3*x-1')

--> fsolve(0,f)

ans =

-0.3300595

EJEMPLO

Calcular la única solución del siguiente sistema de ecuaciones en el primer cuadrante:

X3+y3=3 x=(x1, x2), x13+x23-3=0

f(x)=

x12+x22-2x2=0

X2+y2-2y=0

// ejem:

--> deff("[y]=g(x)","y=[x(1)^3+x(2)^3-3,x(1)^2+x(2)^2-2*x(2)]");

--> [x,v]=fsolve([1,1],g)

v =
0. 0.

x =

0.9587068 1.2843962

Si se conoce la derivada de la función f(x) se puede proporcionar en la llamada a fsolve:

-->fsolve(x0,fun,jacob)

Donde:

 jacob es el nombre de la función Scilab que calcula la matriz jacobiana de f(x).


 argumentos [dfx]=jacob(x)
8. REPRESENTACIONES GRAFICAS CON SCILAB

Estas notas pretenden expones algunos de los comandos más básicos de que
dispone Scilab para generar gráficos. En principio se exponen,
exclusivamente, los co mandos de dibujo y po steriormente se explicará cómo
modificar los distintos( y numerosos) parám etr os que determinan sus
características .

8.1 Curvas planas


El comando básico de Scilab para dibujar curvas planas es plot2d

plot2d

Dados dos vectores (VER (*))


x=[x1,x2,………………xn]e y=[y1,y2,…………yn]
-->plot2d(x,y)
Dibuja la curva que pasa por los puntos
(x1,y1)……(xn,yn)
Ejemplo:dibujar, en [ -5,5]
𝑥
𝑦 = 2𝑠𝑒𝑛(2)cos(3x)
x=linspace( -5,5)' ;
y=2*sin(x/2).*cos(3*x); // (VER (**))
plot2d(x,y)
También podría po nerse directamente:
x=linspace( -5,5)’;
plot2d(x,2*sin(x/2).*cos(3*x) )

(*)Para dibujar una única curva, es diferente que los vectores x e y sean filas
columnas sin embargo , cuando se desean dibujar varias curvas juntas no lo es. Por
ellos, usaremos siempre vectores -columna.
(**) Obsérvese que, puesto que se calculan todas las ordenadas “de una sola vez”,
es preciso “vectorizar” la escritura de la formula, para que, al ser el argumento x
un vector, la formula devuelva un vector de las mismas dimensiones calculando
elemento a elemento.

Si se hubiera escrito y=2sin(x/2)*cos(3*x) se hubiera o btenido un error, ya que x


es un vector columna de longitud 100 (i.e. una matriz 100x1), luego también
sin(x/2) y cos(3*x) son matrices 100x1 y la multiplicació n (matricial) sin
(x/2)*cos(3*x)carece de sentido .

-->pl ot2d(y)
Dibuja la curva que pasa por los puntos
(1,y1)…….(n,yn)
Ejemplo:

x=linspace( -5,5)’;
y=2*sin(x/2).*cos(3*x);
plot2d(y)

-->pl ot2d(x,y)

Siendo x un vector e y una matriz dibuja una


curva por cada columna de y
x=linspace( -5,5)’;
y=2*sin(x/2).*cos(3*x);
z=2*sin(x);
w=[y,z];
plot2d(x,w)
- - >p l ot2d (x , y)
si en d o x e y matr ic e s d e la s mi s ma s d i m en si on e s,
d ib u ja u n a cu r v a p or ca d a p ar (c olu mn a d e x,
colu mn a d e y)
E je mp lo :d ib u jar en [ - 2 p i, 2 p i ] la g rá fi ca d e
fu n ción :
𝟐𝒔𝒆𝒏(𝒙), 𝒔𝒊 𝒙 ≤ 𝟎
𝒚={ 𝒙 }
𝟐𝒔𝒆𝒏 ( ) 𝒄𝒐𝒔(𝟑𝒙), 𝒔𝒊 𝒙 > 𝟎
𝟐
x1 =l in sp a c e( - 2* %p i, 0)’ ;
x2 =l in sp a c e( 0,2 * %p i) ’;
y1= 2 * sin (x 1 );
y2= 2 * sin (x 2 /2 ). *c o s( 3 *x 2) ;
p lot 2d ( [ x1, x2 ], [y 1,y 2 ])

Observaciones:

 Obsérvese que, por defecto, graficas sucesiv as se superponen. Para


evitar, hay que borrar la grafica anterior antes de dibujar de nuevo.
Ello puede hacerse o bien cerrando la ventana grafica o bien borrando
su contenido desde la barra de menús ( Edit Erase Figure) o mediante
un comando ( xbasc()).
 Cuando se borra el co ntenido de la ventana grafica, pero no se cierra,
se conservan sus características. Si por ejemp lo, se ha
modificado la carta de colores de esa ventana, se seguirá conservando
la carta al borrarla, pero no al cerrarla.
 Cuando plot2d dibuja varias curvas, les asigna distintos colores. El
orden de los colores asignados viene predeterminado por la carta de
colores activa.
pol arpl ot
Plot2d2, plot2d3, plot2d4

-->polarplot(theta,rho)
siendo theta y rho vectores de la misma
dimensió n, dibuja la curva que pasa por los
puntos de coordenadas polares (theta_1,
rho_1)…… ..(theta_n, rho_n)
Ejemplo: ρ = sen(2θ)cos(3θ)
theta=linspace(0,2*%pi)’;
rho=sin(2*theta).*cos(3*theta);
polarplot(theta,rho)

Esta funció n se puede utilizar también con o tros argumentos, como plot2d y su funcionamiento es
similar.
-->plot2d2(x,y)
es similar a plot2d, pero dibuja una función constante a
trozos(escalonada)

-->plot2d3(x,y)
es similar a plot2d, pero dibuja función utilizando líneas
verticales

-->plod2d4(x,y)
es similar a plot, pero dibuja una curva utilizando puntas de
flecha(por ejemplo para señala la dirección de una
trayectoria)

fplot2d

-->flpot2d
donde x es un vector y f es el nombre de una función Scilab,
dibuja la curva que pasa por los puntos (xi,f(xi)).La función
debe responder a la forma [y]=f(x).

Ejemplo:
x=linspace(-%pi,%pi);
exec(“gf1.sci”,-1)
fplot2d(x,gf1)

FICHERO gf1.sci
Param3d

Function [y]=gf1(x) Puede resultar interesante observa cómo se “vectoriza” el


y= ones(x); cálculo de esta función:
y(x>=0)= cos(x(x>=0)); 1.La orden y=ones(x) crea un vector de unos, con las
endfunction mismas dimensiones que x: así y será fila o columna (u otra
matriz) según lo sea x
2.La operación de comparación x>=0 produce un vector
booleano de las mismas dimensiones que x. Así, y(>=0)
extrae de y solo aquellas componentes tales que la
correspondiente componente del vector x es mayor o igual
que cero

Otra posibilidad, obviamente, es dar valor a las


componentes de y una a una, utilizando un bucle. Pero esta
opción llevaría bastante tiempo de calculo

Paramfplot2d: animaciones

--> paramfplot2d(f,x,t)
donde f es el nombre de una función Scilab [y]=f(x,t), y x y t
son vectores, dibuja una animación de la función f(x,t), es
decir, dibuja sucesivamente f(x,t1), f(x,t2),…… f(x,tn).
Ejemplo:

X=linspace(-2*%pi,2*%pi);
t=linspace(-1,1,60);
paramfplot2d(gfun2,x,t)

FICHERO gfun2.sci

Function[y]=gfun2(x,t)
y=zeros(x);
b=-%pi<=x & x<=%pi;
y(b)=-t*sin(x(b));
endfunction

10.2 Curvas en el espacio


--> param3d(x,y,z)
donde x, y , z son tres vectores de la misma dimensión
Ejemplo:
t=linspace(0,8*%pi);
param3d(t.*sin(t),t.*cos(t),3*t)

Param3d1

--> param3d1(x,y,z)
es similar a param3d, pero permite dibujar varias
curvas,Aquí x, y , z son tres matrices de la misma
dimensión cuyas columnas determinan las distintas
curvas.
--> param3d1(x,y,list(z,colors))
donde colors es un vector de números enteros, dibuja la
i-esima curva del color definido por el i-esimo elemento
de colors.
Ejemplo:
t=linspace(0,5*%pi)';
x=[zeros(t),12*sin(2*t)];
y=[10*cos(t),12*cos(2*t)];
z=[10*sin(t),12*sin(t)];
param3d1(x,y,list(z,[6,2]))
EJERCICIOS DE POLINOMIOS:

Temperatura (°C) Presion de vapor (torr)


0 4.6
5 6.5
10 9.2
15 12.8
16 13.6
17 14.5
18 15.5
19 16.5
20 17.5
21 18.6
22 19.8
23 21.2
24 22.4
25 23.8
26 25.2
27 26.7
28 28.3
29 30
30 31.8
40 55.3
50 92.5
60 149.4
70 233.7
80 355.1
90 525.8
100 760
110 1074.6

a) Representación grafica

b) Ajustes del polinomio (grado)

c) Interpolación para 75

d) Extrapolación para 120


EJERCICIOS DE GRAFICAS:

1) en la siguiente tabla se tiene los datos correspondientes a las ventas de una empresa X
desde el año 2012 a 2018. Haga una representación grafica simple de la tendencia.
Año 2012 2013 2014 2015 2016 2017 2018
Ventas(millones) 8 12 20 22 18 24 27

Codificación:

x=[2012 2013 2014 2015 2016 2017 2018];


y=[8 12 20 22 18 24 27];
plot2d(x,y)

2) Dada la función y=3x3-26x+6. Dibujar dicha f(x) asi como su primera y segunda derivada, en
el intervalo -2<=x<=4. Todas las funciones deben representarse juntasen el mismo grafico.

x=linspace(-2,4)';
y=3*x^3-26*x+6;
z=9*x^2-26;
w=18*x;
plot2d(x,y), plot2d(x,z), plot2d(x,w)

3) Dada la función y=2(-0.2x+10). Grafique utilizando disntinas combinaciones de escalas


logarítmicas y lineales en el intervalo 0.1<=x<=60
Escala lineal-lineal:
x=linspace(0.1,6)';
y=2^(-0.2*x+10);
plot2d(x,y,logflag="nn")
Escala logarítmica-lineal:
x=linspace(0.1,6)';
y=2^(-0.2*x+10);
plot2d(x,y,logflag="ln")
Escala lineal- logaritmica
x=linspace(0.1,6)';
y=2^(-0.2*x+10);
plot2d(x,y,logflag="nl")
Escala logarítmica-logaritmica
x=linspace(0.1,6)';
y=2^(-0.2*x+10);
plot2d(x,y,logflag="ll")

4) Para el ejercicio 1 presente una gráfica de barras verticales, otra de barras horizontales y
una gráfica de líneas verticales(grafico detallado).

GRAFICA DE BARRAS VERTICAL


x=[2012 2013 2014 2015 2016 2017 2018];
y=[8 12 20 22 18 24 27];
bar(x,y)
GRAFICA DE BARRAS HORIZONTAL
x=[2012 2013 2014 2015 2016 2017 2018];
y=[8 12 20 22 18 24 27];
barh(x,y)
GRAFICA DE LINEAS VERTICALES
x=[2012 2013 2014 2015 2016 2017 2018];
y=[8 12 20 22 18 24 27];
plot2d3(x,y)

5) En la siguiente tabla se muestra las notas (en letras:A,B,C,D y E) obtenidas por los alumnos
de una promoción (69)
Utilizar estos datos para crear un gráfico circular.

Notas A B C D E
Numero de 11 18 26 9 5
alumnos

5.1)
x=[11 18 26 9 5], sp=[0 0 0 0 0], txt=["A","B","C","D","E"]
scf(0);
pie([11 18 26 9 5],[0 0 0 0 0],["A","B","C","D","E"]);

5.2)
x=[11 18 26 9 5]
pie(x), legend("A","B","C","D","E")

6) Los siguientes datos representan las notas(sobre 100) obtenidos por los alumnos de una
promoción (30);semestre 2018-2:
58,73,73,53,50,48,56,3,73,69,69,63,74,82,84,91,93,89,91,80,59,69,56,64,63,66,64,74,63,69
Presentar un histograma que represente dichos datos por defecto(tamaño 10).

x=[58 73 73 53 50 48 56 73 73 69 69 63 74 82 84 91 93 89 91 80 59 69 56 64 63 66 64 74 63 69]
histplot(30, x, style=10)

S-ar putea să vă placă și