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

Octave的shapeFn1d函数返回2x2数组而非预期1x2数组问题求助

问题排查及修复方案

1 输出为2×2数组的根本原因

你贴出的代码里n1 = 0.5*(1-gp1d(1,1))、n2 = 0.5*(1+gp1d(2,1))是取标量计算,拼接后本应得到1×2数组,和你实际输出不符。结合你给出的2×2输出结果反推,你实际运行的代码大概率是把索引写错为了gp1d(:,1),也就是取gp1d第一列的所有元素计算:

  • n1 = 0.5*(1-gp1d(:,1))得到2×1数组 [0.78868; 0.21132]
  • n2 = 0.5*(1+gp1d(:,1))得到2×1数组 [0.21132; 0.78868]
  • 拼接后就是你看到的2×2输出结果
    只需要把索引修正为你贴出的gp1d(1,1)和gp1d(2,1),就能得到1×2的输出维度。

2 形函数逻辑的修正说明

如果你需要的输出确实是预期的[0.78868, 0.78868],也就是第一个高斯点的N1值、第二个高斯点的N2值,那修正索引后的代码已经可以得到正确结果,测试如下:

gp1d = [-0.57735; 0.57735];
function N1d = shapeFn1d(gp1d)
  n1 = 0.5*(1-gp1d(1,1));
  n2 = 0.5*(1+gp1d(2,1));
  N1d = [n1, n2];   
end
shapeFn1d(gp1d)
% 输出:ans = 0.78867   0.78868

如果你原本的需求是计算单个高斯点对应的两个线性形函数值,那需要把n2的输入改为和n1相同的高斯点坐标,代码调整为:

function N1d = shapeFn1d(gp)
  % gp为单个高斯点的坐标值(标量)
  N1 = 0.5*(1 - gp);
  N2 = 0.5*(1 + gp);
  N1d = [N1, N2];
end
% 传入第一个高斯点测试:
shapeFn1d(-0.57735) 
% 输出:ans = 0.78867   0.21133

排查小提示

如果修正索引后还是输出错误,可以先执行clear shapeFn1d清除工作区的函数缓存,再重新运行,避免修改后的代码没有被加载。

内容的提问来源于stack exchange,提问作者R.Vatsa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 14:27:05