gpt4 book ai didi

memory - Mathematica NMinimize 遇到内存问题

转载 作者:行者123 更新时间:2023-12-02 03:54:40 24 4
gpt4 key购买 nike

我试图最小化我的函数“FunctionToMinimize”,其定义如下:

FunctionToMinimize[a_, b_, c_, d_] := (2.35*Sqrt[
Variance[1/2*
(a*#1 + b*#2 + c*#3 + d*#4)
]
]
/Mean[1/2*(a*#1 + b*#2 + c*#3 + d*#4)])
&[DataList1[[1 ;; 1000]],DataList2[[1 ;; 1000]],
DataList3[[1 ;; 1000]], DataList4[[1 ;; 1000]]]

四个参数 a、b、c 和 d 被限制在 0.5 到 1.5 之间。我现在的问题是,如果我调用

NMinimize[{Funktion[w, x, y, z],
0.75 < w < 1.25 && 0.75 < y < 1.25 && 0.75 < x < 1.25 && 0.75 < z < 1.25},
{w, x, y, z}]

Mathematica 内核因内存不足而关闭。如果我只使用 DataLists 中的前 100 个条目,它会找到我的结果(在 4.1 秒内),但如果我使用 DataList[[1;;1000]] 或更多条目,内核就会崩溃。

有人知道为什么 NMinimize 函数使用这么多内存吗?我需要最小化每个列表中的 150'000 个事件...

感谢您的回答,干杯,安德烈亚斯

最佳答案

我猜想(但没有以任何方式检查过)问题是在每次调用你的函数时,Mathematica 都试图构建一个从你所有数据派生的符号表达式,它占用的内存比你多得多' d期待。

无论如何,好消息是——如果你不久前就忘记了这个问题——你可以把这个函数变成更简单的东西。

所以,首先,2.351/2 只是将您的函数改变一个常数因子,而不会影响最小值的位置,所以让我们忽略它们。接下来,您的函数始终是非负的,因此最小化它与最小化其平方相同,所以让我们这样做吧。

现在您正在尝试最小化 var(aw+bx+cy+dz)/mean(aw+bx+cy+dz)^2,其中 w、x、y、z 是(可能相当长的)向量。

现在您的分子和分母都只是 a、b、c、d 的二次形式,其系数(以固定方式)取决于这些向量。具体来说,假设您的向量长度为​​ N。那么您的函数就是

[总和(aw+bx+cy+dz)^2/N - 总和(aw+bx+cy+dz)^2/N^2]/(总和(aw+bx+cy+dz)^2/N^2)

您可能更愿意将其写为 N sum(aw+bx+cy+dz)^2/sum(aw+bx+cy+dz)^2 - 1

而在该分数中,例如bc在分子中的系数是2 sum(xy),而分母中的系数是2 sum(x) sum(y)。

因此,您可以采用大向量,计算相关系数一次,然后只要求 Mathematica 优化形式为(二次/二次)的函数,这应该非常轻松。 p>

关于memory - Mathematica NMinimize 遇到内存问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13234450/

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