質問するログイン新規登録

回答編集履歴

1

グラフ追加

2020/07/23 21:22

投稿

Penpen7
Penpen7

スコア698

answer CHANGED
@@ -1,11 +1,10 @@
1
- 色々ややこしいので、間違いはご容赦ください。
2
1
  x,yにリストとして座標を追加し、numpyの配列に変換すれば以下のソースコードで計算できると思います。
2
+ Ax=rとして解いた。a,b,c,dは三次関数の係数。
3
3
  ```python
4
4
  import numpy as np
5
5
 
6
6
  x = np.array([0, 1, 4, 5, 8])
7
7
  y = np.array([0, 3, 3, 1, 2])
8
-
9
8
  n = len(x)-1
10
9
  h = x[1:]-x[:-1]
11
10
  a = y
@@ -29,18 +28,23 @@
29
28
  # Aの逆行列
30
29
  Ainv = np.linalg.inv(A)
31
30
 
32
- b = np.empty(n+1)
31
+ r = np.zeros(n+1)
33
- b[:] = 0
34
- b[1:-1] = (3/h)[1:]*(a[2:]-a[1:-1])-(3/h)[:-1]*(a[1:-1]-a[:-2])
32
+ r[1:-1] = (3/h)[1:]*(a[2:]-a[1:-1])-(3/h)[:-1]*(a[1:-1]-a[:-2])
35
33
 
36
- c = np.dot(Ainv, b)
34
+ c = np.dot(Ainv, r)
37
35
 
36
+ d = (c[1:]-c[:-1])/(3*h)
37
+ b = (a[1:]-a[:-1])/h-h/3*(2*c[:-1]+c[1:])
38
38
  print("x", x, "y", y)
39
39
  print("h", h, "a", a)
40
40
  print("A")
41
41
  print(A)
42
+ print("r", r)
43
+
44
+ print("a", a)
42
45
  print("b", b)
43
46
  print("c", c)
47
+ print("d", d)
44
48
  ```
45
49
 
46
50
  ```text
@@ -52,6 +56,11 @@
52
56
  [0. 3. 8. 1. 0.]
53
57
  [0. 0. 1. 8. 3.]
54
58
  [0. 0. 0. 0. 1.]]
55
- b [ 0. -9. -6. 7. 0.]
59
+ r [ 0. -9. -6. 7. 0.]
60
+ a [0 3 3 1 2]
61
+ b [ 3.31018519 2.37962963 -1.96759259 -1.5462963 ]
56
62
  c [ 0. -0.93055556 -0.51851852 0.93981481 0. ]
63
+ d [-0.31018519 0.04578189 0.48611111 -0.10442387]
57
- ```
64
+ ```
65
+ ![イメージ説明](e3fd9e612e19ba01268a2ec4ecedbd77.png)
66
+ ![イメージ説明](c5c67075d9de612e33dc8a6d5a2c03a0.png)