【问题标题】:Solving a non linear system in java (using optim toolbox)在java中求解非线性系统(使用优化工具箱)
【发布时间】:2013-12-20 11:07:41
【问题描述】:

我有一个非线性动力学系统,我可以将其求解到最优。我知道如何在 MATLAB 中做到这一点,但我希望在 JAVA 中实现这一点。由于某种原因,我迷失在如何用 Java 中做到这一点。

我所拥有的如下:
z(t),它返回动态系统中的状态。

z(t) = [state1(t),...,state10(t)]

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

z'(t) = f(z(t),u(t),d(t)) = [dstate1(t)/dt,...,dstate10(t)/dt]

其中 u(t)d(t) 是一些我知道其值的外部变量。 此外,我还有一个函数,让我们表示从状态变量定义的 g(t)

g(t) = state4(t)/c1

其中 c1 是一些常数。

现在我希望求解以下无约束非线性系统:

g(t) - c2 = 0

f(z(t),u(t),0)= 0

其中 c2 是一些常数。上面的系统可以看作是一个简单的 f'(x) = 0 问题,由 11 个方程和 1 个未知数组成,如果我应该在 MATLAB 中解决这个问题,我会做以下事情:

[output] = fsolve(@myDerivatives, someInitialGuess);

我知道 JAVA 没有任何内置求解器。因此,在我看来,解决上述问题有两种选择:
选项 1:自己动手:我可以使用数值方法,例如高斯牛顿或类似的非线性方程组求解。不过,我会先使用 java 工具箱,然后再使用数值方法。

选项 2:求解器(例如 commons optim) 这个解决方案是我想要研究的。我一直在研究这个工具箱,但是,我没有找到一个关于如何实际使用 MultiVariateFunction 评估器和数值优化器的确切示例。你们中有人有这方面的经验吗?

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

【问题讨论】:

  • 您能否说明 z'(t) 的含义,它是一个包含 10 个值的数组,为 0 ? Java没有自带求解库,需要自己实现。
  • 由于 Java 不附带数学求解库,因此有 2 种(可能 3 种)方法来处理它: 1. 下载一个支持数学的库 - 也许 commons.apache.org/proper/commons-math 会派上用场; 2、matlab与java的混合:你不妨看看mathworks.com/products/javabuilderstackoverflow.com/questions/1607933/…; 3.自己做
  • 我认为你最好在 Google 上搜索(比如)“java 非线性优化”并搜索搜索结果。
  • 我现在已经完善了关于 commons optim 工具箱的问题,我已经研究过 - 但未能实施。
  • @PeterLawrey z'(t)=0,表示状态向量 z(t) 的值不应改变。

标签: java matlab optimization numerical-methods


【解决方案1】:

请比较你原来的问题是什么样子的:


一个全局优化问题

minimize f(y)

通过寻找导数系统的解来解决

0=grad f(y) or 0=df/dy (partial derivatives)

(梯度是包含所有偏导数的列向量),也就是说,您正在计算 f(y) 的“平坦”或水平点。


在约束条件下进行优化

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) 

【讨论】:

  • 为什么这被接受为答案?它没有提供解决方案。我问是因为我想自己解决一个非线性系统。
猜你喜欢
  • 2019-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-14
  • 2021-01-04
  • 2019-08-20
  • 2020-04-03
相关资源
最近更新 更多