用java求解非线性系统(使用optim工具箱)

用java求解非线性系统(使用optim工具箱),java,matlab,optimization,numerical-methods,Java,Matlab,Optimization,Numerical Methods,我有一个非线性动力学系统,我需要求解它的最优性。我知道如何在MATLAB中实现这一点,但我希望用JAVA实现这一点。出于某种原因,我对如何在Java中实现这一点感到迷茫 我所拥有的是: 在动态系统中返回状态的zt zt=[state1t,…,state10t] 该动态系统的变化率由下式给出: z't=fzt,ut,dt=[dstate1t/dt,…,dstate10t/dt] 其中,ut和dt是一些我知道其值的外部变量。 此外,我还有一个函数,表示从状态变量定义的gt: gt=状态4T/c1 其

我有一个非线性动力学系统,我需要求解它的最优性。我知道如何在MATLAB中实现这一点,但我希望用JAVA实现这一点。出于某种原因,我对如何在Java中实现这一点感到迷茫

我所拥有的是: 在动态系统中返回状态的zt

zt=[state1t,…,state10t]

该动态系统的变化率由下式给出:

z't=fzt,ut,dt=[dstate1t/dt,…,dstate10t/dt]

其中,ut和dt是一些我知道其值的外部变量。 此外,我还有一个函数,表示从状态变量定义的gt:

gt=状态4T/c1

其中c1是某个常数

现在我想数值求解以下无约束非线性系统:

gt-c2=0

fzt,ut,0=0

其中c2是某个常数。上述系统可视为一个简单的f'x=0问题,由11个方程和1个未知数组成,如果我想在MATLAB中解决这个问题,我将执行以下操作:

[output] = fsolve(@myDerivatives, someInitialGuess);
我知道JAVA没有任何内置解算器。因此,在我看来,解决上述问题有两种选择: 选项1:我自己做:我可以使用数值方法,例如高斯-牛顿或类似的方法来解决这个非线性方程组。不过,我将首先使用java工具箱,然后再使用数值方法

选项2:解决方案,例如commons optim这个解决方案是我想要研究的。我一直在研究这个工具箱,但是,我没有找到一个确切的例子,说明如何实际使用多变量函数计算器和数值优化器。你们当中有没有人有这样做的经验

如果您对解决这个问题有任何想法或建议,请告诉我。
谢谢

请比较原始问题的外观:

一个全局优化问题

minimize f(y)
通过寻找导数系统的解来求解

0=grad f(y) or 0=df/dy (partial derivatives)
梯度是包含所有偏导数的列向量,也就是说,计算fy的平面点或水平点

约束条件下的优化问题

minimize f(y,u) such that g(y,u)=0
建立拉格朗日泛函

L(y,p,u) = f(y,u)+p*g(y,u)  (scalar product)
然后计算系统的平面点,也就是

g(y,u)=0, dL/dy(y,p,u)=0, dL/du(y,p,u)=0
然后,就像在全局优化的情况下一样,您必须确定平坦点的类型,最大、最小或鞍点

最优控制问题的结构是几个等价变量之一

minimize integral(0,T) f(t,y(t),u(t)) dt

such that y'(t)=g(t,y(t),u(t)), y(0)=y0 and h(T,y(T))=0
为了解决这个问题,我们考虑哈密顿量

H(t,y,p,u)=f(t,y,u)-p*g(t,y,u)
并得到了变换后的问题

y' = -dH/dp = g, (partial derivatives, gradient)
p' =  dH/dy, 
   with boundary conditions 
       y(0)=y0, p(T)= something with dh/dy(T,y(T)) 
u(t) realizes the minimum in v -> H(t,y(t),p(t),v) 

你能包括它对z't意味着什么吗?z't是一个由10个值组成的数组,其值为0?Java不附带求解库,您需要自己实现这些库。下载一个支持数学的库——可能很方便;2.将matlab与java混合使用:您可能想看看和;三,。你自己做吧我想你最好在谷歌上搜索一下,比如java非线性优化和搜索结果。我现在已经完善了关于commons optim工具箱的问题,我已经研究过了,但没有实现。@PeterLawrey z't=0,意味着状态向量zt的值不应该改变。为什么会接受这个答案?它没有提供解决方案。我这样问是因为我想自己解决一个非线性系统。