MATLAB数组隔位填充函数句柄问题排查
问题分析与修正
你的MATLAB函数有三个核心问题,导致无法正常工作:
直接调用
f(t)时t未定义
循环里写F{i}=f(t)时,t并不是已定义的变量——你本意是给cell元素赋值函数句柄,但实际写法是直接尝试计算f(t),MATLAB找不到t的定义,会直接报错。cell2mat不能处理函数句柄类型
函数句柄属于MATLAB的对象类型,cell2mat只能将存储数值、字符等可拼接类型的cell转换为数组,用它处理函数句柄cell会抛出类型不兼容的错误。整体逻辑偏离目标
你需要返回的是单个函数句柄:输入t后,输出一个N维数组(偶数索引为f(t),其余为0)。但原代码试图把每个位置做成独立的函数句柄再合并,完全搞错了方向。
修正后的代码(通用版本)
function F = farray(f, N) % 返回单个函数句柄,输入t后输出N维数组 F = @(t) arrayfun(@(idx) mod(idx, 2) == 0 ? f(t) : 0, 1:N); end
逻辑说明
- 直接定义一个接收
t的函数句柄,内部通过arrayfun遍历1到N的索引:- 对偶数索引,调用传入的函数句柄
f(t)获取值; - 对奇数索引,直接返回0;
- 对偶数索引,调用传入的函数句柄
- 如果
f(t)返回的是标量,arrayfun会直接输出数值数组,满足你"代入t后可转换为double数组"的需求;如果f(t)返回向量,只需给arrayfun加'UniformOutput', false参数,再用cell2mat转换即可:
function F = farray(f, N) F = @(t) arrayfun(@(idx) mod(idx, 2) == 0 ? f(t) : zeros(size(f(t))), ... 1:N, 'UniformOutput', false); F = @(t) cell2mat(F(t)); end
内容的提问来源于stack exchange,提问作者Jonathan Frutschy
相关产品推荐
相关产品推荐

