Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonで多項式を計算する方法:リストと反復処理を使った実装例

Pythonで多項式を計算する必要がある場合、単純な反復処理(ループ)と「*」演算子を組み合わせることで簡単に実装できます。リストの各要素を多項式の係数として扱い、指定した x の値に対する多項式の値を求める仕組みです。

サンプルコード

以下に具体的な実装例を示します。

my_list = [3, -6, 3, -1, 23, -11, 0, -8]
print("The list is :")
print(my_list)

x = 3
my_list_length = len(my_list)

my_result = 0

for i in range(my_list_length):
   my_sum = my_list[i]

   for j in range(my_list_length - i - 1):
      my_sum = my_sum * x

   my_result = my_result + my_sum

print("The result is :")
print(my_result)

出力結果

The list is :
[3, -6, 3, -1, 23, -11, 0, -8]
The result is :
3349

処理の流れと解説

  • まず、多項式の係数を格納したリストを定義し、コンソールに表示します。

  • 変数 x に整数値 3 を代入します。これが多項式に代入する値です。

  • len() 関数を使ってリストの長さを取得し、変数に格納します。

  • 計算結果を格納するための変数 my_result を 0 で初期化します。

  • 外側のループでリストを反復処理し、各要素(係数)を変数 my_sum に代入します。

  • 内側のループで my_sum に x を繰り返し掛けることで、係数に対応する次数のべき乗を計算します。

  • 各項の計算結果を my_result に順次加算していきます。

  • 最終的な計算結果がコンソールに表示されます。

このプログラムが計算している多項式

リスト [3, -6, 3, -1, 23, -11, 0, -8] の各要素は、次の多項式の係数(次数の高い順)に対応しています。

3x⁷ − 6x⁶ + 3x⁵ − x⁴ + 23x³ − 11x² + 0x − 8

x = 3 を代入すると、結果は 3349 になります。

補足:ホーナー法による効率的な計算

上記の実装は二重ループを使用しているため、計算量は O(n²) になります。より効率的に多項式を評価したい場合は、ホーナー法(Horner's method)を用いると O(n) で計算でき、コードもシンプルになります。

def horner(coeffs, x):
    result = 0
    for c in coeffs:
        result = result * x + c
    return result

my_list = [3, -6, 3, -1, 23, -11, 0, -8]
print(horner(my_list, 3))  # 出力: 3349

実務や競技プログラミングでは、ホーナー法が多項式評価の標準的な手法として広く使われています。用途に応じて使い分けるとよいでしょう。

  1. Pythonでリストの累積和(累積合計)を求める方法

    この記事では、リストの累積和(累積合計)を求める問題の解決策について詳しく解説します。問題文あるリストが与えられたとき、各要素までの累積和を格納した新しいリストを作成する必要があります。例えば、[10, 20, 30, 40, 50] というリストが与えられた場合、出力は [10, 30, 60, 100, 150] となります。これは、各位置でそれ以前の要素をすべて足し合わせた値です。実装例それでは、実際の実装を見ていきましょう。# 累積和を求める関数 def Cumulative(l): new = [] cumsum = 0 for element in l:

  2. Pythonでリスト内の最大値を見つける方法|sort()とmax()の2つのアプローチ

    この記事では、リストの中から最大の数値を見つけるための解決策とアプローチについて詳しく解説します。問題の概要数値のリストが与えられたとき、その中から最大の要素を見つけ出す必要があります。Pythonでは、主に以下の2つの方法でこれを実現できます。ソート(並べ替え)を利用する方法組み込み関数 max() を利用する方法アプローチ1:sort() 関数を使う方法リストを sort() メソッドで昇順に並べ替えると、リストの最後の要素(インデックス -1)が必ず最大値になります。サンプルコードlist1 = [18, 65, 78, 89, 90] list1.sort() # メイン処理 prin