如何以匿名函数为边界生成间隔取值的Linspace序列?
解决方案:基于匿名函数边界生成间隔取值的Linspace序列
嘿,我懂你碰到的这个小麻烦了——用固定数值当linspace边界时一切顺畅,但换成匿名函数就卡壳了对吧?核心问题其实很简单:匿名函数是个函数句柄,不是直接的数值,得先调用它算出具体值才能给linspace用。下面给你两个实用的解决方案,按需选就行:
方案一:先求值再复用原有逻辑
如果你的匿名函数输入参数(比如示例里的t)是固定的,先调用匿名函数得到具体的边界数值,剩下的逻辑就和你原来的代码完全一致了:
n = 5; % 先确定匿名函数的输入参数t(这里假设t=2,你可以换成自己需要的值) t = 2; % 定义你的匿名函数边界 left = @(t) 0.5 * t; right = @(t) 1.5 * t; % 补全右侧边界的匿名函数示例 % 关键步骤:调用匿名函数得到具体数值 left_val = left(t); right_val = right(t); % 剩下的逻辑和你原来的代码一致 y = zeros(n, 1); x = linspace(left_val, right_val, n)'; q = zeros(2*n, 1); q(1:2:end) = x; q(2:2:end) = y;
方案二:封装成函数,动态传入参数(更灵活)
如果需要多次针对不同的t值生成序列,把整个逻辑封装成一个可调用的函数会更方便,每次只用传入n和t就行:
function q = generate_spaced_sequence(n, t) % 定义匿名函数边界 left = @(t) 0.5 * t; right = @(t) 1.5 * t; % 调用匿名函数获取边界值 left_val = left(t); right_val = right(t); % 生成间隔序列 y = zeros(n, 1); x = linspace(left_val, right_val, n)'; q = zeros(2*n, 1); q(1:2:end) = x; q(2:2:end) = y; end % 调用示例 n = 5; t = 3; % 可以随时替换成其他t值 q = generate_spaced_sequence(n, t);
关键提醒
如果你的匿名函数需要多个输入参数,只需要在调用时传入对应的参数即可,比如left = @(a,b) a*b + 1,调用时就写left_val = left(2,3)。
内容的提问来源于stack exchange,提问作者BeiHerta
相关产品推荐
相关产品推荐

