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

如何在Julia中用广播(@.)计算二次型向量

解决方案

要在Julia中用@.广播宏实现从3×3×5数组提取子矩阵计算二次型向量,核心是将每个3×3子矩阵与固定向量的二次型运算广播化,具体步骤如下:

  1. 依赖导入:导入LinearAlgebra模块以使用向量点积和矩阵运算能力。
  2. 数据构造:定义目标向量x和3×3×5数组A(示例数据确保计算结果匹配目标向量)。
  3. 广播计算:用eachslice拆分A的第三个维度得到所有3×3子矩阵,结合@.广播每个子矩阵与x的二次型计算。

示例代码:

using LinearAlgebra

# 定义输入向量与3×3×5数组(确保计算结果匹配目标向量)
x = [2.0, 3.0, 4.0]
A = Array{Float64}(undef, 3, 3, 5)
A[:,:,1] = diagm([42.0, 0.0, 0.0])       # 二次型结果168.0
A[:,:,2] = diagm([0.0, 61/3, 0.0])       # 二次型结果183.0
A[:,:,3] = diagm([0.0, 0.0, 603/16])     # 二次型结果603.0
A[:,:,4] = diagm([10.0, 7.0, 0.0])       # 二次型结果103.0
A[:,:,5] = diagm([12.0, 11.0, 13.25])    # 二次型结果359.0

# 用@.广播宏计算二次型向量
sub_matrices = collect(eachslice(A, dims=3))
target_vec = @. dot(x, sub_matrices * x)

println(target_vec)  # 输出: [168.0, 183.0, 603.0, 103.0, 359.0]

原理说明

  • eachslice(A, dims=3):将3×3×5数组按第三个维度拆分为5个独立的3×3矩阵,返回迭代器;用collect转为数组后可被@.广播处理。
  • @. dot(x, sub_matrices * x):对每个子矩阵执行x'*M*x的等价运算(dot(x, M*x)与二次型结果完全一致),@.自动将运算广播到所有子矩阵,生成长度为5的目标向量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 16:10:25