pythonにて微分の問題を解くプログラムを組んでいるのですがxの定義の仕方が分かりません
下のコードの一番最後です。
python
1class Expression: 2 def eval(self, x_value): 3 '''変数 x の値が x_value だった時の式の値を返すメソッド''' 4 raise NotImplementedError 5 6 def diff(self): 7 '''式を変数 x で微分した式に対応する Expression オブジェクト 8 を返すメソッド''' 9 raise NotImplementedError 10 11class Number(Expression): 12 '''変更の必要なし''' 13 def __init__(self, number): 14 self.number = number 15 16 def eval(self, x_value): 17 return self.number 18 19 def diff(self): 20 return Number(0) 21 22class BinalyExpression: 23 def __init__(self, a, b): 24 self.a=a 25 self.b=b 26class Add(BinalyExpression): 27 def eval(self, x_value): 28 return self.a.eval() + self.b.eval() 29 def diff(self): 30 return self.a.diff() + self.b.diff() 31 pass 32 33class Sub(BinalyExpression): 34 def eval(self, x_value): 35 return self.a.eval() - self.b.eval() 36 def diff(self): 37 return self.a.diff() - self.b.diff() 38 pass 39 40 41class Mul(BinalyExpression): 42 def eval(self, x_value): 43 return self.a.eval() * self.b.eval() 44 def diff(self): 45 return self.a.diff() * self.b.diff() 46 pass 47 48class Div(BinalyExpression): 49 def eval(self, x_value): 50 return self.a.eval() / self.b.eval() 51 def diff(self): 52 return self.a.diff() / self.b.diff() 53 pass 54 55 56class X(Expression): 57 58 pass
このテストファイルを実行できるようにしたいです
↓テストファイル↓
python
1import unittest 2from expr import Expression, Number, X, Add, Sub, Mul, Div 3 4class TestExpr(unittest.TestCase): 5 def test_x_is_expression(self): 6 self.assertIsInstance(X(), Expression) 7 8 def test_x_eval_10(self): 9 self.assertEqual(X().eval(10), 10) 10 11 def test_x_diff_is_a_number(self): 12 self.assertIsInstance(X().diff(), Number) 13 14 def test_x_diff(self): 15 self.assertEqual(X().diff().eval(0), 1) 16 17 def test_2x_3_eval(self): 18 f = Add(Mul(Number(2), X()), Number(3)) # f(x) = 2x + 3 19 self.assertEqual(f.eval(10), 23) 20 21 def test_2x_3_diff(self): 22 f = Add(Mul(Number(2), X()), Number(3)) # f(x) = 2x + 3 23 self.assertEqual(f.diff().eval(100), 2) 24 25 def test_xx_3x_2_eval(self): 26 x = X() 27 f = Add(Add(Mul(x, x), Mul(Number(3), x)), Number(2)) 28 # f(x) = x**2 + 3x + 2 29 self.assertEqual(f.eval(10), 132) 30 31 def test_xx_3x_2_diff(self): 32 x = X() 33 f = Add(Add(Mul(x, x), Mul(Number(3), x)), Number(2)) 34 # f(x) = x**2 + 3x + 2 35 self.assertEqual(f.diff().eval(10), 23) 36 37 def test_sub(self): 38 x = X() 39 f = Sub(Mul(x, x), Mul(Number(2), x)) # f(x) = x**2 - 2x 40 self.assertEqual(f.eval(2), 0) 41 42 def test_sub_diff(self): 43 x = X() 44 f = Sub(Mul(x, x), Mul(Number(2), x)) # f(x) = x**2 - 2x 45 self.assertEqual(f.diff().eval(2), 2) 46 47 def test_div(self): 48 x = X() 49 f = Div(x, Add(Mul(x, x), Number(1))) # f(x) = x / (x**2 + 1) 50 self.assertAlmostEqual(f.eval(2), 0.4) 51 52 def test_div_diff(self): 53 x = X() 54 f = Div(x, Add(Mul(x, x), Number(1))) # f(x) = x / (x**2 + 1) 55 self.assertAlmostEqual(f.diff().eval(1), 0) 56 self.assertAlmostEqual(f.diff().eval(2), -3/25) 57 58if __name__ == '__main__': 59 unittest.main(verbosity=2)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。