如何根据前一个循环的回答select循环的范围?

对不起,这个标题是如此混乱的措辞,但很难把这个问题压缩成几句话。

我试图find一个特定方程的最小值。 起初,我正在循环这个方程,在这里我们的目的可以是y = .245x^3-.67x^2+5x+12 。 我想devise一个循环,循环中的“步骤”越来越小。

例如,它第一次循环,它使用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 

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

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

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

我可以保持这种模式,直到我得到一个荒唐准确的猜测x的最小值。

有人知道我能做到这一点吗? 我知道我将要得到的价值观将能够通过开放的抛物线来模拟,所以这种格式肯定会起作用。 我在想这个价值可以放在一个专栏里。 在这个列中返回y的最小值和相应的x值并不难。

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

很好的问题。 这至less是我认为你应该为此做的一个开始:

 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,所以我所做的可能不是很优雅,但至less可以确定导致函数最低值的整数。 你可能不得不玩弄最低,中等和最高的价值,使其工作。 我知道这不是你要找的东西,但是这是我认为你应该做的。

除非问题范围缩小,否则没有办法解决这个问题。

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

鉴于广泛的解释

我们这里的目的可以是y = .245x ^ 3-.67x ^ 2 + 5x + 12

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

多项式的顺序是显着的,顺序决定了检查有多less解决scheme是可能的,或者是否有任何解决scheme是必要的。

在不考虑这种复杂性的情况下,由于下溢错误或迭代步骤或边界的不幸select,迭代方法可能产生不正确的解决scheme。

我不想在这里努力,我认为你的想法很整洁。 在实践中,它比你想象的更复杂。