Advertisement
Teammasik

KM_LR1+LR2

Nov 20th, 2023
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.91 KB | None | 0 0
  1. import math as m
  2.  
  3. #  x^2 - e^(y/x) - y - 2x = 0
  4. precision = 0.0001
  5.  
  6.  
  7. def formula(x, y):
  8.     return m.pow(x, 2) - m.pow(m.e, y / x) - y - 2 * x
  9.  
  10.  
  11. def derivative(x, y):
  12.     return (2 * m.pow(x, 3) + m.pow(m.e, y / x) * y - 2 * m.pow(x, 2)) / (x * m.pow(m.e, y / x) + m.pow(x, 2))
  13.  
  14.  
  15. def secder(x, y):
  16.     h = 0.0001
  17.     return (derivative(x + h, y) - derivative(x, y)) / h
  18.  
  19.  
  20. def solution():
  21.     miny, minx = 10000, 10000
  22.     znak = "+"
  23.     for x in range(115000, 120000): # вам нужно будет найти нормальные отрезки для циклов по х и у, прост на сайтике нарисуйте
  24.         for y in range(-135000, -127000):  # но он может не правильно нарисовать, гл крч
  25.             if x != 0:
  26.                 try:
  27.                     if abs(formula(x / 100000, y / 100000)) < 0.0001 and abs(derivative(x / 100000, y / 100000)) < 0.001 and secder(x / 100000, y / 100000) >= 0:
  28.                         if miny > abs(y / 100000):
  29.                             if y < 0:
  30.                                 znak = "-"
  31.                             else:
  32.                                 znak = "+"
  33.                             miny = abs(y / 100000)
  34.                             minx = x / 100000
  35.                 except OverflowError:
  36.                     continue
  37.  
  38.     print("перебор")
  39.     print("x equals to      ", minx)
  40.     print("y equals to      ", -miny)
  41.     print("formula:         ", (formula(minx, -miny)))
  42.     print("first derivative ", derivative(minx, -miny))
  43.     print("second derivative", secder(minx, -miny))
  44.  
  45.  
  46. solution()
  47.  
  48.  
  49. def solution2():
  50.     finx = 100000
  51.     delta = precision / 3
  52.     for x in range(0, 15000):
  53.         x = x / 10000
  54.         y, n = 1, 1000
  55.         a, b = -2, 1.1
  56.         for k in range(1, n + 1):
  57.             if x != 0:
  58.                 try:
  59.                     alpha = (a + b) / 2 - delta
  60.                     beta = (a + b) / 2 + delta
  61.                     if abs(formula(x, alpha)) <= abs(formula(x, beta)):
  62.                         b = beta
  63.                         y = alpha
  64.                     else:
  65.                         a = alpha
  66.                         y = beta
  67.                     if (b - a) < precision:
  68.                         finx = x
  69.                         break
  70.                 except OverflowError:
  71.                     continue
  72.         # print(finx, y)
  73.         try:
  74.             if abs(derivative(finx, y)) < 0.0001 and secder(finx, y) > 0 and abs(formula(finx, y))< 0.0001:
  75.                 ax = finx
  76.                 yx = y
  77.         except OverflowError:
  78.             continue
  79.  
  80.     print("\n\nполовинное деление")
  81.     print("x equals to      ", ax)
  82.     print("y equals to      ", yx)
  83.     print("formula:         ", (formula(ax, yx)))
  84.     print("first derivative ", derivative(ax, yx))
  85.     print("second derivative", secder(ax, yx))
  86.  
  87.  
  88. solution2()
  89.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement