【问题标题】:Find x where y is minimum找到 y 最小的 x
【发布时间】:2020-02-24 23:10:22
【问题描述】:

我有一个 在 (-2,2) 范围内的多项式。通过使用 x=0.1 进行迭代,我可以轻松找到最小 y 值。但我也想找到对应的 x 值,其中 y 最小。 (不使用任何额外的库)

假设 y=x**2+3*x+5。我想在一个范围(-2,2)中找到 min(y) 并且还想找到给出 min(y) 的 x。

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

【问题讨论】:

  • 虽然 for x in x 可能会起作用,但这是一种不好的做法,并且当您无法弄清楚为什么 x 突然变成单个元素而不是列表时,可能会非常难以调试。
  • x[y.index(min(y))

标签: python minimum polynomials


【解决方案1】:

由于元组按第一项排序,然后是第二项,依此类推,您可以将生成器表达式传递给min 函数,该生成器表达式输出(y, x) 的元组:

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

这会返回:

(2.75, -1.5)

【讨论】:

    【解决方案2】:

    也许只是在调用函数的同时进行比较?

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

    【讨论】:

      猜你喜欢
      • 2021-07-28
      • 2018-01-19
      • 2022-11-13
      • 2019-04-27
      • 2012-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多