2

パラメータの量が変化する関数の多項式タイプを定義することは(Pythonで)可能ですか? パラメータの数は、入力ファイルにあるデータ系列の数に応じて変更する必要があります。

現在、私は次のようなものを持っています:

def y(x, a0, x2, x3, x4):
    y = a0 + a1*x + a2*x**2 + a3*x**3
    return y

もちろん、追加のパラメーターを使用して高次のパラメーターをゼロに設定することもできますが、もっと良い方法があるでしょうか。

4

5 に答える 5

3

引数をループして、非常に効率的なホーナー法を使用して多項式を評価できます。

def y(x, *args):
  y = 0
  for a in reversed(args):
    y = y*x+a
  return y

この質問では、可変数の引数に関するヒープの詳細を見つけることができます。

于 2012-08-21T07:26:17.067 に答える
3

ジェネレータ式を使用したさらに単純なバージョン

def y(x, *args):
  return sum(a * x ** i for i, a in enumerate(args))

reduce を使用した Horner バージョン

def horn(x, *args):
    return reduce(lambda y, a: y * x + a, reversed(args))
于 2012-08-21T07:54:21.757 に答える
1
def y(x, *args):
  y = 0
  i = 0

  for a in args:
    y += a * x ** i
    i += 1

  return y

print y(2, 1, 2) # 2 * 2 ^ 0 + 2 * 2 ^ 1 = 5
于 2012-08-21T07:28:55.263 に答える
0

この特定のケースでは、多項式を単一の引数、つまり係数のリストとして提供する方がはるかにクリーンです。

 def eval_poly(x, poly):
     ....

 eval_poly(10, [1, 2, 3]) # evaluate (1 + 2x + 3x^2)(10)

このようにして、通常の値のような多項式を処理できます。次に例を示します。

 def add_poly(p1, p2):
     """Add two polynomials together"""
     ...

 p1 = [1,2,3]
 p2 = [4,5,6]

 print eval_poly(10, add_poly(p1, p2))
于 2012-08-21T08:17:09.153 に答える