MATLAB调用fdstencil(2,j)时矩阵维度不匹配报错咨询
问题分析与解决方法
别担心基础问题,新手遇到维度不匹配的错误太正常了!咱们一步步来拆解这个问题:
错误根源:传入的参数不符合函数设计要求
你看fdstencil函数的注释明确标注了:j should be a vector of indices of grid points(j应该是网格点索引的一维向量)。而你传入的是一个5×5的矩阵,直接违背了函数的输入规范,这才触发了Inner matrix dimensions must agree(内维不匹配)的错误。
具体来说,错误出在这几个环节:
- 函数里
n = length(j)对矩阵来说,返回的是矩阵最大维度的长度(也就是5),但你的j实际包含25个元素,后续计算逻辑完全混乱; - 调用
fdcoeffF(k,0,j)时,fdcoeffF的x参数需要是一维向量,传入矩阵会让内部的循环计算出现维度冲突; - 最后计算截断误差的
err0 = c*(j(:).^n) / factorial(n),此时c是长度为5的行向量,而j(:).^n是25个元素的列向量,5和25的维度无法完成矩阵乘法,直接触发报错。
解决方法:批量处理每组网格点向量
从你的j矩阵来看,每行应该是一组独立的网格点索引(比如第二行是-2,-1,0,1,2这类标准中心差分模板点),所以你需要逐行调用fdstencil函数,而不是把整个矩阵传进去。用循环就能轻松实现:
% 遍历j的每一行,逐个处理每组网格点 for row_idx = 1:size(j,1) fprintf('===== 处理第%d组网格点 =====\n', row_idx); fdstencil(2, j(row_idx,:)); disp('-----------------------------'); end
这样每组网格点向量都会被正确解析,输出对应的二阶导数模板和截断误差结果。
给新手的小提示
MATLAB对输入维度非常敏感,向量(一维数组)和矩阵(二维及以上)的处理逻辑完全不同。使用任何函数前,一定要先仔细读注释里的参数说明——这能帮你避开绝大多数基础错误。如果需要批量处理多组参数,循环或者arrayfun都是很实用的工具。
内容的提问来源于stack exchange,提问作者Axion004
相关产品推荐
相关产品推荐

