【发布时间】:2021-01-27 11:33:15
【问题描述】:
我从事理论物理学工作,遇到了一个问题,该问题需要最小化一个具有 8 个粒子的系统的特定哈密顿算子,并具有一个非线性约束。由于系统的复杂性,我无法“一次性”定义整个哈密顿量,也无法定义约束。我的意思是我要搜索的量是反复定义的,取决于对 7 个粒子系统计算的量的复杂总和,而这又取决于为 6 个系统计算的量,依此类推,直到它达到一个或双粒子系统,其中所述量作为初始值给出,取决于列向量的元素(参数/最小化参数)。约束本身也是这种形式,要求 8 个粒子的状态之间的“重叠”恰好为 1。(即状态被归一化)我一直在考虑一种使用 fmincon 的方法,但我来了简而言之,因为我的函数隐含地依赖于参数,我不能明确地写出整个事情。为了更好地理解,这里是一些代码:
for m=3:npairs+1
for n=3:npairs+1
for i=1:nsps
for j=1:nsps
overlap(m,n)=overlap(m,n)+x(i)*x(j)*(delta(i,j)*(overlap(m-1,n-1)-N(m-1,n-1,i))+p0p(m-1,n-1,j,i));
p(m,n,i)=(n-1)*x(i)*overlap(m,n-1)-(n-2)*(n-1)*x(i)*x(i)*((m-1)*x(i)*overlap(m-1,n-1)-(m-2)*(m-1)*x(i)*x(i)*p(m-1,n-1,i));
N(m,n,i)=2*(n-1)*x(i)*p(n-1,m,i);
p0p(m,n,i,j)=(m-1)*(n-1)*x(i)*x(j)*overlap(m-1,n-1)-(m-1)*(n-1)*(m-2)*x(i)*x(i)*x(j)*p(m-2,n-1,i)-(m-1)*(n-1)*(n-2)*x(i)*x(j)*x(j)*p0(m-1,n-2,j)-(m-1)*(n-1)*(m-2)*(n-2)*x(i)*x(i)*x(j)*x(j)*(delta(i,j)*(overlap(m-2,n-2)-N(m-2,n-2,i))+p0p(m-2,n-2,j,i));
endfor
endfor
endfor
endfor
function [E]=H(x)
E=summation over all i and j of N and p0p for m=n=8 %not actual code
endfunction
overlap(9,9)=1 %constraint
【问题讨论】:
-
因为这是 Octave 而不是 MATLAB,所以该标签更合适。这里的症结似乎也在于数学;你试图用文字来定义问题,但用方程和函数来定义它会使代码的翻译变得更简单。如果没有关于这段代码试图做什么的上下文,没有关于变量是什么的任何内联 cmets,或者关于为什么这段代码没有实现的任何信息,“这里是一些代码”并没有提供太多帮助你要什么。
-
@Wolfie 我也使用了 Octave 标签,但鉴于这是我的第一个问题并且语法几乎相同,我认为如果问题同时被标记,我将有更多机会得到答案。如果这引起了任何误解,我深表歉意,并且将来会更加小心。定义整个问题以及所述方程中每个术语的实际含义需要相当多的量子核理论知识,而且我对让某人修复已经为我编写的部分不感兴趣,因为我知道它们是正确的。我只是想用约束来最小化函数
-
如果问题需要量子核理论背景,那么公共问答网站可能不是您所需要的。底线是您正在尝试实现一些数学运算,并且没有提供方程式,这使得它更加主观(仅基于您的描述)并且更难回答。如果您认为背景超出了我们的范围,那么您需要简化问题;为了minimal reproducible example,一个8层递归可以变成一个2层递归,一个大系统可以变成一个小系统,这也有助于你自己理解你的问题。
标签: optimization octave physics nonlinear-optimization