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
相关产品推荐
相关产品推荐

