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

如何在Octave控制包中提取传递函数矩阵的对角元素?

Octave Control包提取传递函数矩阵对角元素的解决方案

一、直接从传递函数矩阵提取并构造对角tf矩阵

Octave的control包中,LTI对象(如tf)不支持Dtemp(i,i) = W(i,i)这类下标赋值操作,这是你遇到报错的核心原因。可以通过blkdiag函数拼接对角元素来解决:

修改后的提取函数:

function D = getD(W)
    n = size(W, 1);
    % 遍历提取所有对角传递函数,存入cell数组
    diag_tfs = arrayfun(@(i) W(i,i), 1:n, 'UniformOutput', false);
    % 用blkdiag将对角元素拼接为对角tf矩阵
    D = blkdiag(diag_tfs{:});
end

调用该函数后,返回的D是标准的tf类型对象,可直接与其他tf矩阵进行运算交互。

二、将nxn tf cell数组转换为对角tf矩阵

如果已经得到了nxn的cell数组(每个元素为tf对象),只需提取其中的对角元素,再用blkdiag拼接即可:

% 假设已有的nxn tf cell数组为cell_tfs
n = size(cell_tfs, 1);
% 提取cell数组的对角元素
diag_cells = arrayfun(@(i) cell_tfs(i,i), 1:n, 'UniformOutput', false);
% 转换为对角tf矩阵
D = blkdiag(diag_cells{:});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 04:12:14