レンダリングには Infographics / Google Chart API の Mathematical Formulas を利用しています.
以下のコードを貼付けます.使い方はコード中のコメントの通りです.クラス名が他とバッティングするようならば,変更したほうが良いかもしれません.
ax^2 + bx + c = 0
x = \frac{-b \pm \sqrt{b^2 - 4ac}}{2a}
ax^2 + bx + c = 0
x = \frac{-b \pm \sqrt{b^2 - 4ac}}{2a}
xは変数,A,b,cは係数.制約関数の形が凸多面体であるので目的関数は最適化可能.
ある農夫がL [km^2]の広さの農地を持っているとき小麦と大麦を育てて売上を最大化させたい.農夫は肥料をF [kg]と農薬をP [kg]だけ持っている.小麦を育てるためには肥料F1 [kg/km^2]と農薬P1 [kg/km^2]が必要である.一方,大麦を育てるためには肥料F2 [kg/km^2]と農薬P2 [kg/km^2]が必要である.それぞれの売値が小麦S1[yen/kg],大麦S2[yen/kg]だとすると,売上を最大化するためにはどのように農地を振り分ければいいでしょう?
S1x1 + S2x2Subject to:
0 ≤ x1 + x2 ≤ L
0 ≤ F1x1 + F2x2 ≤ F
0 ≤ P1x1 + P2x2 ≤ P
x1 ≥ 0, x2 ≥ 0
git clone git://github.com/fonnesbeck/ScipySuperpackAre you installing from a repository from this machine?にはyと答える.
cd ScipySuperpack
sh install_superpack.sh
sudo brew install glpk
# Set to 1 if you are installing the glpk module.以下を実行.
BUILD_GLPK = 1
sudo setup.py install
sudo easy_install openopt
sudo easy_install FuncDesigner
3x1 + 2x2Subject to:
0 ≤ x1 + x2 ≤ 5
0 ≤ x1 + 3x2 ≤ 10
0 ≤ 2x1 + x2 ≤ 9
x1 ≥ 0, x2 ≥ 0
------------------------- OpenOpt 0.36 -------------------------最適解はx1=4.0 x2=1.0のとき14であることがわかりました.
solver: glpk problem: unnamed type: LP goal: max
iter objFunVal log10(maxResidual)
0 -0.000e+00 -100.00
GLPK Simplex Optimizer, v4.47
3 rows, 2 columns, 6 non-zeros
Preprocessing...
3 rows, 2 columns, 6 non-zeros
Scaling...
A: min|aij| = 1.000e+00 max|aij| = 3.000e+00 ratio = 3.000e+00
Problem data seem to be well scaled
Constructing initial basis...
Size of triangular part = 3
* 0: obj = 0.000000000e+00 infeas = 0.000e+00 (0)
* 2: obj = -1.400000000e+01 infeas = 0.000e+00 (0)
OPTIMAL SOLUTION FOUND
1 1.400e+01 -100.00
istop: 1000 (optimal)
Solver: Time Elapsed = 0.01 CPU Time Elapsed = 0.006718
objFunValue: 14 (feasible, MaxResidual = 0)
(4.0, 1.0)
hg clone https://code.google.com/p/growl/を実行すると,growlってディレクトリができてローカルコピーされます.止まってんじゃないかくらい時間かかった.
A signing error. You will need to generate a self signed certificate, and can do so at Keychain Access.app -> application's name menu -> certificate assistant -> create a certificate. Be sure to use the same prefix as the certificate that you are receiving errors about.ってあるけどめんどくさいので Code Signing Identity を Don't Code Sign に.2箇所ある.
を満たさないので、最短経路であることは保証されません…。
(状態方程式)とするとき、関数 f は前の状態から推定値を与え、関数 h は観測値を与えますが、どちらの関数も直接共分散を求めることはできません。が、拡張カルマンフィルタでは状態方程式も観測方程式も微分可能であれば線形である必要はありません。
(観測方程式)
(ノイズは正規分布)
(状態は正規分布)
あとは、線形カルマンフィルタと同じ。 μt, Σt, ut, yt+1 を入力として、 μt+1, Σt+1を出力します。1ステップのプロセスは以下のとおり。
(現在の推定値)# update
(状態方程式の現在のヤコビアン)
(現在の誤差行列)
(観測方程式のヤコビアン)
(観測残差)
(観測残差の共分散)
(最適カルマンゲイン)
(更新された現在の推定値)
(更新された現在の誤差行列)
2次元座標において、あるロボットがt=0に原点を出発して、速度(2,2)で動くとする。ロボットの進路は風などの影響を受け(σx=σy=1)、毎秒ごと3つの点(0,0),(10,0),(0,10)からの距離を計測できて、計測には距離によらない誤差がある(σx=σy=2)とする。このとき、観測された軌跡から実際の軌跡を推定する。
(状態方程式)線形カルマンフィルタ(LKF; Linear Kalman Filter)は μt, Σt, ut, yt+1 を入力として、 μt+1, Σt+1を出力する。1ステップのプロセスは以下のとおり。
(観測方程式)
(ノイズ)
(フィルタ分布)
(現在の推定値)# update
(現在の誤差行列)
(観測残差)観測を得るごとにPredictionとUpdateを繰り返すことで、現在の状態を推定します。
(観測残差の共分散)
(最適カルマンゲイン)
(更新された現在の推定値)
(更新された現在の誤差行列)
2次元座標において、あるロボットがt=0に原点を出発して、速度(2,2)で動くとする。ロボットの進路は風などの影響を受け(σx=σy=1)、毎秒ごとに観測できるGPSによる位置座標には計測誤差(σx=σy=2)があるとする。このとき、観測された軌跡から実際の軌跡を推定する。係数は
初期値は