"""
概要:
SymPyライブラリを使用して記号計算を実行する例を示します。
詳細説明:
このスクリプトは、 argparse を使ってコマンドライン引数を解析し、
SymPyの記号オブジェクトと表現を操作する関数およびクラスの利用例を提供します。
基本的な記号計算と、記号を持つオブジェクトの処理方法を示します。
主な機能:
- 2つの数値引数から記号式を構築する関数。
- 初期値と乗数を使って記号を処理するクラス。
関連リンク:
sympy_examples_usage
"""
import argparse
import sympy as sp
import numpy as np
[ドキュメント]
def calculate_expression(x, y):
"""
概要:
与えられた数値と記号 z を使って記号式を計算します。
詳細説明:
この関数は、SymPyの記号 z を定義し、x と y の値を使って
x**2 + y*z + sin(z) の形式の記号式を構築します。
構築された式は評価されず、記号のまま返されます。
引数:
:param x: 式の構築に使用する浮動小数点数。
:type x: float
:param y: 式の構築に使用する浮動小数点数。
:type y: float
戻り値:
:returns: 構築されたSymPyの記号式。
:rtype: sympy.Expr
"""
z = sp.symbols('z')
expr = x**2 + y*z + sp.sin(z)
return expr
[ドキュメント]
class SymbolProcessor:
"""
概要:
SymPyの記号オブジェクトを処理するためのクラスです。
詳細説明:
このクラスは、初期値と SymPy の記号 s を保持し、
その記号と別の乗数を使って計算を行うメソッドを提供します。
"""
def __init__(self, initial_value):
"""
概要:
SymbolProcessor クラスの新しいインスタンスを初期化します。
詳細説明:
初期値をインスタンス変数 value に格納し、
SymPyの記号 s をインスタンス変数 symbol に格納します。
引数:
:param initial_value: プロセッサの初期値。
:type initial_value: float
"""
self.value = initial_value
self.symbol = sp.symbols('s')
[ドキュメント]
def process_symbol(self, multiplier):
"""
概要:
インスタンスの記号と初期値を指定された乗数で処理します。
詳細説明:
このメソッドは、インスタンスの value と symbol、
そして引数 multiplier を使って、
value * symbol * multiplier の記号計算を実行します。
引数:
:param multiplier: 記号を乗算するための数値。
:type multiplier: float
戻り値:
:returns: 計算されたSymPyの記号式。
:rtype: sympy.Expr
"""
return self.value * self.symbol * multiplier
[ドキュメント]
def main():
"""
概要:
SymPyの記号計算のデモンストレーションを実行します。
詳細説明:
コマンドライン引数から x と y の値を取得し、
それらの値を使って calculate_expression 関数と SymbolProcessor クラスの
両方の機能の例を示します。結果は標準出力に出力されます。
"""
parser = argparse.ArgumentParser(description='Process symbolic expressions with SymPy.')
parser.add_argument('--x', type=float, default=1.0, help='Value for x.')
parser.add_argument('--y', type=float, default=2.0, help='Value for y.')
args = parser.parse_args()
x_val = args.x
y_val = args.y
# Example 1: Use a function
result_expr = calculate_expression(x_val, y_val)
print(f"Calculated expression: {result_expr}")
# Example 2: Use a class
processor = SymbolProcessor(x_val)
processed_result = processor.process_symbol(y_val)
print(f"Processed symbolic result: {processed_result}")
if __name__ == '__main__':
main()