Julia中1. /与1 ./的运算差异疑问:结果为何不符?
Julia中
1. /与1 ./运算差异的解释 核心差异:运算符本质不同
./是逐元素广播除法:对操作数的对应元素逐一执行除法,标量会自动扩展为与数组同维度的结构,确保每个元素对应计算。/是矩阵右除法:对应线性代数中的最小二乘求解,当左操作数是标量时,Julia会将其视为1×1矩阵,执行矩阵层面的除法运算。
具体计算过程拆解
1. 1. / Δx 的计算逻辑
Δx是3×1的列向量,1. 被视为1×1矩阵。矩阵右除法 A / B 等价于求解线性方程组 B * X = A 的最小二乘解,具体公式为:
(Δx' * Δx)⁻¹ * Δx' * 1.
代入数值计算:
- 先计算
Δx' * Δx:2.0² + 4.0² + 8.0² = 84.0 - 求逆得到
1/84 ≈ 0.01190476 - 再乘以
Δx'(即行向量[2.0, 4.0, 8.0]),得到:[2/84, 4/84, 8/84] = [1/42, 1/21, 2/21]
对应数值就是你看到的[0.0238095, 0.047619, 0.0952381],结果是1×3的行向量。
2. 1 ./ Δx 和 1. ./ Δx 的计算逻辑
广播机制会将标量(1或1.)自动扩展为与Δx同维度的数组,然后逐元素执行除法:
1 / 2.0 = 0.51 / 4.0 = 0.251 / 8.0 = 0.125
结果是3×1的列向量,完全符合逐元素取倒数的预期。
比值倒置的原因
result1的元素与Δx的元素成正比(因为是最小二乘解的系数),所以result1[3]/result1[1] = (8/84)/(2/84) = 4.0result2的元素与Δx的元素成反比(逐元素取倒数),所以result2[3]/result2[1] = (1/8)/(1/2) = 0.25
内容的提问来源于stack exchange,提问作者Nick Brady
相关产品推荐
相关产品推荐

