Created
August 16, 2017 20:12
-
-
Save barucAlmaguer/5ee01b1aaaafd5b97e4f8cd10924433d to your computer and use it in GitHub Desktop.
Analisis numerico - Metodo Gauss Siegel
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| { | |
| "cells": [ | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "# Método Gauss-Seidel" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "Es el método iterativo más utilizado.\n", | |
| "\n", | |
| "Supongase que se ha dado un conjunto de __n__ ecuaciones:\n", | |
| "$$Ax = C$$\n", | |
| "\n", | |
| "Si los elementos de la diagonal son diferentes de 0, \n", | |
| "la primera ecuación se puede resolver para x1, \n", | |
| "la segunda para x2, \n", | |
| "...\n", | |
| "lo que lleva a:\n", | |
| "\n", | |
| "$$x_{1} = \\frac{c_{1} - a_{12}x_{2} - a_{13}x_{3} - ... - a_{1n}x_{n}}{a_{11}}$$\n", | |
| "$$x_{2} = \\frac{c_{2} - a_{21}x_{1} - a_{23}x_{3} - ... - a_{2n}x_{n}}{a_{22}}$$\n", | |
| "$$x_{3} = \\frac{c_{3} - a_{31}x_{1} - a_{32}x_{2} - ... - a_{3n}x_{n}}{a_{33}}$$\n", | |
| ".\n", | |
| ".\n", | |
| ".\n", | |
| "$$x_{n} = \\frac{c_{n} - a_{n1}x_{1} - a_{n2}x_{2} - ... - a_{n,n1}x_{n-1}}{a_{nn}}$$\n", | |
| "\n", | |
| "Se empieza a solucionar tomando las __x__ un valor inicial de 0, esto se sustituye en la Ecuación 1, la cuál se usa para calcular un nuevo valor de \n", | |
| "$$x1 = c1/a11$$,\n", | |
| "Luego se sustituye el valor de __x1__ con __x3__ ... hasta __xn__ aún en 0\n", | |
| "En la ecuación 2 con la cuál se calcula el valor de x2\n", | |
| "\n", | |
| "Esto se repite hasta llegar a la ecuación 4, la cuál calcula un nuevo valor de __xn__. En seguida se regresa a la primera ecuación y se repite todo el proceso hasta que la solución converja bastante cerca de los valores reales.\n", | |
| "La convergencia se verifica utilizando:\n", | |
| "$$\n", | |
| "E_{a} = \\mid \\frac{x_{i}^{j-1} - x_{i}^j}{x_{i}^j} \\mid * 100\\% < E_{s}\n", | |
| "$$\n", | |
| "(Para toda i en donde j y j-1 denotan la iteración actual y la anterior\n", | |
| "\n", | |
| "Este método converge si el coeficiente del valor de la diagonal en valor absoluto es mayor que la suma de los coeficientes restantes de la ecuación (Diagonalmente dominante)." | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "Ejemplo:\n", | |
| "\n", | |
| "$$3x_{1} - 0.1x_{2} - 0.2x_{3} = 7.85$$\n", | |
| " \n", | |
| "$$0.1x_{1} + 7x_{2} - 0.3x_{3} = -19.3$$\n", | |
| "\n", | |
| "$$0.3x_{1} - 0.2x_{2} + 10x_{3} = 71.4$$\n", | |
| "\n", | |
| "---\n", | |
| "\n", | |
| "$$x_{1} = \\frac{7.85 + 0.1x_{2} + 0.2x_{3}}{3}$$\n", | |
| "\n", | |
| "$$x_{2} = \\frac{-19.3 - 0.1x_{1} + 0.3x_{3}}{7}$$\n", | |
| "\n", | |
| "$$x_{3} = \\frac{71.4 - 0.3x_{1} + 0.2x_{2}}{10}$$\n", | |
| "\n", | |
| "Consideramos: \n", | |
| "\n", | |
| "$$x_{1}=x_{2}=x_{3}=0$$" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 6, | |
| "metadata": { | |
| "collapsed": true | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "def Error_aproximado(var, act, ant):\n", | |
| " ea = abs((act-ant)/act * 100)\n", | |
| " return \"Ea({}) = {}%\".format(var, ea)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 13, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "[2.6166666666666667, -2.7945238095238096, 7.005609523809525]" | |
| ] | |
| }, | |
| "execution_count": 13, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "X1 = 0\n", | |
| "X2 = 0\n", | |
| "X3 = 0\n", | |
| "R1 = [3.0, -0.1, -0.2, 7.85]\n", | |
| "R2 = [0.1, 7.0, -0.3, -19.3]\n", | |
| "R3 = [0.3, -0.2, 10, 71.4]\n", | |
| "X1 = (R1[3] - R1[1]*X2 - R1[2]*X3)/R1[0]\n", | |
| "X2 = (R2[3] - R2[0]*X1 - R2[2]*X3)/R2[1]\n", | |
| "X3 = (R3[3] - R3[0]*X1 - R3[1]*X2)/R3[2]\n", | |
| "[X1, X2, X3]" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 14, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "[2.990556507936508, -2.499624684807256, 7.00029081106576]\n", | |
| "Ea(X1) = 12.502349989963122%\n", | |
| "Ea(X2) = 11.797736136506948%\n", | |
| "Ea(X3) = 0.07597845414304334%\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "\n", | |
| "X1ant, X2ant, X3ant = X1, X2, X3\n", | |
| "X1 = (R1[3] - R1[1]*X2 - R1[2]*X3)/R1[0]\n", | |
| "X2 = (R2[3] - R2[0]*X1 - R2[2]*X3)/R2[1]\n", | |
| "X3 = (R3[3] - R3[0]*X1 - R3[1]*X2)/R3[2]\n", | |
| "print([X1, X2, X3])\n", | |
| "print(Error_aproximado(\"X1\", X1, X1ant))\n", | |
| "print(Error_aproximado(\"X2\", X2, X2ant))\n", | |
| "print(Error_aproximado(\"X3\", X3, X3ant))" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 15, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "[3.0000318979108087, -2.499987992353051, 6.999999283215615]\n", | |
| "Ea(X1) = 0.31584297423301044%\n", | |
| "Ea(X2) = 0.014532371631624038%\n", | |
| "Ea(X3) = 0.004164683999950723%\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "X1ant, X2ant, X3ant = X1, X2, X3\n", | |
| "X1 = (R1[3] - R1[1]*X2 - R1[2]*X3)/R1[0]\n", | |
| "X2 = (R2[3] - R2[0]*X1 - R2[2]*X3)/R2[1]\n", | |
| "X3 = (R3[3] - R3[0]*X1 - R3[1]*X2)/R3[2]\n", | |
| "print([X1, X2, X3])\n", | |
| "print(Error_aproximado(\"X1\", X1, X1ant))\n", | |
| "print(Error_aproximado(\"X2\", X2, X2ant))\n", | |
| "print(Error_aproximado(\"X3\", X3, X3ant))" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 16, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "[3.000000352469273, -2.5000000357546064, 6.99999998871083]\n", | |
| "Ea(X1) = 0.0010515145943187922%\n", | |
| "Ea(X2) = 0.0004817360553336348%\n", | |
| "Ea(X3) = 1.0078503089631263e-05%\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "X1ant, X2ant, X3ant = X1, X2, X3\n", | |
| "X1 = (R1[3] - R1[1]*X2 - R1[2]*X3)/R1[0]\n", | |
| "X2 = (R2[3] - R2[0]*X1 - R2[2]*X3)/R2[1]\n", | |
| "X3 = (R3[3] - R3[0]*X1 - R3[1]*X2)/R3[2]\n", | |
| "print([X1, X2, X3])\n", | |
| "print(Error_aproximado(\"X1\", X1, X1ant))\n", | |
| "print(Error_aproximado(\"X2\", X2, X2ant))\n", | |
| "print(Error_aproximado(\"X3\", X3, X3ant))" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 17, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "[2.9999999980555683, -2.500000000456044, 7.000000000049214]\n", | |
| "Ea(X1) = 1.181379016120089e-05%\n", | |
| "Ea(X2) = 1.4119424915559705e-06%\n", | |
| "Ea(X3) = 1.6197690807562597e-07%\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "X1ant, X2ant, X3ant = X1, X2, X3\n", | |
| "X1 = (7.85+0.1*X2+0.2*X3)/3\n", | |
| "X2 = (-19.3 - 0.1*X1 + 0.3*X3)/7.0\n", | |
| "X3 = (71.4 - 0.3*X1+0.2*X2)/10.0\n", | |
| "print([X1, X2, X3])\n", | |
| "print(Error_aproximado(\"X1\", X1, X1ant))\n", | |
| "print(Error_aproximado(\"X2\", X2, X2ant))\n", | |
| "print(Error_aproximado(\"X3\", X3, X3ant))" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "Tarea: \n", | |
| "\n", | |
| " 4x1+ x2+2x3=16\n", | |
| "\n", | |
| " x1+3x2+ x3=10\n", | |
| " \n", | |
| " x1+2x2+5x3=12\n", | |
| " \n", | |
| "Error < 2% en todas las ecuaciones" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "## Nota: Si no es diagonalmente dominante, pivotear antes para que lo sea." | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 18, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "[4.0, 2.0, 0.8]" | |
| ] | |
| }, | |
| "execution_count": 18, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "X1 = 0\n", | |
| "X2 = 0\n", | |
| "X3 = 0\n", | |
| "R1 = [4, 1, 2, 16]\n", | |
| "R2 = [1, 3, 1, 10]\n", | |
| "R3 = [1, 2, 5, 12]\n", | |
| "X1 = (R1[3] - R1[1]*X2 - R1[2]*X3)/R1[0]\n", | |
| "X2 = (R2[3] - R2[0]*X1 - R2[2]*X3)/R2[1]\n", | |
| "X3 = (R3[3] - R3[0]*X1 - R3[1]*X2)/R3[2]\n", | |
| "[X1, X2, X3]" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 19, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "[3.1, 2.0333333333333337, 0.9666666666666666]\n", | |
| "Ea(X1) = 29.032258064516125%\n", | |
| "Ea(X2) = 1.6393442622950976%\n", | |
| "Ea(X3) = 17.241379310344815%\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "X1ant, X2ant, X3ant = X1, X2, X3\n", | |
| "X1 = (R1[3] - R1[1]*X2 - R1[2]*X3)/R1[0]\n", | |
| "X2 = (R2[3] - R2[0]*X1 - R2[2]*X3)/R2[1]\n", | |
| "X3 = (R3[3] - R3[0]*X1 - R3[1]*X2)/R3[2]\n", | |
| "print([X1, X2, X3])\n", | |
| "print(Error_aproximado(\"X1\", X1, X1ant))\n", | |
| "print(Error_aproximado(\"X2\", X2, X2ant))\n", | |
| "print(Error_aproximado(\"X3\", X3, X3ant))" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 20, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "[3.0083333333333333, 2.0083333333333333, 0.9950000000000001]\n", | |
| "Ea(X1) = 3.047091412742386%\n", | |
| "Ea(X2) = 1.2448132780083165%\n", | |
| "Ea(X3) = 2.8475711892797526%\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "X1ant, X2ant, X3ant = X1, X2, X3\n", | |
| "X1 = (R1[3] - R1[1]*X2 - R1[2]*X3)/R1[0]\n", | |
| "X2 = (R2[3] - R2[0]*X1 - R2[2]*X3)/R2[1]\n", | |
| "X3 = (R3[3] - R3[0]*X1 - R3[1]*X2)/R3[2]\n", | |
| "print([X1, X2, X3])\n", | |
| "print(Error_aproximado(\"X1\", X1, X1ant))\n", | |
| "print(Error_aproximado(\"X2\", X2, X2ant))\n", | |
| "print(Error_aproximado(\"X3\", X3, X3ant))" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 21, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "[3.0004166666666667, 2.001527777777778, 0.9993055555555556]\n", | |
| "Ea(X1) = 0.26385224274406016%\n", | |
| "Ea(X2) = 0.3400180417736317%\n", | |
| "Ea(X3) = 0.4308547602501633%\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "X1ant, X2ant, X3ant = X1, X2, X3\n", | |
| "X1 = (R1[3] - R1[1]*X2 - R1[2]*X3)/R1[0]\n", | |
| "X2 = (R2[3] - R2[0]*X1 - R2[2]*X3)/R2[1]\n", | |
| "X3 = (R3[3] - R3[0]*X1 - R3[1]*X2)/R3[2]\n", | |
| "print([X1, X2, X3])\n", | |
| "print(Error_aproximado(\"X1\", X1, X1ant))\n", | |
| "print(Error_aproximado(\"X2\", X2, X2ant))\n", | |
| "print(Error_aproximado(\"X3\", X3, X3ant))" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 22, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "[2.9999652777777777, 2.0002430555555555, 0.9999097222222224]\n", | |
| "Ea(X1) = 0.015046470445265837%\n", | |
| "Ea(X2) = 0.06422830558787818%\n", | |
| "Ea(X3) = 0.060422121441537344%\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "X1ant, X2ant, X3ant = X1, X2, X3\n", | |
| "X1 = (R1[3] - R1[1]*X2 - R1[2]*X3)/R1[0]\n", | |
| "X2 = (R2[3] - R2[0]*X1 - R2[2]*X3)/R2[1]\n", | |
| "X3 = (R3[3] - R3[0]*X1 - R3[1]*X2)/R3[2]\n", | |
| "print([X1, X2, X3])\n", | |
| "print(Error_aproximado(\"X1\", X1, X1ant))\n", | |
| "print(Error_aproximado(\"X2\", X2, X2ant))\n", | |
| "print(Error_aproximado(\"X3\", X3, X3ant))" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "collapsed": true | |
| }, | |
| "outputs": [], | |
| "source": [] | |
| } | |
| ], | |
| "metadata": { | |
| "kernelspec": { | |
| "display_name": "Python 3", | |
| "language": "python", | |
| "name": "python3" | |
| }, | |
| "language_info": { | |
| "codemirror_mode": { | |
| "name": "ipython", | |
| "version": 3 | |
| }, | |
| "file_extension": ".py", | |
| "mimetype": "text/x-python", | |
| "name": "python", | |
| "nbconvert_exporter": "python", | |
| "pygments_lexer": "ipython3", | |
| "version": "3.6.0" | |
| } | |
| }, | |
| "nbformat": 4, | |
| "nbformat_minor": 2 | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment