2

方程式の変数に数値を割り当てる前に、複数の数学関数を追加する方法を探しています。
コードを最適化する必要があり、毎回異なる値を変数に割り当てたいので、このようにしています。私がやろうとしていることの例:

  1. f(x, y) = x + 2y

  2. g(x, y) = 3x - y

  3. f(x, y) + g(x, y)getに追加するh(x, y)ので、f(x, y) + g(x, y) = h(x, y) = 4x + y

  4. ができたのでh(x, y)、複数の値が必要ですh(x, y)

x = 4; y = 3, h(x, y) = 19
x = 1, y = 0, h(x, y) = 4

これは可能ですか?それらを文字列として作成し、文字列を追加してから、引用符を削除して合計を評価しようとしましたが、これは機能しませんでした。コードを最適化したいので、この方法でメソッドを実行しようとしています。評価する前に最終的な関数を作成できれば、非常に役立ちます (h(x, y)この場合はそうなります)。

編集: (e ** (x + y)) の加算を行っているため、行列を使用した線形解は機能しません:/

4

3 に答える 3

8

SymPyはこれを行うことができます:

import sympy as sym

x, y = sym.symbols('xy')
f = x + 2*y
g = 3*x - y
h = f + g

これは、SymPyが式を簡略化したことを示しています。

print(h)
# y + 4*x

そして、これはとhの関数としてどのように評価できるかを示しています:xy

print(h.subs(dict(x=4, y=3)))
# 19
print(h.subs(dict(x=1, y=0)))
# 4
于 2013-02-03T01:37:29.357 に答える
2

例に示すように、関数がすべて変数の線形結合である場合、パーサーや @unutbu によって提案された sympy ソリューションは必要ありません (これは、複雑な関数に対して絶対に正しい答えのようです)。

線形結合numpyの場合、次のように配列を使用して変数の係数を含めます。

import numpy as np
f = np.array([1,2])
g = np.array([3,-1])
h = f + g
x = np.array([4,3])
sum(h*x)

...あなたの例のように、答えが得19られます。

于 2013-02-03T01:52:34.253 に答える
1

ラムダ関数も使用できます。

f=lambda x,y:x+2*y
g=lambda x,y:3*x-y
h=lambda x,y:f(x,y)+g(x,y)

評価するh(x,y)

于 2013-08-27T23:58:28.570 に答える