Lua から scipy.optimize.fsolve

2016-06-08 :  PCクリニック
本文の前に、
-・・・ -・-
現時点での blogramのランクインカテゴリは、
7、2、0、0、0、 1、0、0、0、0(40)で、換算ポイント 87pt 。
「化学業界」「硝子業界」「FM COCOLO」「e-radio」「グルコサミン」、
「Python」「Firefox」bg値変動。「Perl」「C言語」「FM青森」変化無し。
・-・ - -・

さて、本文。

先日(2016-05-28)の記事「LuaPy:実数/文字列データの受け渡し」で、
“Lua(GSL Shell)”から、任意の“Python”関数を呼べる様になった。

そこで、昨年11月(2015-11-27)の記事:
Python 学習:scipy.optimize.fsolve」で書いたコトを、
やってみた。


呼び出す Lua 側(「LuaPy_Solve_Py.gsl」とする)では、
・解きたい式を(Python 仕様で)書き、
・初期値を指定して、
Pythonプログラム(「Solve.py」とする)を呼び出す。
この中に「f_solve」関数がある。


「f_solve」関数は、・・・・・

受け取った“式”から、
文字列:

  def fn(x):return <式>

を組み立て、“exec”文を実行(即ち、関数定義する)

それで、

x = scipy.optimize.fsolve( fn, <初期値> )

で解く。


以下、コード:
-- メイン:LuaPy_Solve_Py.gsl -----
charA = |x| ffi.cast( 'char*', x )
voidA = |x| ffi.cast( 'void*', x )
Int = |x| ffi.cast( 'int32_t',x )

LuaPy = ffi.load('LuaPy_0') -- dll 読み込み
ffi.cdef[[
int inter( char*, char*, void* ); // その中の関数
]]
PyM = charA('Solve') -- Python モジュール
PyF = charA('f_solve') -- その中の関数

p = ffi.new( 'int32_t[2]' ) -- Interface情報:式と q へのPointer
q = ffi.new( 'double[2]' ) -- 初期値と戻り値

-- 求めたい式と、解の格納域
p[0] = Int(charA( '2*np.cos(x)-np.exp(x)' )) -- 式のみ(Python仕様)
p[1] = Int( q ) -- 実数値格納域
q[0] = 0.0 -- 初期値
LuaPy.inter( PyM, PyF, p ) -- Python 呼び出し ( voidA(p) としなくてOK! )
ans=q[1] -- 解の値
------------ 以下は確認用
print( ans ) --- 解:0.53978516080928
_ = io.read(1)
## サブ:Solve.py  #####
# -*- coding: utf-8 -*-
import ctypes as ct
import numpy as np
from scipy.optimize import fsolve

def IntA(x):
return ct.cast( x, ct.POINTER(ct.c_long) )
def DblA(x):
return ct.cast( x, ct.POINTER(ct.c_double) )

def f_solve( p ):
IT = IntA( p )

s = ct.create_string_buffer(255) # 最大長 255文字
w=ct.cdll.msvcrt.memcpy(s,IT[0],255)
s0 = s.value # 長さ正確な文字列

q = DblA(IT[1])
exec( "def fn(x):return "+s0 )
x = fsolve( fn, q[0] )
q[1]=x

return 0
以上で、出来ました。


当然ですが、
LuaPy.dll 作成」で書いた、
“LuaPy.dll”が必要です。


いや、
“Lua(GSL Shell)”も“Python”も必要です。


本日はここまで。


Lua ( GSL Shell ) 学習は続く。


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


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

コメントの投稿

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

おきてがみ/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
ブックマーク