Generation

generate functionSat, 01 Apr 2023

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))

Questions about programming?Chat with your personal AI assistant