Ввод значений в матрицу - PullRequest
0 голосов
/ 08 апреля 2020

Я пытаюсь подставить значения в свою матрицу (используя эти команды J.subs ({x: 0.1, y: 0.1, z: -0.1}) f.subs ({x: 0.1, y: 0.1, z: -0.1})) но это не работает. Как я могу исправить это или go вокруг этого, поскольку значения не подставляются в мои уравнения внутри матриц?

import sympy as sp
# Create Symbols
x = sp.Symbol('x')
y = sp.Symbol('y')
z = sp.Symbol('z')

# Input Equations
eq1 = 3*x - sp.cos(y*z) - 1/2
eq2 = x**2 -81*(y+0.1)**2 + sp.sin(z) + 1.06
eq3 = sp.exp(-x*y) + 20*z + (10*sp.pi - 3)/3

# Create a blank matrix that works with symbols
J = sp.Matrix([[0,0,0],[0,0,0],[0,0,0]])
# Create the function matrix
f = sp.Matrix([[eq1],[eq2],[eq3]])


# Create the Jacobian Matrix
J[0,0] = sp.diff(eq1,x)
J[1,0] = sp.diff(eq1,y)
J[2,0] = sp.diff(eq1,z)
J[0,1] = sp.diff(eq2,x)
J[1,1] = sp.diff(eq2,y)
J[2,1] = sp.diff(eq2,z)
J[0,2] = sp.diff(eq3,x)
J[1,2] = sp.diff(eq3,y)
J[2,2] = sp.diff(eq3,z)

# Create the inital guess matrix
p = sp.Array([[0.1], [0.1], [-0.1]])

# Substitute the values

J.subs({x:0.1, y: 0.1, z: -0.1})
f.subs({x:0.1, y: 0.1, z: -0.1})



print(J)

# Create the loop for 5 iterations

# Intialize counter
i = 0

# THe loop itself
#for i in range(0,4):
#    p = p - A*f
#    i += 1
#    A.subs([(x, p[0,0]), (y, p[1,0]), (z, p[2,0])])
#    f.subs([(x, p[0,0]), (y, p[1,0]), (z, p[2,0])])

#print(p)

1 Ответ

0 голосов
/ 08 апреля 2020

Так как subs возвращает значение после выполнения подстановок, вам необходимо "перехватить" это обновленное значение:

for i in range(0,4):
    p = p - A*f
    A = A.subs([(x, p[0,0]), (y, p[1,0]), (z, p[2,0])])
    f = f.subs([(x, p[0,0]), (y, p[1,0]), (z, p[2,0])])

(И меня контролирует l oop, поэтому вы мне не нужно обновлять i.)

...