1

これが私が書いたものです。これは、補間に関する古典的な演習であり、すでに完成して送信しています。別の(より長い)方法があるかどうか疑問に思っていました...

qfloat のリスト (補間点)

iはラグランジュ多項式のインデックスです

xが評価されるポイントです。

def l(q,i,x):
    poly=1.0
    for j,p in enumerate(q):
        if j==i:
            continue
        poly *=(x-p)/(q[i]-p)
    return poly

次に、私が取り組んでいる機能があります:

def Lambda(q,x):
    value=0.0
    for j in range(0,len(q)):
        value+=abs(l(q,j,x))
    return value

これで、Python のいくつかのルーチンを使用して、間隔 [0,1] の最大値を見つけることができました。Python には、l を簡単に再定義できる多項式モジュールがあります。

import numpy.polynomial.polynomial as P

def l_poly(q,i):
    poly = []
    for j,p in enumerate(q):
        if j==i:
            continue
        poly.append(p/(q[i]-p))
    return P.polyfromroots(poly)

Lambda微分の組み込み関数を使用して最大値を見つけることができるように、同じことをしたいと思います(そのゼロなどを見つけます)。問題は、それが の合計であることですabs(polynomials)。これを行う方法はありますか?または、多項式導関数とabs(...)?の導関数を混合します。

4

1 に答える 1

0

NumPy は任意のシンボリック式をサポートしていません。多項式を係数の配列として表す多項式でのみ機能します。多項式の絶対値は多項式ではないため、NumPy が持つ概念ではありません。これは、SymPy などの記号操作ライブラリで処理できる記号式です。

導関数の組み込み関数を使用します (そのゼロなどを見つけます)。

これにはいくつかの問題があります。

  1. 前に述べたpolyderように、abs(多項式) は多項式ではないため、NumPy の方法はこの状況には適用されません。
  2. 絶対関数の導関数は 0 で未定義です。
  3. 絶対値を含む式の最小値または最大値は導関数が存在しない場所で達成される可能性があるため、導関数を見つけてその根を見つけることができたとしても、問題を解決することはできません。
  4. 導関数のゼロを探すことは、微積分の練習以外では、関数を最小化または最大化する良い方法ではありません。ライブラリはscipy.optimize、この種の問題に対して多くの効率的な数値メソッドを実装しています。
于 2017-10-01T15:37:25.360 に答える