PyClient:curve_fit 版

2017-03-01 :  PCクリニック
Python、C言語、Perl、グルコサミン、Firefox
前(2017-02-27)の記事「PyClient:LuaPy_GSL モジュールのラッパー」で書いた、
  ・・・・・
  ・・・・・
  PyClient サブを作った。
  手始めなので、名前は取り敢えず“SUB.lua”とした。
  ・・・・・
  ・・・・・

この取り敢えずの“SUB.lua”を使って、
昨年(2016-08-15)の記事「Lua から scipy.optimize.curve_fit
にある処理コードを書き直してみた。


作ったのは:
---------------- test_use_SUB_Fitting.gsl

require'SUB' -- IT[40], SV[4097] 定義済み
--------------------------------

----- Python での実行文
ST = [[
from scipy.optimize import curve_fit
xx=8
x = np.zeros( xx, dtype=np.float )
y = np.zeros( xx, dtype=np.float )
_=ct.cdll.msvcrt.memcpy( np_data(x), IT[1], xx*8 )
_=ct.cdll.msvcrt.memcpy( np_data(y), IT[2], xx*8 )
def yfx( x, a, b ): return a*(x**(-1/b))
abV, _ = curve_fit( yfx, x, y, p0=(1,1) )
r = doubleA( IT[3] )
r[0] = abV[0]; r[1] = abV[1]
]]
--------------- データ
IT[1] = Int( matrix.vec{ 1, 2, 3, 4, 5, 6, 7, 10 }.data )
IT[2] = Int( matrix.vec{ 8, 7, 6.5, 6, 5.8, 5.3, 5, 4 }.data )
r = ffi.new( 'double[2]' ) -- 戻り値用
IT[3] = Int( r )
-----------------------------
ss=Py_Exec( ST ) --------- これが、PyClient ???
Py_End()

--- 戻り値
print( r[0] ) --> 8.2595111874288 これが、a
print( r[1] ) --> 3.942786255794 これが、b
print( ss ) --- 戻り文字列 : 不使用( nil )
こんな感じ???

かなりスッキリした。

だが、
見直してみると、まだ PyClient にはほど遠い様ダ。

なので、
“SUB.lua”に以下の関数を追加定義し“SUB_3”とした。
----- 追加分 -----
function Py_Fit( x_, y_, k_, f_, p_ ) -- =====
local n = #x_
IT[1]=Int(x_.data); IT[2]=Int(y_.data); IT[3]=Int(r)
local kk = #split( k_, ',' )
local st = 'from scipy.optimize import curve_fit\n'
.. fmt('xx=%d\n', n)
.. [[
x = np.zeros( xx, dtype=np.float )
y = np.zeros( xx, dtype=np.float )
_ = ct.cdll.msvcrt.memcpy( np_data(x), IT[1], xx*8 )
_ = ct.cdll.msvcrt.memcpy( np_data(y), IT[2], xx*8 )
rr = doubleA( IT[3] )
]]
.. fmt('def yfx( x, %s ): return %s\n', k_, f_ )
.. fmt('r,_ = curve_fit( yfx, x, y, p0=(%s) )\n', p_ )
for k=0,kk-1 do
st = st .. fmt('rr[%d]=r[%d]\n', k, k )
end
IT[0]=#st+1
Py.PyFun( 'Exec', IT, st, SV )
rt={}
for k=1,kk do rt[k]=r[k-1] end
return rt
end
これを使うと、
--------------- test_use_SUB_3_Fitting.gsl

require'SUB_3' -- IT[40], SV[4097] 定義済み
--------------------------------

-- データ:x,y は、 matrix.vec で定義するコト。
x = matrix.vec{ 1, 2, 3, 4, 5, 6, 7, 10 }
y = matrix.vec{ 8, 7, 6.5, 6, 5.8, 5.3, 5, 4 }
--------------------------------
-- データ、係数リスト(変数は x)、Fit 関数、初期推定値
r = Py_Fit( x, y, 'a, b', 'a*(x**(-1/b))', '1,1' )
--- 戻り値
print( r[1] ) --> 8.2595111874288 これが、a
print( r[2] ) --> 3.942786255794 これが、b
Py_End()
これで完璧???
(自己満足?)


本日はここまで。


PyClient ( Lua / GSL Shell) 学習は続く。


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


170202,04
関連記事
スポンサーサイト

コメントの投稿

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

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



おきてがみ

最新記事
カレンダー
02 | 2017/03 | 03
- - - 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
ブックマーク