首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >寻找局部极大值和Minima

寻找局部极大值和Minima
EN

Code Golf用户
提问于 2018-01-31 16:03:01
回答 8查看 3.5K关注 0票数 14

定义

给定函数的最大值和极小值是函数在给定范围内或在函数的整个域中的最大和最小值。

挑战

挑战是使用任何你喜欢的方法来寻找给定多项式函数的局部最大值和极小值。别担心,我会尽我最大的努力来解释这个挑战,让它尽可能简单。

输入将包含所有的系数的单变量多项式,无论是递减或增加的幂阶(取决于你)。例如,

  • [3,-7,1]将代表3x^2 - 7x + 1
  • [4,0,0,-3]将代表4x^3 - 3

如何解决使用衍生产品

现在,假设我们的输入是[1,-12,45,8],它只不过是函数x^3 - 12x^2 + 45x + 8

  1. 第一项任务是找到该函数的导数。因为它是一个多项式函数,所以它确实是一个简单的任务。

x^n的导数是n\times x^{n-1}。与x^n一起存在的任何常数项都是简单地乘以。另外,如果有加/减项,则它们的导数也分别加减。记住,任何常数值的导数都是零。以下是几个例子:

x^3 \to 3x^2
9x^4 \to 9\times4\times x^3 = 36x^3
-5x^2 \to -5\times2\times x = - 10x
2x^3 - 3x^2 + 7x \to 6x^2 - 6x + 7
4x^2 - 3 \to 8x - 0 = 8x
  1. 现在通过将新的多项式等效为零来求解方程,并且只得到x的积分值。
  2. 将这些x值放入原始函数并返回结果。这应该是输出。

示例

让我们以前面提到的例子为例,即[1,-12,45,8]

  • 输入:[1,-12,45,8]
  • 功能:x^3 - 12x^2 + 45x + 8
  • 导数:3x^2 - 24x + 45 + 0 \to [3,-24,45]
  • 解方程:3x^2 - 24x + 45 = 0,我们得到了x = 3x = 5
  • 现在将x = 3x = 5放在函数中,我们得到值(62,58)
  • 输出:[62,58]

假设

  1. 假设所有输入系数都是整数。它们可以按权力的增加或减少的顺序排列。
  2. 假设输入至少是2次多项式.如果多项式没有整数解,则可以返回任何内容。
  3. 假设最终结果仅为整数。
  4. 您可以按任何顺序打印结果。输入多项式的程度不会超过5,这样您的代码就可以处理它。
  5. 输入是有效的,所以x的解不是鞍点。

而且,你也不会被迫用导数方法来做。你可以用任何你想用的方法。

样本输入输出

代码语言:javascript
复制
[2,-8,0] -> (-8)
[2,3,-36,10] -> (91,-34)
[1,-8,22,-24,8] -> (-1,0,-1) 
[1,0,0] -> (0)

评分

这是密码-高尔夫,所以最短的代码获胜。

EN

回答 8

Code Golf用户

回答已采纳

发布于 2018-01-31 16:16:29

果冻,20字节

代码语言:javascript
复制
ASŒRḅ@Ðḟ
J’U×µṖÇḅ@€³

在网上试试!

解释

代码语言:javascript
复制
ASŒRḅ@Ðḟ     Helper Function; find all integer solutions to a polynomial
             All integer roots are within the symmetric range of the sum of the absolute values of the coefficients
A            Absolute Value (Of Each)
 S           Sum
  ŒR         Symmetric Range; `n -> [-n, n]`
      Ðḟ     Filter; keep elements where the result is falsy for:
    ḅ@       Base conversion, which acts like the application of the polynomial
J’U×µṖÇḅ@€³  Main Link
J                             Range of length
 ’                    Lowered
  U          Reversed
   ×         Multiplied with the original list (last value is 0)
    µ        Begin new monadic chain
     Ṗ       Pop; all but the last element
      Ç      Apply last link (get all integer solutions of the derivative)
       ḅ@€³  Base conversion of the polynomial into each of the solutions; apply polynomial to each solution of the derivative.

这个程序中的助手函数是从Xcoder先生的答案这里中提取的,它是基于Luis的答案这里的。

票数 4
EN

Code Golf用户

发布于 2018-01-31 17:59:41

朱莉娅0.6 (带Polynomials包),57字节

代码语言:javascript
复制
using Polynomials
x->map(Poly(x),roots(polyder(Poly(x))))

在网上试试!

取系数的递增顺序,即第一个输入是常数项。

示例运行:

代码语言:javascript
复制
julia> using Polynomials

julia> g = x -> map(Poly(x), roots(polyder(Poly(x))))
(::#1) (generic function with 1 method)

julia> g([8,45,-12,1])
2-element Array{Float64,1}:
 58.0
 62.0
票数 3
EN

Code Golf用户

发布于 2018-01-31 18:39:43

Wolfram语言(数学),30字节

代码语言:javascript
复制
a@x/.#&/@Solve[a=#;#'@x==0,x]&

采用纯函数多项式(即以#为变量,末尾为&的多项式)。

在网上试试!

票数 3
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codegolf.stackexchange.com/questions/154482

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档