Excel 算法:找到两个差最小且乘积已知的正整数 一些背景。。。
我目前正在建立一个宏,将估计一个注塑模具的成本。这些工具有用塑料填充的空腔。工具的型腔数是将形成的零件数 到目前为止,我的程序将根据客户需求确定工具可以具有的最小型腔数。这个数字总是偶数。工具应具有偶数个空腔。给定型腔的边界长度和宽度,并设置型腔在工具内可以占据的空间限制,我需要我的程序计算沿长度和宽度的型腔数量组合,其差值最小,其乘积等于工具应具有的最小型腔总数 我正在编程我的宏是SolidWorks VBA。我首先在Excel中构建了这个问题,并使用了求解工具。但是,我无法找到一种方法来引用SolidWorks中的Excel解算器工具来自动化此优化问题。我希望能找到一套聪明的方程式,为我解决这个具体问题。但是如果其他人对使用什么有更好的想法,那就太棒了 以优化格式重新表述。。。 变量Excel 算法:找到两个差最小且乘积已知的正整数 一些背景。。。,excel,vba,algorithm,optimization,solidworks,Excel,Vba,Algorithm,Optimization,Solidworks,我目前正在建立一个宏,将估计一个注塑模具的成本。这些工具有用塑料填充的空腔。工具的型腔数是将形成的零件数 到目前为止,我的程序将根据客户需求确定工具可以具有的最小型腔数。这个数字总是偶数。工具应具有偶数个空腔。给定型腔的边界长度和宽度,并设置型腔在工具内可以占据的空间限制,我需要我的程序计算沿长度和宽度的型腔数量组合,其差值最小,其乘积等于工具应具有的最小型腔总数 我正在编程我的宏是SolidWorks VBA。我首先在Excel中构建了这个问题,并使用了求解工具。但是,我无法找到一种方法来引用
- x=沿刀具宽度的型腔数
- y=沿刀具长度的型腔数
- z=建议的总空腔数
- x*y=z
- x>=1
- y>=1
- x只是澄清一下,在这个问题上,你实际上是想
而不是miny-x
?否则,采用minx-y
和x=1
是一种幼稚的解决方案<代码>最小x-y=1-z 我不使用VBA编程,但这里是我的想法y=z
由于
和x
是正整数,并且有y
的乘积,我想你可以用z
x测试几个例子。不需要花哨的算法 如果将条件放宽为2个数,
和x
,其乘积为y
,且差值最小,则答案为z
这不是一个满足您需求的整数(通常)。但是,您可以尝试平方根周围的整数,查看它们是否除以SQRT(z)
。您点击的第一个按钮(即与z
的最小差值)应具有最小差值SQRT(z)
如果您放宽条件,使
最小化,那么我建议测试|z-x*y |
周围的数字。你需要检查两种情况——平方根的下限和上限(以及相应的其他数字)。以防万一将来有人需要类似的东西,但无法找出我编写的伪代码。我不确定如何将其输出为两个值,所以我只是将它们作为字符串放在一起,供用户查看sqrt(z)
Option Explicit Function Factors(ByVal Test As Long) As String Dim Val As Long Dim i As Long Val = Test i = Int(Sqr(Val)) While Val / i >= 2 If Int(Val / i) * i = Val Then Factors = i & " & " & Val / i Exit Function End If i = i - 1 Wend End Function
您能给我们宏的代码并告诉我们问题的确切位置吗?我担心这个问题对于堆栈溢出来说太广泛了-请将您的问题缩小到一个问题,以便我们可以帮助您。x的答案是z到sqrt(z)的最接近的除数。所以从sqrt(z)迭代到1,如果这个数除以z,那么x就是这个数,z/x就是y@Joe . . . 48是相当“没有废话”。42的结果会是什么?@juvian我意识到我的错误-我现在明白了:)是的,我应该有Min y-x。抢手货这是一个很好的解决方案。我可以很容易地用vba编写代码。谢谢Option Explicit Function Factors(ByVal Test As Long) As String Dim Val As Long Dim i As Long Val = Test i = Int(Sqr(Val)) While Val / i >= 2 If Int(Val / i) * i = Val Then Factors = i & " & " & Val / i Exit Function End If i = i - 1 Wend End Function