[英]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.