|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
求问大神神们,我这个函数就是两个constraints,满足距离和速度的一个条件即可
s1=s0+t*v0
s2=s1+t*v1
s3=s2+t*v2
s4=s3+t*v3
s5=s4+t*v4
然后把上面这个迭代式写成了矩阵 s=A点乘s+B点乘v
同理速度的式子长得类似
然后S V F(外部作用力),三个建成一个5x3的矩阵来找最优值,为什么会有如下报错啊:
s=x[:,0].reshape(5,1)
IndexError: too many indices for array
代码如下:
import numpy as np
from scipy.optimize import minimize
t=0.01
m=1000
g=-9.8
#goal point
s_g=1.0
A = np.zeros((5,5))
for i in range (5):
A[0][i]=0
A[i][i-1]=1
print('A matrix is \n %s'%(A))
B = np.zeros((5,5))
for i in range (5):
B[0][i]=0
B[i][i-1]=t
print('B matrix is \n %s'%(B))
#建立 x v F 的矩阵 且所有初值为0
x0=np.zeros((5,3))
print('x v F 初始值为0的初矩阵 \n %s'%(x0))
print (np.shape(x0))
def constraint1(x):
s=x[:,0].reshape(5,1)
v=x[:,1].reshape(5,1)
return s-np.dot(A,s)-np.dot(B,v)
def constraint2(x):
F=x[:,2].reshape(5,1)
v=x[:,1].reshape(5,1)
C = np.zeros(5,1)
for i in range(5):
C[i][0]= t*(F[i][0]+m*g)/m
return v-np.dot(A,v)-C
def objective(x):
s=x[:,0].reshape(5,1)
v=x[:,1].reshape(5,1)
F=x[:,2].reshape(5,1)
for i in range (5):
sum = (s[i-1][0]+t*v[i-1][0]-s_g)**2 + (v[i-1][0]+t*(F[i-1][0]+m*g)/m)**2
return sum
# optimize
con1 = {'type':'eq','fun':constraint1}
con2 = {'type':'eq','fun':constraint2}
cons = ([con1,con2])
solution = minimize(objective,x0,method='SLSQP',constraints=cons)
愁死啦,拜托大神神们指点我一下呀!感激不尽 |
|