2021年5月3日星期一

Why is my code running forever, its been a long time since i run the code. Yet, no output. Did I take a long way in finding any values?

import sympy from sympy import symbols, cos, Function, pi, diff

""" CAUCHY's METHOD of FINDING MINIMA OF A FUNCTION """

x = symbols('x')  y = symbols('y')  f = Function('f')  

""" function and initial point """

f = x*x + 2*y*y - 0.3*cos(3*pi*x) - 0.4*cos(4*pi*y) + 0.7  p = [0.1,0.1]  

def fib(n) : """ Fibonacci sequence """

a = 0  b = 1  if n <= 1 :      return n  else:      for i in range(1, n):          c = a + b          a = b          b = c      return b  

def grad(X) : """ Gradient of the function """

x0 = X[0]  y0 = X[1]    s1 = - ((f.diff(x)).subs([(x,x0),(y,y0)]))  s2 = - ((f.diff(y)).subs([(x,x0),(y,y0)]))    return s1.evalf(), s2.evalf()  

S = grad(p)

def lam_star(func,X) : """ Calculating Optimum lambda"""

x0 = X[0]  y0 = X[1]    dl = 0.01  l = 0    z = f.subs([(x,x0 + l*S[0]),(y,y0 + l*S[1])])  minima = 0    while minima == 0 :      l = l + dl      znew = f.subs([(x,x0 + l*S[0]),(y,y0 + l*S[1])])      if znew > f.subs([(x,x0 + (l-dl)*S[0]),(y,y0 + (l-dl)*S[1])]) :          minima = 1      else : minima = 0  else : z = znew    n = 25  fn = fib(n)  a = l - 2*dl  b = l  l0 = b - a  fa = f.subs([(x,x0 + a*S[0]),(y,y0 + a*S[1])])  fb = f.subs([(x,x0 + b*S[0]),(y,y0 + b*S[1])])    for i in range(1,n) :      L = fib(n-i)*l0/fn      c = b - L      d = a + L        if c == d :          d = c + 0.0001        fc = f.subs([(x,x0 + c*S[0]),(y,y0 + c*S[1])])      fd = f.subs([(x,x0 + d*S[0]),(y,y0 + d*S[1])])        if fc <= fd :          b = d          fb = fd      else :           a = c          fa = fc    if fc <= fd :      l_star = c  else: l_star = d    return l_star  

""" Finding minima of the function """

Xnew = [0.1,0.1]  conv = 0    while conv == 0 :      x_sol = Xnew      Fx = grad(x_sol)      s = [-Fx[0],-Fx[1]]      lam = lam_star(f,x_sol)      Xnew = [x_sol[0]+s[0]*lam, x_sol[1]+s[1]*lam]      if ((abs(Fx[0]) <= 1e-1) & ((abs(Fx[1]) <= 1e-1))) :          conv = 1    print(x_sol)  
https://stackoverflow.com/questions/67377560/why-is-my-code-running-forever-its-been-a-long-time-since-i-run-the-code-yet May 04, 2021 at 09:07AM

没有评论:

发表评论