質問編集履歴

1 タイトル修正

退会済みユーザー

退会済みユーザー

2019/01/07 09:08  投稿

python 微分でxを定義する
python 微分でxを定義する方法
pythonにて微分の問題を解くプログラムを組んでいるのですがxの定義の仕方が分かりません
下のコードの一番最後です。
```python
class Expression:
def eval(self, x_value):
'''変数 x の値が x_value だった時の式の値を返すメソッド'''
raise NotImplementedError
def diff(self):
'''式を変数 x で微分した式に対応する Expression オブジェクト
を返すメソッド'''
raise NotImplementedError
class Number(Expression):
'''変更の必要なし'''
def __init__(self, number):
self.number = number
def eval(self, x_value):
return self.number
def diff(self):
return Number(0)
class BinalyExpression:
def __init__(self, a, b):
self.a=a
self.b=b
class Add(BinalyExpression):
def eval(self, x_value):
return self.a.eval() + self.b.eval()
def diff(self):
return self.a.diff() + self.b.diff()
pass
class Sub(BinalyExpression):
def eval(self, x_value):
return self.a.eval() - self.b.eval()
def diff(self):
return self.a.diff() - self.b.diff()
pass
class Mul(BinalyExpression):
def eval(self, x_value):
return self.a.eval() * self.b.eval()
def diff(self):
return self.a.diff() * self.b.diff()
pass
class Div(BinalyExpression):
def eval(self, x_value):
return self.a.eval() / self.b.eval()
def diff(self):
return self.a.diff() / self.b.diff()
pass
class X(Expression):
pass
```
このテストファイルを実行できるようにしたいです
↓テストファイル↓
```python
import unittest
from expr import Expression, Number, X, Add, Sub, Mul, Div
class TestExpr(unittest.TestCase):
def test_x_is_expression(self):
self.assertIsInstance(X(), Expression)
def test_x_eval_10(self):
self.assertEqual(X().eval(10), 10)
def test_x_diff_is_a_number(self):
self.assertIsInstance(X().diff(), Number)
def test_x_diff(self):
self.assertEqual(X().diff().eval(0), 1)
def test_2x_3_eval(self):
f = Add(Mul(Number(2), X()), Number(3)) # f(x) = 2x + 3
self.assertEqual(f.eval(10), 23)
def test_2x_3_diff(self):
f = Add(Mul(Number(2), X()), Number(3)) # f(x) = 2x + 3
self.assertEqual(f.diff().eval(100), 2)
def test_xx_3x_2_eval(self):
x = X()
f = Add(Add(Mul(x, x), Mul(Number(3), x)), Number(2))
# f(x) = x**2 + 3x + 2
self.assertEqual(f.eval(10), 132)
def test_xx_3x_2_diff(self):
x = X()
f = Add(Add(Mul(x, x), Mul(Number(3), x)), Number(2))
# f(x) = x**2 + 3x + 2
self.assertEqual(f.diff().eval(10), 23)
def test_sub(self):
x = X()
f = Sub(Mul(x, x), Mul(Number(2), x)) # f(x) = x**2 - 2x
self.assertEqual(f.eval(2), 0)
def test_sub_diff(self):
x = X()
f = Sub(Mul(x, x), Mul(Number(2), x)) # f(x) = x**2 - 2x
self.assertEqual(f.diff().eval(2), 2)
def test_div(self):
x = X()
f = Div(x, Add(Mul(x, x), Number(1))) # f(x) = x / (x**2 + 1)
self.assertAlmostEqual(f.eval(2), 0.4)
def test_div_diff(self):
x = X()
f = Div(x, Add(Mul(x, x), Number(1))) # f(x) = x / (x**2 + 1)
self.assertAlmostEqual(f.diff().eval(1), 0)
self.assertAlmostEqual(f.diff().eval(2), -3/25)
if __name__ == '__main__':
unittest.main(verbosity=2)
```
  • Python

    29009 questions

    Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る