我正在尝试做一些数字,并且很难确定解决问题的适当方法并寻找一些反馈。
到目前为止,我已经在Mathematica完成了所有工作,但是,我相信我需要更多地控制算法的时候到了。
我无法发布图片,所以这里是link
其中H是重质纤维素。 C(k)
只是C(r)
和m=4
的FT。在我的情况下,N
是2000
所以你可以看到欧米茄是大量指数的总和。 rho
只是密度。您可以看到C(r)
,因为m=4
具有不同的a
系数。 IRISM最终是a
系数的函数。
我认为这三个方程式正常运行我认为在Mathematica中我会尽量减少IRISM并找到4个a
值。我遇到的问题是,由于显而易见的原因,当积分中的对数等于零时,存在不连续性。我似乎无法找到修改Mathematica算法的方法(它们是黑盒子是正确的术语吗?)以便检查试验a
值。我正在使用Nelder-Meade和差分进化并尝试不同的约束。但是,我似乎只得到了虚构的结果,显然是来自负的日志,或者如果我足够好地约束以避免显然只有局部最小值,因为我的结果与“正确”结果不匹配。我尝试了几次使用渐变的最小化算法但是我没有太多运气。
我认为我向前迈进的最好方法是从头开始编写最小化例程,或者修改其他代码,这样我就可以在集成之前检查IRISM以确定不连续性。我已经阅读了一些关于惩罚函数,log-barrier等的内容,但对编程有点新意,希望有人能够让我知道一个好的方法是什么开始。我认为最重要的是有太多关于优化的信息,我发现很难知道从哪里开始。
编辑:这是原始输入。如果我需要以不同的方式发布,请告诉我。
OverHat[c][a1_, a2_, a3_, a4_, k_] := (a1*(4*Pi*(Sin[k] - k*Cos[k])))/k^3 +
(a2*(4*Pi*(k*Sin[k] + 2*Cos[k] - 2)))/k^4 +
(a3*(8*Pi*(2*k - 3*Sin[k] + k*Cos[k])))/k^5 +
(a4*(-(24*Pi*(k^2 + k*Sin[k] + 4*Cos[k] - 4))))/k^6
Subscript[OverHat[\[Omega]], \[Alpha]\[Gamma]][k_, \[Alpha]\[Gamma]_, n_] :=
Exp[(-k^2)*\[Alpha]\[Gamma]*((n - \[Alpha]\[Gamma])/(6*n))]
OverHat[\[Omega]][k_] := Sum[Subscript[OverHat[\[Omega]], \[Alpha]\[Gamma]][k, \[Alpha]\[Gamma], n],
{\[Alpha]\[Gamma], 1, n}] /. n -> 2000
IRISM[a1_, a2_, a3_, a4_, \[Rho]_, kmax_] :=
\[Rho]^2*(1/15)*(20*a1 - 5*a2 + 2*a3 - a4)*Pi -
(1/(8*Pi^3))*NIntegrate[(\[Rho]*OverHat[\[Omega]][k]*OverHat[c][a1, a2, a3, a4, k] +
Log[1 - \[Rho]*OverHat[\[Omega]][k]*OverHat[c][a1, a2, a3, a4, k]])*4*Pi*k^2,
{k, 0, kmax}, WorkingPrecision -> 80]
NMinimize[IRISM[a1, a2, a3, a4, 0.9, 30], {a1, a2, a3, a4},
Method -> "DifferentialEvolution"]
答案 0 :(得分:1)
Mathematica的FindMinimum
如果看到一个虚数就会中止。即使您的目标在约束内是实值,也会发生这种情况,因为默认的障碍方法因为精度控制不佳而且偶尔会超出界限。最简单的方法是将您的目标包裹在Re
内。如果您发布完整的代码,您可能会得到更好的答案。
一些一般性建议:
尝试简化Mathematica的目标比重新实现优化算法更容易。原因是一种算法失败通常意味着它是一个难题,其他算法也会失败。
我曾经遇到过FindMinimum
发出警告并且无法收敛到正确最小值的问题,我可以通过不同的方法确定分析结果,当我绘制目标表面时,它是有意义的{ p>
http://yaroslavvb.com/upload/save/so-plateau.png
在这种情况下,您可以看到问题的严重程度非常严重(几乎是一个稳定状态),并且最小化难以本地化。
当你有不等式约束时,默认方法是Barrier方法,这种方法很昂贵并且提供的精度控制很差。非常低效的事情是将等式约束指定为不等式对,即代替a=b
,具有a>=b
和a<=b
。这可能慢3到10倍,而且在数值上也更差 - 结果中a和b可能只是大致相等。
理想情况下,目标是获得一个凸出的问题,没有任何不等式约束并且条件良好。