Perl から Lua : 関数Fitting ( By GSL )

2017-01-08 :  PCクリニック
Python、C言語、Perl、グルコサミン、Firefox
前(2017-01-06)の記事「Perl から Lua : 関数Fitting ( By gnuplot )」では、

  ・・・・・
  ・・・・・
  だが、別のプログラムで
  もう一つ Fitting 関数があった。
    f(x)=exp(-b*log(x)+c)
  gnuplot では、この様な関数に対しては手が出ない???
  エラーで停止

  はやり、gnuplot での 関数フィッティングには、限界がある?
  出直して来ます。
  ・・・・・
  ・・・・・

でした。

そこで、
昨年2月(2016-02-24)の記事「GSL Shell 学習:Nonlinear Least Squares Fit
に戻ってみた。

フィッティング関数は、
 f(x)=exp(-b*log(x)+c)
なので、
2つの係数 b、c について、先ずはヤコビアンを求める。

ここは、
Maxima」か「Euler」を使って、・・・

b では、-log(x)*exp(-b*log(x)+c)
c では、exp(-b*log(x)+c)

ですね。


そうすると、コードは:
X = matrix.vec{ ・・・・・ }
Y = matrix.vec{ ・・・・・ }
------- Y ~ exp( -b * log(X) + c ) で近似

n = #X
function fdf( k, f, J ) -- ( 係数、関数、ヤコビアン )
for i=1, n do
local b, c = k[1], k[2]
local x, y = X[i], Y[i]
if f then f[i] = (math.exp(-b*math.log(x)+c) - y) end -- (近似関数 - 観測値)
if J then
J:set( i, 1, -math.log(x)*math.exp(-b*math.log(x)+c) )
J:set( i, 2, math.exp(-b*math.log(x)+c) )
end
end
end

s = num.nlinfit{ n=n, p=2 } -- 観測値の数、係数の数
s:set( fdf, matrix.vec{ 1, 0 } ) -- 係数の初期推定値
for i=1, 100 do
s:iterate() -- 繰り返し計算
if s:test( 0, 1e-8 ) then break end
end

b, c = s.x[1], s.x[2] -- 求めた係数
で、行ける?

OKそう


はやり、関数フィッティングは GSL Shell
と云うことですネ。


本日はここまで。


“Perl から Lua ( GSL Shell ) への移植”準備その2は続く?


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


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

コメントの投稿

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

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



おきてがみ

最新記事
カレンダー
05 | 2017/06 | 07
- - - - 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 -
月別アーカイブ
カテゴリ
最新コメント
検索フォーム
リンク
プロフィール

<紙>

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

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


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

Google Analytics
ブックマーク