如何用matlabFunction获取MATLAB函数的指定输出参数(以eig为例)
解决matlabFunction获取多输出函数指定输出的问题
要让matlabFunction返回像eig这类多输出函数的指定输出(比如特征向量),核心是先在符号计算层面明确你要捕获的那个输出,再把它转换成匿名函数,具体有两种常用方法:
方法1:先捕获符号形式的目标输出,再转换
这是最直观的方式,先通过符号运算得到你需要的那个输出变量,再用matlabFunction把它转成函数:
% 定义符号矩阵 B = sym('b',[2,2]); % 捕获eig的第一个输出(特征向量),用~忽略不需要的第二个输出 [Q_sym, ~] = eig(B); % 将符号形式的特征向量转换成匿名函数 Q_func = matlabFunction(Q_sym);
现在调用Q_func(b11,b12,b21,b22)(对应矩阵B的四个元素),就能得到特征向量矩阵了。
方法2:直接用matlabFunction的'Outputs'参数指定
如果你不想单独捕获符号变量,也可以直接在matlabFunction里通过'Outputs'参数指定要提取的输出位置,不过需要先构造多输出的符号函数句柄:
B = sym('b',[2,2]); % 构造返回两个输出的符号函数句柄 eig_handle = @(B) eig(B); % 指定只提取第一个输出转换成函数 Q_func = matlabFunction(eig_handle, 'Outputs', 1);
这种方式同样能得到只返回特征向量的匿名函数。
关键注意点
- 一定要清楚目标函数的输出顺序:比如
eig的多输出顺序是特征向量矩阵在前,特征值对角矩阵在后,而单输出调用时返回的是特征值,这也是你之前直接用matlabFunction('eig(B)')得到特征值的原因。 - 如果需要同时生成多个输出的函数,也可以在
'Outputs'里指定多个索引,比如'Outputs', [1,2]就能得到同时返回特征向量和特征值的函数。
内容的提问来源于stack exchange,提问作者Leo Simon
相关产品推荐
相关产品推荐

