1
我目前正在研究涉及矩陣的sympy符號表達式。 我想知道是否有可能將一個這樣的矩陣乘以另一個符號。換句話說,我想矩陣Bn_Ksi
的所有行下面由gN
乘這是我想嘗試與我們如何將一個Sympy符號矩陣的所有條目乘以另一個符號?
B_Ksi = (1/H_KsiKSi) * (Bt + gN * Bn_Ksi)
的問題來自:
ipdb> gN * Bn_Ksi
*** TypeError: can't multiply sequence by non-int of type 'Symbol'
我使用MUL也嘗試並獲得:
ipdb> gN.__mul__(Bn_Ksi[1])
NotImplemented
這裏是我的C部分允許得到錯誤:
from sympy import *
x, y , Alpha, Ksi = symbols("x y Alpha Ksi")
x1x, x1y, x2x, x2y, x3x, x3y = symbols("x1x x1y x2x x2y x3x x3y")
N, nx, ny = symbols("N nx ny")
# gap function and penalty stiffness
gN, kpenN = symbols("gN, kpenN")
S = Matrix([x, y])
x1 = Matrix([x1x, x1y])
x2 = Matrix([x2x, x2y])
x3 = Matrix([x3x, x3y])
N = Matrix([nx, ny])
# control points
b0 = x2 + 0.5 * (x1 - x2)
#b3
b3 = x2 + 0.5 * (x3 - x2)
#b1
b1 = b0 + (x2- b0) * Alpha
#b2
b2 = x2 + (b3 - x2) * (1 - Alpha)
# Berstein polynomials
# B1
B0 = (1./8.) * ((1 - Ksi)**3)
# B1
B1 = (3./8.) * (1 - Ksi)**2 * (1 + Ksi)
# B3
B2 = (3./8.) * (1 - Ksi) * (1 + Ksi)**2
#B4
B3 = (1./8.) *(1 + Ksi)**3
# Berstein polynomials first order derivative
B0_Ksi = diff(B0, Ksi)
B1_Ksi = diff(B1, Ksi)
B2_Ksi = diff(B2, Ksi)
B3_Ksi = diff(B3, Ksi)
x_interp = b0 * B0 + b1 * B1 + b2 * B2 + b3 * B3
# first order derivative
x_Ksi = diff(x_interp, Ksi)
#second order derivative
x_KsiKsi = diff(x_interp, Ksi, 2)
Bn = Matrix([N, -B0 * N, -B1 * N, -B2 * N, -B3 * N])
Bn_Ksi = Matrix([0, B0_Ksi * N, B1_Ksi * N, B2_Ksi * N, B3_Ksi * N])
Bt = Matrix([x_Ksi, -B0_Ksi * x_Ksi, B1_Ksi * x_Ksi, B2_Ksi * x_Ksi, B3_Ksi * x_Ksi])
H_KsiKSi = x_Ksi.dot(x_Ksi) - gN * N.dot(x_KsiKsi)
B_Ksi = (1/H_KsiKSi) * (Bt + gN * Bn_Ksi)
我是sympy和Python的初學者,所以我希望答案不是毫無意義的。 在此先感謝您的幫助
您發佈的代碼並未在任何地方定義「Bn_Ksi」。 – user2357112
對不起,我試圖簡化代碼時犯了一些錯誤 – MarcoMag
錯誤是由於'Bn_Ksi'的定義中的第一個元素是一個標量('0'),而所有其他元素都是矩陣。提供適當尺寸的「零」矩陣而不是「0」。 – Stelios