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

Matlab代码中矩阵p第11列及后续列全为0的问题排查

问题说明

运行下方Matlab代码后,矩阵p的第11列及后续所有列变为0,且计算出的p值与预期的0.94左右或更低不符,无法定位问题原因。

代码
clear all; clc; close all;

tic;

z1 = 1;
z1 = 2;
z2 = 2*z1;
z = [z1,z2];
la1 = 1/3;
la2 = 1/3;
la = [la1,la2];
z_ave = (z1*la2 + z2*la1)/(la1 + la2);
sigma = 0.75; 
theta = sigma/(sigma-1);
pe = 1.68;
xi = 0.01:0.01:0.2;

pe = linspace(1,1.5,100);
p = zeros(length(xi),length(pe))
for i = 1:20
    for j = 1:10
p(i,j) = (1+xi(i)*pe(j)^theta)^(1/theta)
end
end

plot(pe,p(1,:))
问题分析与解决

1. 列全为0的直接原因

代码内层循环j的范围被硬编码为1:10,但pe是长度为100的数组,p初始化时是20×100的零矩阵,这导致第11到100列从未被赋值,始终保持初始的0值。

修复方法:将内层循环范围改为1:length(pe),同时外层循环用length(xi)替代硬编码的20,提升代码灵活性:

for i = 1:length(xi)
    for j = 1:length(pe)
        p(i,j) = (1+xi(i)*pe(j)^theta)^(1/theta);
    end
end

2. 数值与预期不符的原因

计算式中的theta为负数:sigma=0.75,因此theta=0.75/(0.75-1)=-3,1/theta=-1/3。代入后实际计算逻辑为:

p(i,j) = (1 + xi(i) / (pe(j)^3))^(-1/3) = 1 / (1 + xi(i)/(pe(j)^3))^(1/3)

当pe(j)在1到1.5区间时,结果始终接近1(例如pe=1.5、xi=0.2时,结果≈0.98),与预期的0.94左右不符。

建议:重新核对公式推导逻辑,比如是否theta的计算应为(sigma-1)/sigma,或是公式结构存在错误。若为CES需求函数,当替代弹性sigma<1时,需确认公式形式是否需要调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 20:05:16