継手のパラメータの微分方程式を用いオクターブ/matlab ODE solver
-
18-09-2019 - |
質問
を使用していOdePkgにオクターブを解決するシステムの硬い皮などによるode5r:
function yprime = myODEs(t,Y,param)
yprime = [
- param(1) * Y(1); # ODE for Y(1)
param(1) * Y(1) - param(2) Y(2) * Y(3); # ODE for Y(2)
param(2) Y(2) * Y(3) # ODE for Y(3)
# etc.
];
time_span = [1, 24] # time span of interest
Y0 = [1.0, 1.1, 1.3] # initial values for dependent variables Y
param = [7.2, 8.6, 9.5] # parameters, to be optimized
[t, Y] = ode5r(@myODEs, time_span, Y0, ..., param);
の計算店舗の従属変数Yマトリックスに関して時間t(ベクター):
t Y(1) Y(2) Y(3)
0.0 1.0 1.1 1.3
0.1 ... ... ...
0.5 ... ... ...
0.9 ... ... ...
... ... ... ...
4.0 ... ... ...
... ... ... ...
24.0 ... ... ...
い合わせのパラメータparam、当然のことですが、そのような変数Yを最も基準値の例:
t Y(1) Y(2) Y(3)
0.5 1.1 N/A N/A
1.0 1.9 N/A N/A
4.0 2.3 2.7 2.1
5.0 N/A 2.6 2.2
24.0 0.9 1.5 2.0
るオクターブ/Matlab(その他の言語は歓迎)常 を行うマルチパラメータ(少なくともスクエア/スプライン)fit?どのようにして可能か 結合パラメータセットの初期値 Y0のフ?私は嬉しいをご提供いただければアの作家を招聘したいと思っていヒントと可能性をもたらしました。
コンテンツ一覧 サイモン
解決
この比較的単純でとscipy. scipy.optimize.leastsq()
かるべき配列を返しの差が指定されたパラメータベクトルとなっています。まを最小限に和の正方形の残差.取扱い、複数のデータセットの異なる初期値を、あなただけの常微分方程式に対して一回のデータセットを計算し、残差の各データセット/run対して連結し、残存ベクター。こちらは、ラフスケッチ:
import numpy
from scipy import integrate, optimize
# The initial guess.
p0 = numpy.array([7.2, 8.6, 9.5])
# The collected datasets.
# A list of (t, y0, y) tuples.
# The y's are all (len(y0), len(t))-shaped arrays. The output of
# integrate.odeint is also in this format.
datasets = [...]
def odes(y, t, params):
dydt = [
-params[0] * y[0],
params[0]*y[0] - params[1]*y[1]*y[2],
params[1]*y[1]*y[2],
]
return np.array(dydt)
def residuals(params, datasets):
res = []
for t, y0, y in datasets:
res.append(integrate.odeint(odes, y0, t, args=(params,)) - y)
# Stack them horizontally and flatten the array into the expected vector.
# You're on your own for handling missing data. Look into the numpy.ma
# module.
all_residuals = numpy.hstack(res).ravel()
return all_residuals
opt_params, err = optimize.leastsq(residuals, p0, args=(datasets,))
他のヒント
ということでしょうか各関数y(t)のニーズに搭載される?その場合は、リース正方形またはスプラインにふそれぞれのYi対時間の作業です。だれすることになりず見ます。
いくおそれがないことから独立変数の場合平均したい曲線にフィット全ての値Yi指定された時点として視聴中に利用できる機能視聴中にカーブ進化させます。
更新:少なくとも角継手は何ではないので、特に日常のことをお勧めします。- SciPy一, いですよね。ごめんないのよ。私だけの学習Pythonです。
どうなるかはわからないがんによる"フィットネスアイコンが表示されている.張力の計算係数を最小化するように平均誤差との間にフィットとのデータです。
一つだけを組み合わせ複数のデータセットを単一のフ統合して再実行計上しています。
私が開発した包括的なMatlabのツールボックス適合のパラメータの初期値の微分方程式の複数の実験データをセット。で異なる初期値により各実験とは www.potterswheel.de.