0

たとえば、方程式 がf(x) = x**2 + 1あり、 の値を見つける必要がありますf(2)

最も簡単な方法は、関数を作成し、パラメーターを受け入れて値を返すことです。

しかし問題は、f(x)動的に作成されるため、値を取得するために関数を事前に作成できないことです。

cvxpy最適化値に使用しています。式は次のようになります。

x = cvx.Variable()
Si = [(cvx.square(prev[i] + cvx.sqrt(200 - cvx.square(x))) for i in range(3)]

prev数値の配列です。がありますSi[0] Si[1] Si[2]

の値を見つけるにはどうすればよいSi[0] for x=20ですか?

基本的に、 cvxpy を使用する場合、上記の変数を代入して式の値を見つける方法はありますか?

4

3 に答える 3

0

Python でオンザフライでコードを解釈するための一般的な解決策は、組み込みのeval()を使用することですが、 eval は、システムにあらゆる種類の厄介なことを行う可能性のあるユーザー提供の入力では危険です。

幸いなことに、追加のパラメーターを使用して eval を「サンドボックス化」し、既知の「安全な」操作へのアクセスのみを式に与える方法があります。のアクセスをホワイトリストに登録された操作のみに制限し、特に組み込みへのアクセスを拒否する方法の例があります。evalその実装をざっと見てみると、ほぼ正しいように見えますが、絶対確実だとは言いません。

sympy.sympifyコメントで言及したのは内部eval()で使用され、同じ警告が表示されます。

于 2016-03-25T12:34:53.993 に答える
0

cvx バージョンと並行して、ラムダを使用してオンザフライで関数を定義できます。

f=[lambda x,i=j : (prev[i] + (200 - x*x)**.5)**2 for j in range(3)] #(*)

f[0](20)次に、 、 などを評価できますf[1](20)

(*) は、関連する機能i=jにそれぞれを適合させるために必要です。j

于 2016-03-25T12:53:14.223 に答える