0% encontró este documento útil (0 votos)
34 vistas18 páginas

Informe 2

Este documento presenta un algoritmo programado en Pascal para resolver sistemas de ecuaciones lineales por el método de Jacobi. El algoritmo toma como entrada el número de ecuaciones, los valores de la matriz y el vector independiente, y devuelve como salida el número de iteraciones, el error absoluto y la solución. El objetivo es agilizar el proceso de resolución de sistemas de ecuaciones para estudiantes usando tecnología.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
34 vistas18 páginas

Informe 2

Este documento presenta un algoritmo programado en Pascal para resolver sistemas de ecuaciones lineales por el método de Jacobi. El algoritmo toma como entrada el número de ecuaciones, los valores de la matriz y el vector independiente, y devuelve como salida el número de iteraciones, el error absoluto y la solución. El objetivo es agilizar el proceso de resolución de sistemas de ecuaciones para estudiantes usando tecnología.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

REPÚBLICA BOLIVARIANA DE VENEZUELA

MINISTERIO DEL PODER POPULAR PARA LA EDUCACIÓN SUPERIOR

UNIVERSIDAD NACIONAL EXPERIMENTAL

POLITÉCNICA DE LA FUERZA ARMADA NACIONAL BOLIVARIANA

UNEFA-NÚCLEO APURE

PROGRAMAR EN PASCAL UN ALGORITMO


QUE NOS PERMITA LA RESOLUCIÓN DE UN
SISTEMA DE ECUACIÓN POR EL MÉTODO
DE JACOBI

AUTORES:

INGENIERO: MAYERLIN PEREZ

RICHARD DELGADO CI: 28.071.433

YOVANNY RODRIGUEZ

CI: 30.938.839

IVAN SIMOZA

CI: 25.420.947

JOSE PRIETO

CI: 28.274.437

GREGORIO PRIETO

C.I: 28.274.439

SAN FERNANDO DE APURE 2023


Introducción

El objetivo principal del presente trabajo es la aplicación de las TIC para


diseñar, programar y ejecutar un algoritmo en pascal que nos permita la resolución
de sistemas de ecuaciones por el método de jacobi. La idea parte de la necesidad
de agilizar los procesos de resolución de los sistemas de ecuaciones, ayudando
así a los y las estudiantes a examinar ejemplos o representaciones con rapidez de
tal manera que les permita fácilmente realizar exploraciones y conjeturas.

Con el uso de pascal estaremos dándole solución a los sistemas de


ecuaciones, para ello debemos realizar una serie de pasos para poder llegar a la
solución de la problemática planteada. Comenzando por darle un nombre al
archivo y comenzar la estructura del programa, donde haremos la declaración de
constantes, type y variables que nos permitan darle solución a ecuaciones
lineales. Debemos darle la instrucción al programa de la cantidad de ecuaciones
con la que cuenta el ejercicio en cuestión, una vez sepamos el número de
ecuaciones, debemos también introducir los valores de cada una de las variables,
reconocer la posición de cada una de las ecuaciones y los valores de la matriz que
el programa ira reconociendo de acuerdo a la posición de cada una, luego de darle
valor a las variables debemos darle el valor al termino independiente, al tener los
valores anteriores, se solicita los valores del vector Inicial. Si el programa
reconoce la convergencia de los vectores se realiza la operación y nos arroja los
resultados del número de iteraciones que tiene el ejercicio, el valor de error
absoluto y la solución por jacobi, si por el contrario no hay convergencia en los
vectores, el programa nos da el mensaje de Sin Convergencia.

Los estudiantes de Ingeniería Mecánica de la Universidad Nacional


Experimental Politécnica De La Fuerza Armada Nacional Bolivariana nos hemos
propuesto el reto de brindar al lector los más sencillos, prácticos y efectivos pasos
para programar este algoritmo considerando que será de ayuda para resolución de
ecuaciones por el método de jacobi tanto para nosotros como para generaciones
futuras.
Planteamiento del problema

Las Tecnologías de la Información y Comunicación son actualmente uno de


los sectores más relevantes en la actualidad, permiten una comunicación eficiente,
rápida y clara entre diversos miembros de una misma organización, favoreciendo
sectores vitales como la educación, la salud y las finanzas.

Pascal es un lenguaje de programación creado entre los años 1968 y 1969,


y publicado en 1970. Y que su objetivo era crear un lenguaje que facilitara el
aprendizaje de programación, utilizando la programación estructurada y
estructuración de datos. Con el tiempo la utilización excedió el ámbito académico
para convertirse en una herramienta para la creación de aplicaciones de todo tipo.

Se caracteriza por ser un lenguaje de programación fuertemente tipado (no


se permiten violaciones de los tipos de datos). Esto implica que, por un lado, el
código está dividido en porciones fácilmente legibles
llamadas funciones o procedimientos, lo que facilita la utilización de la
programación estructurada en oposición al antiguo estilo de la programación
monolítica; y, por otro, que el tipo de dato de todas las variables debe ser
declarado previamente para que su uso quede habilitado.

La tecnología puede ayudar a los estudiantes a aprender matemáticas. Por


ejemplo, con calculadoras y computadores los alumnos pueden examinar más
ejemplos o representaciones con rapidez, de tal manera que fácilmente pueden
realizar exploraciones y conjeturas.

Tomando en cuenta lo antes descrito, se decide utilizar el método de jacobi,


como ya sabemos es el método iterativo para resolver sistemas de ecuaciones
lineales más simple y se aplica solo a sistemas cuadrados, es decir a sistemas
con tantas incógnitas como ecuaciones.

Por lo tanto si asociamos el uso de las TIC, el uso del lenguaje de


programación Pascal y la necesidad de agilizar los procesos de resolución de
ecuaciones lineales en el ambiente educativo, surge la necesidad de programar en
pascal un algoritmo que nos permita la resolución de un sistema de ecuación por
el método de Jacobi, que nos permita conocer el número de iteraciones, el valor
de error absoluto y la solución de la ecuación con solo introducir los datos
requeridos.

Objetivos

 Diseñar un algoritmo en pascal que nos permita la resolución un sistema de


ecuaciones por el método de Jacobi.
 Programar un algoritmo en pascal que nos permita la resolución un sistema
de ecuaciones por el método de Jacobi.
 Obtener por medio del programa la cantidad de iteraciones que puede tener
el sistema de ecuación por el método de Jacobi.
 Conocer si el sistema de ecuación por el método de Jacobi tiene error
absoluto.
 Ejecutar el programa para obtener la solución de un sistema de ecuación
por el método de Jacobi ingresando los datos requeridos.

Deseamos darle solución a un sistema de ecuaciones por el método de jacobi,


para ello necesitamos tener los datos.

Los datos de entrada serán introducidos por teclado, comenzando por definir el
número de ecuaciones con el que estaremos buscando dar solución al sistema de
ecuaciones.

Después de haber introducido el número de ecuaciones, procedemos a introducir


los valores de cada una de las variables y los valores independientes de cada una
de las ecuaciones.

Teniendo esos datos se propone un vector de solución (que normalmente se


acostumbra el x(0)={0,0,0] para asegurar la convergencia).
Una vez introducidos los valores por el teclado, ejecuta la resolución de la
ecuación, mostrándonos en pantalla:

1. El número de iteraciones.
2. El error absoluto.
3. La solución por jacobi.

Aplicando del método de jacobi tenemos que: si (A) siendo la matriz de


coeficientes tiene una matriz diagonal dominante las iteraciones del método de
jacobi convergen a la solución única. (A) es diagonal dominante si en cada
renglón, el valor absoluto del elemento diagonal es mayor que la suma de los
valores absolutos fuera de la diagonal.

|aii|> ∑ |aij|

Ejemplo de Diagonal Dominante:

-15 1 -2
A= 3 9 1 Si es Diagonal Dominante
5 3 25

1 7 -2
A= 9 3 1 No es Diagonal Dominante
1 1 -9

Si tenemos una diagonal dominante podemos tener una solución absoluta.

Tenemos como datos de entrada: los valores de cada una de las ecuaciones
junto con el termino independiente y la propuesta de vector de solución.

Datos de Salida: el número de iteraciones, el error absoluto, la solución por


jacobi.
Especificaciones:

Debemos solicitar la cantidad de ecuaciones con la que buscamos dar solución al


sistema de ecuaciones. A continuación se presenta una descripción precisa de la
solicitud de este dato.

Write('A) Escriba el Numero de Ecuaciones = ');

readln(N);

Tomando en cuenta que (N) cuenta como una de las variables declaradas para ser
utilizada.

Luego de saber con cuantas ecuaciones vamos a estar trabajando, debemos


solicitar los valores de la matriz y el término independiente.

Estos valores se solicitan de la siguiente manera:

WriteLn('B) Escriba los valores de la Matriz A y el Vector b');

for i:=1 to n do

begin

WriteLn( 'Fila ',i);

for j:=1 to n do

begin

write('A[',I,',',J,'] ','='); ReadLn(A[I,J]);

end;

write('b[',I,'] ','='); ReadLn(B[I]);

end;
En la función,
WriteLn( 'Fila ',i);
for j:=1 to n do

Le estamos diciendo al programa que el valor de cada fila va a depender del


número de ecuaciones que hayamos colocado anteriormente.

Una vez introducidos los datos de la matriz y el valor independiente se solicita


introducir un vector de solución (que normalmente se acostumbra el x(0)={0,0,0]
para asegurar la convergencia).

writeln('C) Escriba los Valores del Vector Inicial (conjetura)');

for i:=1 to n do

begin

write('X0[',I,'] ','=');

readln(X0[I]);

end;

Teniendo estos datos procedemos a dar inicio al proceso iterativo.

Si tenemos los datos de la matriz, y si es una diagonal dominante, despejamos x1,


x2 y x3. Proponemos un vector de solución (que normalmente se acostumbra el
x(0)={0,0,0], asi obtenemos la solución, teniendo ese resultado tendremos el
siguiente vectores, que estaría dándonos las siguientes iteraciones y se detiene
hasta que el error en la última iteración sea de aproximadamente 0.

Este procedimiento es lo que se aplica con el siguiente código:

converge:=false;

k:=0;

while not converge and (k<iter)do


begin

For i:=1 to n do

X[I]:=X0[I];

for I:=1 to n do

begin

S:=0;

for j:=1 to n do

if (i-j)<>0 then S:=S+A[I,J]*X0[J];

X[i]:=(B[i]-S)/A[i,i]

end;

{Aplicación del Criterio de Convergencia}

For i:=1 to n do

begin

if Abs(X0[I]-X[I]) > EPS then converge:=false

else converge:=true;

X0[I]:=x[I];

end;

k:=k+1;

end;

Si el programa consigue la diagonal dominante, nos arroja la solución de la


siguiente manera:
if converge then

begin

writeln;

writeln('RESULTADOS');

writeln('A) Numero de Interaciones=',k); error:=abs(X0[I]-X[I]);

writeln('B) Error absoluto=',error);

writeln('C)LA SOLUCIÓN POR JACOBI ES:');

For i:=1 to n do

writeln(' X[',I,'] = ',X[I]:12:6);

end

En caso de no conseguir la diagonal dominante, nos da el mensaje de No


Convergencia:

else writeln('NO CONVERGENCIA')

La Particion:

En este caso los datos solicitados son evidentes y si nos ponemos a pensar en lo
que se solicita, podemos definir los siguientes pasos:

Paso 1: Número de ecuaciones.


Paso 2: Introducir los datos y el valor independiente de cada ecuación.
Paso 3: Introducir un vector de solución (que normalmente se acostumbra el
x(0)={0,0,0] para asegurar la convergencia)
Paso 4: Calcular si la ecuación tiene una diagonal dominante o no.
Paso 5: De ser una diagonal dominante, se aplica el proceso iterativo.
Paso 6: Aplicación del Criterio de Convergencia.
Paso 7: Presentar la solución.

El algoritmo lo podemos presentar de la siguiente manera:

program jacobimet;
uses crt;
const max=25;
maxiter=1000;
iter=100;
eps=1E-06;
type subinds=0..max;
matriz=array [1..max,1..max] of real;
vectores=array [subinds] of Real;
var error,S:Real;
converge:Boolean;
i,j,k,n:Integer;
A:matriz;
X,X0,B:vectores;
begin
Write('A) Escriba el Numero de Ecuaciones = ');
readln(N);
WriteLn();
WriteLn('B) Escriba los valores de la Matriz A y el Vector b');
for i:=1 to n do
begin
WriteLn( 'Fila ',i);
for j:=1 to n do
begin
write('A[',I,',',J,'] ','='); ReadLn(A[I,J]);
end;
write('b[',I,'] ','='); ReadLn(B[I]);
end; WriteLn;
writeln('C) Escriba los Valores del Vector Inicial (conjetura)');
for i:=1 to n do
begin
write('X0[',I,'] ','=');
readln(X0[I]);
end;
converge:=false;
k:=0;
while not converge and (k<iter)do
begin
For i:=1 to n do
X[I]:=X0[I];
for I:=1 to n do
begin
S:=0;
for j:=1 to n do
if (i-j)<>0 then S:=S+A[I,J]*X0[J];
X[i]:=(B[i]-S)/A[i,i]
end;
For i:=1 to n do
begin
if Abs(X0[I]-X[I]) > EPS then converge:=false
else converge:=true;
X0[I]:=x[I];
end;
k:=k+1;
end;
if converge then
begin
writeln;
writeln('RESULTADOS');
writeln('A) Numero de Interaciones=',k); error:=abs(X0[I]-X[I]);
writeln('B) Error absoluto=',error);
writeln('C)LA SOLUCIÓN POR JACOBI ES:');
For i:=1 to n do
writeln(' X[',I,'] = ',X[I]:12:6);
readln;
end
else writeln(' No Posee Diagonal Dominante ')
readln;
end.

Definición de abstracciones.

Comenzando por darle un nombre al archivo y comenzar la estructura del


programa, donde haremos la declaración de constantes, type y variables que nos
permitan darle solución a ecuaciones lineales. Debemos darle la instrucción al
programa de la cantidad de ecuaciones con la que cuenta el ejercicio en cuestión
(lo reconoceremos en el programa como A) Escriba el Numero de Ecuaciones= ),
una vez sepamos el número de ecuaciones, debemos también introducir los
valores de cada una de las variables (lo reconoceremos en el programa como B)
Escriba los valores de la matriz y el Termino Independiente b), reconocer la
posición de cada una de las ecuaciones (que en nuestro caso le damos el nombre
de Fila ), y los valores de la matriz el programa ira reconociendo de acuerdo a la
posición de cada una (en el programa lo veremos como A[ 1 . 1]=, A[ 1 . 2]=, A[ 1 .
3]=,…), luego de colocar darle valor a las variables debemos darle el valor al
termino independiente (que lo estaremos viendo como B[1]=, B[2]=,…) de acuerdo
al número de ecuaciones que previamente indicamos; al tener los valores
anteriores, se solicita los valores del vector Inicial (que en el programa
reconoceremos como X0[1], X0[2], X0[3]).

El algoritmo quedaría implementado de la siguiente manera:

program jacobimet;
uses crt;
{Declaracion de Constantes}
const max=25;
maxiter=1000;
iter=100;
eps=1E-06;
type subinds=0..max;
matriz=array [1..max,1..max] of real;
vectores=array [subinds] of Real;
{Declaración de Variables}

var
error,S:Real;
converge:Boolean;
i,j,k,n:Integer;
A:matriz;
X,X0,B:vectores;
{Inicio del Procedimiento}
begin
{Paso 1 Numero de Ecuaciones}
{Aqui solicitamos el Numero de Ecuaciones que posee el ejercicio}
Write('A) Escriba el Numero de Ecuaciones = ');
readln(N);
WriteLn();
{Aquí solicitamos los datos de cada una de las Ecuaciones}
{Donde A[1.1] es la posición que ocupa el valor en la Matriz}

{Y B es el termino Independiente}
{ Paso 2 Introducir los datos y el valor independiente de cada ecuación}
WriteLn('B) Escriba los valores de la Matriz A y el Termino Independiente b');
for i:=1 to n do
{Con esta función lo que le decimos al programa es que cuente cada una
de las ecuaciones nombradas como filas tomando en cuenta el valor de
variable N solicitada anteriormente}
begin
WriteLn( 'Fila ',i);
for j:=1 to n do

begin
write('A[',I,',',J,'] ','='); ReadLn(A[I,J]);
end;
write('b[',I,'] ','='); ReadLn(B[I]);
end; WriteLn;
{Con esto solicitamos el valor de cada una de los datos de acuerdo
a la posición que ocupa}
{Paso 3 Introducir un vector de Solución}
writeln('C) Escriba los Valores del Vector Inicial (conjetura)');
for i:=1 to n do
begin
write('X0[',I,'] ','=');
readln(X0[I]);
end;
{Aqui se propone darle valores de 0 a las variables solicitadas}

{Paso 4 Calcular si la Ecuación tiene diagonal dominante o no}


{Inicio del Proceso Interativo}
converge:=false;
k:=0;
while not converge and (k<iter)do
begin
For i:=1 to n do
X[I]:=X0[I];
for I:=1 to n do
{Paso 5 de tener diagonal dominante se aplica el proceso iterativo}
begin
S:=0;
for j:=1 to n do
if (i-j)<>0 then S:=S+A[I,J]*X0[J];
X[i]:=(B[i]-S)/A[i,i]
end;
{Paso 6 Aplicación del Criterio de Convergencia}
For i:=1 to n do
begin
if Abs(X0[I]-X[I]) > EPS then converge:=false
else converge:=true;
X0[I]:=x[I];
end;
k:=k+1;
end;
if converge then
{Paso 7 Presentar la Solución}
begin
writeln;
writeln(' RESULTADOS');
writeln('A) Numero de Iteraciones= ',k); error:=abs(X0[I]-X[I]);
writeln('B) Error absoluto=',error);
writeln('C)LA SOLUCIÓN POR JACOBI ES:');
For i:=1 to n do
writeln(' X[',I,'] = ',X[I]:12:6);
readln;
end
else writeln(' No Posee Diagonal Dominante ');
readln;
end.
Solución Analítica del problema
Conclusiones

De acuerdo a la forma de trabajo, y lo visto en este documento académico,


podemos concluir que:

La tecnología puede ayudar a los estudiantes a aprender matemáticas. Por


ejemplo, con calculadoras y computadores los alumnos pueden examinar más
ejemplos o representaciones con rapidez, de tal manera que fácilmente pueden
realizar exploraciones y conjeturas.

Tomando en cuenta esto, buscamos dar solución a sistemas de ecuaciones


por método de jacobi, utilizando el lenguaje de programación pascal. Se creó el
algoritmo que termina arrojándonos dos tipos de resultados dependiendo de la
convergencia de los mismos, si tenemos los datos de la matriz, y si es una
diagonal dominante, despejamos x1, x2 y x3. Proponemos un vector de solución
(que normalmente se acostumbra el x(0)={0,0,0], así estaría dándonos las
iteraciones y se detiene hasta que el resultado en la última iteración sea de
aproximadamente cero “0”, tenemos de resultado el número de iteraciones, el
error absoluto, y la solución por jacobi y en el caso de no tener una matriz diagonal
dominante nos arroja el resultado de “No Posee Matriz Diagonal Dominante.

Con esto buscamos agilizar los procesos de resolución de matrices por el


método de jacobi.

También podría gustarte