GSL Shell 学習:Fitting サブ(改)

2017-04-05 :  PCクリニック
Python、C言語、Perl、グルコサミン、Firefox
1月(2017-01-09)の記事「GSL Shell 学習:Fitting サブ」では、
  ・・・・・
  ・・・・・
  'Fit_GSL'関数のみを定義している、
  'Fit_SUB' サブプログラムを作る。
  ・・・・・
  ・・・・・
と云うことで、
'Fit_GSL'関数を作った。

しかし、この関数を使う時、
求めたい係数は k[1]、k[2]、・・・
の様に記述しなければならない。

もっとひとに易しく(?)と云うことで、
任意の名前を付けられる様に改訂した。

サブルーチン名は SUB_GSL_Fitとした。
その仕様は、
2番目と3番目の間に新3番目リストを追加し、
新5番目(元4番目)の指定をリストに変更。

結果、
引数は6つ以上で、
第1、2は、観測点データベクトル X、Y
第3は、係数名リスト(文字列)(変数は x)
第4は、近似関数(文字列)
第5は、初期推定値リスト(文字列)
第6以降は、ヤコビアン(文字列)

出来上がったのは:
-------------- SUB_GSL_Fit.lua
fmt = string.format
function GSL_Fit( x_, y_, k_, f_, p_, ... )
X__, Y__ = x_, y_ ----- これは local ではダメ
local pj = {...}
local n, jj = #x_, #pj
local st = 'function fdf( k, f, J )\n'
.. fmt( ' for i=1,%d do\n', n )

st = st .. fmt( ' local %s = k[1]', k_ )
for j=2,jj do st = st..fmt( ', k[%d]', j ) end
st = st .. '\n local x, y = X__[i], Y__[i]\n'
st = st .. fmt( ' if f then f[i] = ( %s - y ) end\n', f_ )
st = st .. ' if J then\n'
for j=1,jj do st=st..fmt( ' J:set( i, %d, %s )\n', j, pj[j] ) end
st = st .. 'end; end; end\n'
st = st .. fmt( 's_ = num.nlinfit{ n=%d, p=%d }\n', n,jj )
st = st .. fmt( 's_:set( fdf, matrix.vec{%s} )\n', p_ )

assert( load( st ) )() ----- function fdf 定義

for i=1, 100 do
s_:iterate()
if s_:test( 0, 1e-8 ) then break end
end
return s_
end
でしょうか?


これを使うと、
前回記事での利用例のコードは、
X = matrix.vec{ ・・・・・ }
Y = matrix.vec{ ・・・・・ }
------- Y ~ exp( -b * log(X) + c ) で近似
-------------------------------------------------
exp=math.exp; log=math.log
require'SUB_GSL_Fit'
s = Fit_GSL( X, Y, 'b,c', 'exp(-b*log(x)+c)', '1,0', '-log(x)*exp(-b*log(x)+c)', 'exp(-b*log(x)+c)')
-------------------------------------------------
b, c = s.x[1], s.x[2] -- 求めた係数
の様なものになる。


本日はここまで。


GSL Shell ( Lua ) 学習は続く。


見ていただいた序でとは厚かましい限りですが、
お帰りに投票して頂けるとなお嬉しいです。 ⇒ blogram投票ボタン


170204
関連記事
スポンサーサイト

コメントの投稿

管理者にだけ表示を許可する

おきてがみ/blogram
blogram投票ボタン



おきてがみ

最新記事
カレンダー
09 | 2017/10 | 11
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 - - - -
月別アーカイブ
カテゴリ
最新コメント
検索フォーム
リンク
プロフィール

<紙>

Author:<紙>
ようこそ。
「パソコンヲタクの雑記帳」
もろもろなことを綴っています。
パソコン ヲタクってねくら?
画像は kami でなく kani です。

カウンター(fc2、i2i) /Google Analytics


i2i(from 2010-08-24)
Total =
Today  =  
Yesterday=
アンチエイジング

Google Analytics
ブックマーク