Modifica el código de forma tal que se contemplen los criterios de paro (Ecuaciones no lineales) vistos para métodos numéricos previos sin usar numpy ni otro modulos # Seccion 1 import numpy as np import math # funcion f1 def f1(x1, x2): return 2*x1-x2-math.e**(-x1) # funcion f2 def f2(x1, x2): return -x1+2*x2-math.e**(-x2) # denominador de la matriz jacobiana def denominador(x1,x2): return 3+2*math.e**(-x2)+2*math.e**(-x1)+math.e**(-x1-x2) # parcial (en este caso la parcial de f1 y f2 es la misma) def par(x): return 2+math.e**(-x) '''Metodo de Newton para sistemas de ecuaciones no lineales aprox: es la primera aproximacion en forma de vector''' def JimyNewtron(aprox): # contador de iteraciones n = 0 while n < 100: # maximo numero de iteraciones 100 '''es necesario calcular la matriz jacobiana y para ello se necesita una matriz vacia de 2x2''' jacobinv = np.zeros([2,2]) # valores de la matriz jacobiana en todas sus entradas jacobinv[0][0] = par(aprox[1])/denominador(aprox[0], aprox[1]) jacobinv[0][1] = 1/denominador(aprox[0], aprox[1]) jacobinv[1][0] = 1/denominador(aprox[0], aprox[1]) jacobinv[1][1] = par(aprox[0])/denominador(aprox[0], aprox[1]) # guarda la evalucion de f1 y f2 en forma de vector fx = np.array(aprox) fx[0] = f1(aprox[0], aprox[1]) fx[1] = f2(aprox[0], aprox[1]) # FORMA ITERATIVA DEL METODO DE NEWTON PARA SISTEMAS NO LIENALES aprox = aprox - np.matmul(jacobinv, fx) # se incrementa el contador n+=1 # El valor devuelto es la aproximacion return aprox def main(): #Aproximacion inicial (X=(0.0,0.0)) ap = np.zeros([2]) sol = JimyNewtron(ap) print('Aproximacion de la solucion') print(sol) print('Aproximacion evaluada en f1') print(f1(sol[0], sol[1])) print('Aproximacion evaluada en f2') print(f2(sol[0], sol[1])) main()
def p1(x): return math.exp(-x) def p2(x): return math.exp(-2*x) def par(x): return p1(x) + 2*p2(x) def integral(a, b): return par(b)/2 - par(a)/2 print(integral(1, 3))