Julia求解线性方程组Az=b结果与R正确输出不一致排查求助
核心错误原因
你复现失败的核心问题是Julia代码中b向量的构造完全不符合R的逻辑,具体有两处错误:
- R中b的结构为:前3个元素为0,第4个为均值
m[1]=0.0427,第5个为1 - 你的Julia代码
b0 = vcat(z, μp0, 0)存在两个问题:- 注释中说明前三个是零向量,但直接写了未定义的变量
z(此时z还没有被赋值,你应该用zeros(3)生成前三个0元素) - 第五个元素错误写为0,和R中的1完全不符
- 注释中说明前三个是零向量,但直接写了未定义的变量
额外优化建议
求解线性方程组不要用inv(A)*b,Julia中的左除运算符A \ b和R的solve(A,b)功能完全等价,数值稳定性更高、计算效率也更好。
修正后可复现R结果的Julia代码
n_assets = 3 o = ones(Int8, n_assets) # 资产收益参数 rA = .0427 ; sA = .1000; lA = "A" rB = .0015 ; sB = .1044; lB = "B" rC = .0285 ; sC = .1411; lC = "C" varA = sA^2; varB = sB^2; varC = sC^2; covAB = .0018; covBC = .0026; covAC = .0011 covBA = covAB; covCB = covBC; covCA = covAC # 均值向量和协方差矩阵 μ = [rA rB rC] Σ = [varA covAB covAC; covBA varB covBC; covCA covCB varC] # 构造矩阵A(和你的原有逻辑一致,无错误) A_top = hcat(2*Σ, μ', o) A_mid = hcat(μ,0,0 ) A_bot = hcat(o',0,0) A = vcat(A_top, A_mid, A_bot) # 修正:正确构造b向量,和R逻辑完全对齐 μp0 = rA b0 = vcat(zeros(3), μp0, 1) # 用左除求解线性方程组 z = A \ b0
修正后运行输出的z向量和R结果完全一致:
5-element Vector{Float64}: 0.8274545549521028 -0.09074612266358031 0.2632915677114776 -0.3502902776605107 -0.0018442521373262098
内容的提问来源于stack exchange,提问作者user11254108
相关产品推荐
相关产品推荐

