1

很抱歉标题措辞如此混乱,但很难将这个问题浓缩为几句话。

我试图找到特定方程的最小值。起初,我正在遍历等式,对于我们的目的而言,它可能类似于y = .245x^3-.67x^2+5x+12. 我想设计一个循环,其中通过循环的“步骤”越来越小。

例如,第一次循环时,它使用步长 1。我会得到大约 30 个值。我需要帮助的是如何使用从第一个循环中收到的三个最小值?

这是我可能从第一个循环中获得的值的示例:(我应该注意这根本不应该是实际代码。这只是对正在发生的事情的简要描述)

loop from x = 1 to 8 with step 1

results:

x = 1 -> y = 30
x = 2 -> y = 28
x = 3 -> y = 25
x = 4 -> y = 21
x = 5 -> y = 18
x = 6 -> y = 22
x = 7 -> y = 27
x = 8 -> y = 33

我想要一些可以检测最低三个值并创建循环的东西。从这些结果中,得到 y 的最小三个结果的 x 值是x = 4, 5, and 6

所以我此时的“猜测”是 x = 5。为了得到更好的“猜测”,我想要一个现在可以做的循环:

loop from x = 4 to x = 6 with step .5

我可以继续这种模式,直到我对 x 的最小值得到一个荒谬的准确猜测。

有人知道我可以做到这一点吗?我知道我将获得的值将能够通过抛物线开放来建模,所以这种格式肯定会起作用。我在想这些值可以放在一列中。制作返回该列中 y 的最小值和相应的 x 值的东西并不难。

如果我太含糊,请告诉我,我可以回答您可能遇到的任何问题。

4

2 回答 2

1

好问题。这至少是我认为你应该为此做的事情的开始:

Sub findMin()
    Dim lowest As Integer
    Dim middle As Integer
    Dim highest As Integer
    lowest = 999
    middle = 999
    hightest = 999

    Dim i As Integer
    i = 1
    Do While i < 9
        If (retVal(i) < retVal(lowest)) Then
            highest = middle
            middle = lowest
            lowest = i
        Else
            If (retVal(i) < retVal(middle)) Then
                highest = middle
                middle = i
            Else
                If (retVal(i) < retVal(highest)) Then
                    highest = i
                End If
            End If
        End If
    i = i + 1
    Loop
End Sub

Function retVal(num As Integer) As Double
    retVal = 0.245 * Math.Sqr(num) * num - 0.67 * Math.Sqr(num) + 5 * num + 12
End Function

我在这里所做的是将三个整数设置为您的三个最小值:最低、中间和最高。您循环遍历要插入公式的值(此处为 retVal 函数),并将 retVal(因此得名)的返回值与 retVal(最低)、retVal(中)和 retVal(最高)的值进行比较,根据需要更换它们。我刚刚开始使用 VBA,所以我所做的可能不是很优雅,但它至少可以识别导致函数值最低的整数。您可能需要稍微调整一下最低、中间和最高的值才能使其正常工作。我知道这并不完全是您正在寻找的东西,但它与我认为您应该做的事情差不多。

于 2012-07-21T00:50:08.197 回答
1

除非缩小问题域,否则没有简单的方法可以解决这个问题。

给出的示例多项式实际上没有最小值,这很容易通过观察确定y'>0(因此,y 总是增加 WRT x)。

鉴于广泛的解释

[an] 方程,对于我们的目的来说,它可以是 y = .245x^3-.67x^2+5x+12

即使假设域仅限于多项式,也需要检查许多条件。

多项式阶数很重要,阶数决定了检查有多少解是可能的或是否有任何解是可能的必要条件。

如果不考虑这种复杂性,迭代方法可能会由于下溢错误或迭代步骤或边界的不幸选择而产生不正确的解决方案。

我不是在这里努力,我认为你的想法很巧妙。在实践中,它比你想象的要复杂。

于 2012-07-21T02:43:08.910 回答