gpt4 book ai didi

excel - 为什么这只生成一对解决方案

转载 作者:行者123 更新时间:2023-12-02 19:11:53 26 4
gpt4 key购买 nike

这是一个有点有线的问题。

我有一个长达 1500 行的代码,其中包含多个子代码,背后的想法是平滑 100,000 个数据点。

我在代码中有一个随机数生成器,如下所示,但每当我运行主代码时,我的两个限制始终是 UpperAngleLimit= 79LowerAngleLimit = 6 但每当我只运行这个子程序,我发现我得到了完全随机的数字,如计划的那样。

下面是随机限制生成的代码。

Sub Random_Limits()

UpperAngleLimit = Int((90 - 1 + 1) * Rnd + 1)
LowerAngleLimit = Int((90 - 1 + 1) * Rnd + 1)




If UpperAngleLimit = LastUpperLimit Then

Call Random_Limits

Else

If LowerAngleLimit = LastLowerLimit Then

Call Random_Limits

Else

If UpperAngleLimit > LowerAngleLimit Then

If UpperAngleLimit > 60 Then

If LowerAngleLimit < 45 Then

LastLowerLimit = LowerAngleLimit
LastUpperLimit = UpperAngleLimit

Call Calculate_Angle

Else

Call Random_Limits

End If

Else

Call Random_Limits

End If

Else

Call Random_Limits

End If

End If

End If

End Sub

我还添加了 UpperAngleLimitLowerAngleLimit 的所有其他提及。

Global UpperAngleLimit As Double
Global LowerAngleLimit As Double

^^变量定义

RandomLimits = MsgBox("Would you like to have random limits generated?", vbYesNo)

If RandomLimits = vbYes Then

Call Random_Limits

End If

UpperAngleLimit = InputBox("What Upper Angle Limit would you like to spline the curve from?")
LowerAngleLimit = InputBox("What Lower Angle Limit would you like to spline the curve from?")

Call Limit_Def

^^ 如果用户不想随机生成限制,则使用

If Cells(j, 3) < UpperAngleLimit And Cells(j, 3) > LowerAngleLimit Then

^^ 用于识别单个细胞

Cells(1, 4) = "Curve Data produced for limits at " & UpperAngleLimit & " and " & LowerAngleLimit & " @ " & Limit

^^ 用于命名数据​​组

这些都是提到 UpperAngleLimitLowerAngleLimit

我意识到,我可能很难让您遇到与我始终为 79 和 6 相同的问题,但您可能会看到我忽略的明显错误。

一些额外的细节,

代码在第三次循环中始终会生成 79 和 6,并且之前生成的数字相同。

运行 1 - UpperAngleLimit = 64 LowerAngleLimit = 49运行 2 - UpperAngleLimit = 74 LowerAngleLimit = 64运行 3 - UpperAngleLimit = 78 lowerAngleLimit = 72运行 4 - UpperAngleLimit = 79 LowerAngleLimit = 6

这已通过 5 次运行得到确认

我没有附加调用 Random_Limits 来提供更多详细信息的子程序

Sub Data_SetUp()

Application.ScreenUpdating = False

Sheets("Sheet1").Columns(2).Copy Destination:=Sheets("Sheet2").Columns(1)
Sheets("Sheet1").Columns(5).Copy Destination:=Sheets("Sheet2").Columns(2)

Worksheets("Sheet2").Activate
Rows(4).EntireRow.Delete

Cells(3, 1) = "Time"
Cells(3, 2) = "Throttle"
Cells(3, 3) = "Angle"
Cells(2, 1).Select
Selection.ClearContents


StartTimer = Timer


Iterations = InputBox("How many iteration would you like to run?")
IterationNumber = 1

RandomLimits = MsgBox("Would you like to have random limits generated?", vbYesNo)

If RandomLimits = vbYes Then

Call Random_Limits

End If

UpperAngleLimit = InputBox("What Upper Angle Limit would you like to spline the curve from?")
LowerAngleLimit = InputBox("What Lower Angle Limit would you like to spline the curve from?")

Call Limit_Def

End Sub

根据要求,这里是Limit_Def

Sub Limit_Def()

LimitUpdate = MsgBox("Would you like to keep the distance limit the same throughout?", vbYesNo)

If LimitUpdate = vbYes Then

LimitNow = MsgBox("Would you like to choose your limit now?", vbYesNo)

If LimitNow = vbYes Then

Limit = InputBox("Please set a line distance limit")

Else

End If
End If



Call Calculate_Angle

End Sub

感谢您提供的任何帮助。

最佳答案

根据this answer :如果您遇到 Rnd 问题,请使用 Randomize事先重新播种随机数生成器。

Syntax

Randomize [ number ]

The optional number argument is a Variant or any valid numeric expression.

Remarks
Randomize uses number to initialize the Rnd function's random-number generator, giving it a new seed value. If you omit number, the value returned by the system timer is used as the new seed value. If Randomize is not used, the Rnd function (with no arguments) uses the same number as a seed the first time it is called, and thereafter uses the last generated number as a seed value.

为什么 Rnd 在某些情况下可以单独工作,而在其他情况下则不能单独工作,这有点超出了我的理解范围,但我大胆猜测这与主子控制权有关堆栈或运行时范围,防止 Rnd 随机化自身(正如它应该的那样) - 本质上创建了上面引用末尾描述的情况。也许吧。

关于excel - 为什么这只生成一对解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48277502/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com