Найдите x, где y минимально

У меня есть многочлен в диапазоне (-2,2). Я могу легко найти минимальные значения y, выполнив итерацию с x=0,1. Но я также хочу найти соответствующее значение x, где y минимально. (без использования дополнительных библиотек)

Допустим, у=х**2+3*х+5. Я хочу найти min(y) в диапазоне (-2,2), а также найти x, который дает min(y).

def f(x):
   return x**2+3*x+5
y=[]
x=[i/10 for i in range(-20,20)]
for x in x:
   y_values.append(f1(x))

#min(y) find also minimum of y but I want to find it with long way.

   minimum1=y_values[0]
   for n in y_values: 
        if minimum1>n:
           minimum1=n

person AApro    schedule 29.10.2019    source источник
comment
Хотя for x in x может работать, это плохая практика, и ее может быть очень сложно отлаживать позже, когда вы не можете понять, почему x вдруг стал одним элементом, а не списком.   -  person SyntaxVoid supports Monica    schedule 29.10.2019


Ответы (2)


Поскольку кортежи упорядочены по первым элементам, затем по вторым элементам и так далее, вы можете передать функции min генераторное выражение, которое выводит кортежи из (y, x):

min((f(x), x) for x in (i / 10 for i in range(-20, 20)))

Это возвращает:

(2.75, -1.5)
person blhsing    schedule 29.10.2019

Может быть, просто делать сравнение в то же время, когда вы вызываете функцию?

def f(x):
   return x**2+3*x+5

y=[]
x=[i/10 for i in range(-20,20)]

ymin = f1(x[0])
xmin = x[0]

for x in x:
   if(f1(x)<y):
       ymin = f1(x)
       xmin = x
   y_values.append(f1(x))
person Ivan    schedule 29.10.2019