You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Sympy无法将代入值后的克罗内克δ不等式函数求值为数值

问题:SymPy无法将矩阵元素求值为数值

我已尝试代入所有对应值评估函数,但SymPy无法将其进一步求值为数值。该函数是矩阵中的一个元素,所有类似元素均无法完成求值。我试过simplify()、doit()等多种组合,都没有效果。

函数未被求值的示例

以下是复现该问题的代码:

from sympy import summation, Min, IndexedBase, symbols, pretty_print, Matrix, diff, ImmutableDenseMatrix

K1, K2 = symbols("K1 K2")
N_T, N_f, i, j = symbols("N_T N_f i j", integer=True, positive=True)

s_x = IndexedBase("s_x")
s_y = IndexedBase("s_y")
s_z = IndexedBase("s_z")
s_star_x = IndexedBase("s_star_x")
s_star_y = IndexedBase("s_star_y")
s_star_z = IndexedBase("s_star_z")
w = IndexedBase("w")
h = IndexedBase("h")


def norm2(vec):
    if isinstance(vec, (list, Matrix)):
        return sum(comp**2 for comp in vec)
    else:
        return vec**2


s_diff_sum = summation(
    summation(
        K1
        * norm2(
            [
                s_x[i] - s_x[j] - (s_star_x[i] - s_star_x[j]),
                s_y[i] - s_y[j] - (s_star_y[i] - s_star_y[j]),
                s_z[i] - s_z[j] - (s_star_z[i] - s_star_z[j]),
            ]
        ),
        (j, i + 1, Min(N_f, i + 3)),
    ),
    (i, 1, N_f),
)


matrix_elements = []
N_f = 8
Nt_value = 4

for t in range(N_f):
    row1 = [s_x[t]]
    row2 = [s_y[t]]
    row3 = [s_z[t]]
    matrix_elements.append(row1)
    matrix_elements.append(row2)
    matrix_elements.append(row3)

S = Matrix(matrix_elements)


matrix_elements = []


for t in range(Nt_value):
    row1 = [h[t]]
    row2 = [w[t, 1]]
    row3 = [w[t, 2]]
    row4 = [w[t, 3]]

    matrix_elements.append(row1)
    matrix_elements.append(row2)
    matrix_elements.append(row3)
    matrix_elements.append(row4)


matrix_elements.append(S)

U = Matrix(matrix_elements)

pretty_print(U)


cost_diff_U_2 = diff(s_diff_sum, U, 2)

N_T, N_f, i, j = symbols("N_T N_f i j", integer=True, positive=True)

cost_diff_U_2 = cost_diff_U_2.subs({N_f: 8, K1: 0.1})

cost_diff_U_2_reshaped = cost_diff_U_2.reshape(40 * 1 * 40 * 1)

cost_diff_U_2_reshaped = cost_diff_U_2_reshaped.reshape(40, 40)

cost_diff_U_2_reshaped = ImmutableDenseMatrix(
    cost_diff_U_2_reshaped.tolist()
)

pretty_print(cost_diff_U_2_reshaped.doit(), num_columns=200)

内容的提问来源于stack exchange,提问作者Rhyn155

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 19:07:15