ClubEnsayos.com - Ensayos de Calidad, Tareas y Monografias
Buscar

Metodo De Steffensen

seleneygf23 de Septiembre de 2014

325 Palabras (2 Páginas)668 Visitas

Página 1 de 2

#! /usr/bin/env python

#-*- coding: utf-8 -*-

# Autor: Dolores GarcíaKarla Rubí

# Metodo: Steffensen

print '\t************** Metodo de Steffenson ***************\n'

import numpy as np

import matplotlib.pyplot as plt

from math import *

from sympy import *

iInicial = float(raw_input("Introduce el intervalo inicial: "))

iFinal = float(raw_input("Introduce el intervalo final: "))

x = np.linspace(iInicial, iFinal,500)

fx = input("Introduce una funcion donde x es la variable independiente: ")

plt.xlabel('x')

plt.ylabel('y')

plt.title('Polinomio')

plt.plot(x, fx, 'g.')

plt.show()

#.....Graficamos f(x) para ver los puntos que estan cerca de la raiz

funintroducida = str(raw_input('\n Función f(x): '))

fnx = 'def function(x): \n' + ' return ' + funintroducida

exec fnx #La función exec le dice al intérprete que haga una llamada a si mismo y ejecute el contenido de la cadena pasada como argumento.

#.....Damos la tolerancia

tolerancia = float(raw_input('\n Tolerancia: '))

while tolerancia>=1 or tolerancia<0:

tolerancia = float(raw_input('Tolerancia: '))

#.....Introduzco g(x)

x = Symbol('x')

gx = str(raw_input('\n Función g(x) para derivar y probar el TPF: '))

fgx = 'def functiong(x): \n' + ' return ' + gx

exec fgx

#.....Damos un punto inicial cerca de la raiz y checamos el Teorema de punto fijo(segunda condición)

xi = float(raw_input("\n Punto inicial: "))

def derivada(xi):

deri = diff(gx, x)

deriEvaluada = deri.evalf(subs={x:xi})

return deriEvaluada

print "\n Derivada evaluada en el punto inicial: " , derivada(xi)

#if abs(derivada(pInicial))>=1:

# print 'Corrige la g(x) pues la que diste no cumple el Teorema de punto fijo'

# break

#.....Verificado lo anterior comenzamos con las iteraciones

punto,itera = 10.0,0

gx = input('\n De nuevo escribe la función g(x) para evaluarla en los puntos dados: ') #Hay q escribirla bien :S si (x+1)**(1/3.0)

def y():

y= gx.evalf(subs={x:xi})

return y

def z():

z= gx.evalf(subs={x:y0})

return z

cuenta = 0

print '{0}\t{1}\t{2}\t{3}\t{4}'.format('Iteracion','xi ','yi ','zi ','Xi+1 ', 'Error abs ')

while (abs(xi-punto) >= tolerancia):

y0= y()

z0= z()

xi_m_1 =xi-(((y0-z0)**2/(z0-2*y0+xi)))

print '{0}\t{1}\t{2}\t{3}\t{4}' .format("%.4f" % int(cuenta),"%.4f" % xi,"%.4f" %y0,"%.4f" %z0, "%.5f" %xi_m_1, "%.5f" %(abs(xi_m_1)-(xi)))

punto = xi

xi = xi_m_1

itera=itera+1

cuenta = cuenta + 1

if (itera==500):

print "\nSe realizaron ", cuenta-1, " iteraciones"

print "\n :( Elige otro punto para lograr una mejor convergencia"

break

print "\nSe realizaron ", cuenta-1, " iteraciones"

...

Descargar como (para miembros actualizados) txt (3 Kb)
Leer 1 página más »
Disponible sólo en Clubensayos.com