質問編集履歴

2

書式の修正

2022/10/29 12:28

投稿

ponnkichi
ponnkichi

スコア1

test CHANGED
@@ -1 +1 @@
1
- Pythonのプログラムエラー対処法can't multiply sequence by non-int of type 'float'
1
+ Python 行列表現 for文内コードエラー対処できない
test CHANGED
File without changes

1

書式の改善

2022/10/29 10:47

投稿

ponnkichi
ponnkichi

スコア1

test CHANGED
File without changes
test CHANGED
@@ -17,30 +17,45 @@
17
17
 
18
18
  ### 該当のソースコード
19
19
 
20
- ```Python
20
+ ```
21
+ TypeError Traceback (most recent call last)
22
+ <ipython-input-14-c07dcd572c24> in <module>
23
+ 4 time_t[:, counter] = TIME_STEP*counter
24
+ 5 input_u[:, counter-1] = np.matrix(np.zeros((1, 1)))
25
+ ----> 6 state_dx = dynamicalsystem(state_x[:, counter-1], input_u[:, counter-1])
26
+ 7 state_x[:, counter] = state_x[:, counter-1] + state_dx*TIME_STEP
21
27
 
28
+ <ipython-input-10-e09b5a52b810> in dynamicalsystem(state, input)
22
- state_dx = dynamicalsystem(state_x[:, counter-1], input_u[:, counter-1])
29
+ 1 def dynamicalsystem(state,input):
30
+ ----> 2 return np.vstack([ state[1, 0] , AA1*state[1, 0] + AA2*state[2, 0] + AA3*state[3, 0] + CC1*input[0,0] , state[3,0] , BB1*state[1,0] + BB2*state[2,0] + BB3*[3,0] + CC2*input[0,0] ])
31
+ 3
23
32
 
24
- ソースコードは下のようになりました.
33
+ TypeError: can't multiply sequence by non-int of type 'float'
34
+
25
35
  ```
26
-
36
+ ソースコードは下のようになりました. 
37
+ コード1
27
38
  ```
28
39
  !pip install control
29
40
  !pip install --upgrade cvxpy
30
-
41
+ ```
42
+ コード2
43
+ ```
31
44
  %reset -f
32
45
  import numpy as np
33
46
  import scipy as sp
34
47
  import matplotlib.pyplot as plt
35
-
48
+ ```
49
+ コード3
50
+ ```
36
51
  #パラメータ
37
52
  g=9.81
38
53
  m=0.0467
39
54
  R_W=0.066
40
- J_W=(mR_WR_W)/2
55
+ J_W=(m*R_W*R_W)/2
41
56
  M=0.806
42
57
  L=0.75689
43
- J_theta=(MLL)/3
58
+ J_theta=(M*L*L)/3
44
59
  J_m=0.00001
45
60
  R_m=6.69
46
61
  K_t=0.317
@@ -50,62 +65,60 @@
50
65
  theta = 30;
51
66
  h = 0.001
52
67
  #線形係数
53
- A1=-R_m*(MLL+J_theta+J_m)/K_t
68
+ A1=-R_m*(M*L*L+J_theta+J_m)/K_t
54
- A2=-R_m*(-J_m+MR_WL)/K_t
69
+ A2=-R_m*(-J_m+M*R_W*L)/K_t
55
- A3=(R_mMgL)/K_t
70
+ A3=(R_m*M*g*L)/K_t
56
- A4=(-K_tK_b-f_mR_m)/K_t
71
+ A4=(-K_t*K_b-f_m*R_m)/K_t
57
- A5=K_b+(R_mf_m)/K_t
72
+ A5=K_b+(R_m*f_m)/K_t
58
- B1=R_m*(MR_WR_W+mR_WR_W+J_W+J_m)/K_t
73
+ B1=R_m*(M*R_W*R_W+m*R_W*R_W+J_W+J_m)/K_t
59
- B2=R_m*(MR_WL-J_m)/K_t
74
+ B2=R_m*(M*R_W*L-J_m)/K_t
60
- B3=(K_tK_b+R_mf_m)/K_t
75
+ B3=(K_t*K_b+R_m*f_m)/K_t
61
- B4=(-K_tK_b-R_mf_m-R_mf_W)/K_t
76
+ B4=(-K_t*K_b-R_m*f_m-R_m*f_W)/K_t
62
- AA1= (A1B4-B2A4)/(B2A2-B1A1)
63
- AA2 =(-B2A3)/(B2A2-B1A1)
64
- AA3 =(A1B3-B2A4)/(B2A2-B1A1)
65
- BB1= (A2B3-B1A5)/(B1A1-B2A2)
66
- BB2 =(-B1A3)/(B1A1-B2A2)
67
- BB3 =(A2B3-B1A4)/(B1A1-B2A2)
68
- CC1 = (B2-A1)/ (B2A2-B1A1)
69
- CC2 = (B1-A2)/ (B1A1-B2*A2)
70
77
 
71
- def dynamicalsystem(state,input):
72
- derivative = np.matrix(np.zeros((SIZE_STATE,1)))
73
- derivative[0, 0] = state[1, 0]
74
- derivative[1, 0] = np.vstack( [AA1state[1, 0] + AA2state[2, 0] + AA3state[3, 0] + CC1input[0,0]])
75
- derivative[2, 0] = state[3,0]
76
- derivative[3, 0] =np.vstack( [BB1state[1,0] + BB2state[2,0] + BB3*[3,0] + CC2input[0,0]]) return np.vstack([ state[1, 0] , (AA1state[1, 0] + AA2state[2, 0] + AA3state[3, 0] + CC1input[0,0]) , state[3,0] , (BB1state[1,0] + BB2state[2,0] + BB3[3,0] + CC2*input[0,0]) ])
77
- return np.vstack([ state[1, 0] , (AA1*state[1, 0] + AA2*state[2, 0] + AA3*state[3, 0] + CC1*input[0,0]) , state[3,0] , (BB1*state[1,0] + BB2*state[2,0] + BB3*[3,0] + CC2*input[0,0]) ])
78
-
78
+ AA1= (A1*B4-B2*A4)/(B2*A2-B1*A1)
79
+ AA2 =(-B2*A3)/(B2*A2-B1*A1)
80
+ AA3 =(A1*B3-B2*A4)/(B2*A2-B1*A1)
81
+ BB1= (A2*B3-B1*A5)/(B1*A1-B2*A2)
82
+ BB2 =(-B1*A3)/(B1*A1-B2*A2)
83
+ BB3 =(A2*B3-B1*A4)/(B1*A1-B2*A2)
84
+ CC1 = (B2-A1)/ (B2*A2-B1*A1)
85
+ CC2 = (B1-A2)/ (B1*A1-B2*A2)
79
86
 
87
+ ```
88
+ コード4
89
+ ```
80
- def controller(state, reference):
90
+ def dynamicalsystem(state,input):
81
- return np.vstack( (0.0,0.0,0.0, 0.0) )
91
+ return np.vstack([ state[1, 0] , AA1*state[1, 0] + AA2*state[2, 0] + AA3*state[3, 0] + CC1*input[0,0] , state[3,0] , BB1*state[1,0] + BB2*state[2,0] + BB3*[3,0] + CC2*input[0,0] ])
82
92
 
93
+ ```
94
+ コード5
95
+ ```
83
96
  NUMBER_STEPS = int(10000) #NUMBER_STEPSに整数の10000配列格納
84
97
  TIME_START = 0.0
85
98
  TIME_END = 10.0
86
99
  TIME_STEP = (TIME_END - TIME_START)/float(NUMBER_STEPS)
87
100
  SIZE_INPUT = int(1)
88
101
  SIZE_OUTPUT = int(1)
89
- SIZE_STATE = int(4)
102
+ SIZE_STATE = int(4)
90
103
  time_t = np.matrix(np.zeros((1, NUMBER_STEPS)))
91
104
  input_u = np.matrix(np.zeros((SIZE_INPUT, NUMBER_STEPS)))
92
- output_y = np.matrix(np.zeros((SIZE_OUTPUT, NUMBER_STEPS)))
93
105
  state_x = np.matrix(np.zeros((SIZE_STATE, NUMBER_STEPS)))
94
- reference_r = np.matrix(np.zeros((SIZE_OUTPUT, NUMBER_STEPS)))
95
-
96
- state_dx = np.matrix(np.zeros((SIZE_STATE, 1)))
106
+ state_dx = np.matrix(np.zeros((SIZE_STATE, 1)))
97
-
98
- GAIN_K = np.matrix([[1.1, 0.1]])
99
- STATE_INTTAL = np.matrix(( [2], [0],[-1],[2]))
107
+ STATE_INTTAL = np.matrix(( [2], [0],[-1],[2]))
100
-
108
+ ```
109
+ コード6
110
+ ```
111
+ from numpy.matrixlib import matrix
101
112
  state_x[:, 0] = STATE_INTTAL
102
- input_u[:, 0] = np.matrix(( [0]))
103
- state_dx = np.matrix(np.zeros((SIZE_STATE, 1)))
104
113
  for counter in range(1, NUMBER_STEPS):
105
- time_t[:, counter] = TIME_STEPcounter
114
+ time_t[:, counter] = TIME_STEP*counter
106
- input_u[:, counter-1] = np.matrix(( [0.0]))
115
+ input_u[:, counter-1] = np.matrix(np.zeros((1, 1)))
107
- state_dx = dynamicalsystem(state_x[:, counter-1], input_u[:, counter-1])
116
+ state_dx = dynamicalsystem(state_x[:, counter-1], input_u[:, counter-1])
108
- state_x[:, counter] = state_x[:, counter-1] + state_dxTIME_STEP
117
+ state_x[:, counter] = state_x[:, counter-1] + state_dx*TIME_STEP
118
+ ```
119
+ コード7
120
+ ```
121
+ #plt.plot(np.ravel(time_t), np.ravel(input_u))
109
122
  plt.plot(np.ravel(time_t), np.ravel(state_x[0, :]))
110
123
  plt.show()
111
124
  plt.plot(np.ravel(time_t), np.ravel(state_x[1, :]))
@@ -116,9 +129,8 @@
116
129
  plt.show()
117
130
  ```
118
131
  ### 試したこと
119
-
132
+ コード6以外はコンパイル通りました.
120
133
  関数部分の行列がreturn文などで出力できているか確認しました.
121
- 関数部分のコンパイルは通りました.
122
134
 
123
135
 
124
136