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

如何无循环/特殊函数构造交替填充的N×1外部函数句柄?

解决方案

首先明确需求:生成N×1的函数句柄F(t),其中奇数位置(第1、3、5…行)填充f(t),偶数位置填充0,无需循环或toeplitz()等函数。

错误分析

你之前的代码逻辑有误:r = 2:2:N生成的是向量,N-r会得到多个值,zeros(N-r, 1)会触发维度不匹配错误,且仅将f(t)放在第一行,无法实现交替填充。

可行实现方式

方式一:逻辑索引法(通用,支持任意N)

function F = farray(f, N)
    % 构造逻辑索引:奇数位置为true,偶数为false
    idx = logical(mod(1:N, 2));
    % 生成N×1向量:true位置填f(t),false填0
    F = @(t) (idx .* f(t))(:);
end

原理:mod(1:N, 2)生成[1,0,1,0,...]的向量,转成逻辑类型后,与f(t)相乘会自动将f(t)映射到奇数行,(:)确保结果为列向量。

方式二:稀疏矩阵乘法(高效,适合大N)

function F = farray(f, N)
    % 构造N×1稀疏矩阵:奇数行是1,偶数行是0
    sel = sparse(1:2:N, 1, 1, N, 1);
    % 通过矩阵乘法将f(t)映射到目标位置
    F = @(t) sel * f(t);
end

原理:稀疏矩阵sel仅在奇数行保留1,与f(t)相乘后,自动将f(t)填充到对应行,其余行保持0,避免了不必要的内存占用。

方式三:reshape拼接法(适用于N为偶数的场景)

如果确定N是偶数(即f(t)和0各占N/2个位置),可以用reshape快速拼接:

function F = farray(f, N)
    M = N / 2;
    % 拼接[f(t);f(t);...]和[0;0;...],再转置重塑为N×1
    F = @(t) reshape([repmat(f(t), M, 1), zeros(M, 1)]', N, 1);
end

内容的提问来源于stack exchange,提问作者Jonathan Frutschy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 21:13:18