簡體   English   中英

在Java中解決非線性系統(使用優化工具箱)

[英]Solving a non linear system in java (using optim toolbox)

我有一個非線性動力學系統,需要對其求解才能達到最優。 我知道如何在MATLAB中執行此操作,但是我希望在JAVA中執行此操作。 由於某種原因,我迷失在Java語言中。

我有以下內容:
which returns states in a dynamic system. 返回動態系統中的狀態。


該動態系統的變化率由下式給出:


and is some external variables that I know the value of. 其中是一些我知道其值的外部變量。 which is defined from a state variable: 另外我有一個函數,讓我們表示從狀態變量定義的


is some constant. 其中是一些常數。

現在,我想用數值方法求解以下不受約束的非線性系統:

is some constant. 其中是一些常數。 上面的系統可以看作是一個簡單的f'(x)= 0問題,由11個方程和1個未知數組成,如果我應該在MATLAB中解決這個問題,則可以執行以下操作:

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

我知道JAVA沒有附帶任何內置求解器的事實。 因此,正如我所見,解決上述問題有兩種選擇:
選擇1:自己動手 :我可以使用數值方法(例如高斯牛頓或類似方法)來求解該非線性方程組。 但是,我將首先使用Java工具箱,然后再使用數值方法。

選項2:求解器(例如,對公地的樂觀主義者)這種解決方案是我想要研究的。 我一直在研究此工具箱,但是,我沒有找到確切的示例說明如何實際使用MultiVariateFunction評估程序和數值優化程序。 你們中有任何經驗嗎?

如果您有解決此問題的任何想法或建議,請告訴我。 謝謝!

請比較您原來的問題是什么樣的:


全局優化問題

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) 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM