函数定义矩阵的重塑

Reshape of function defined matrices

我在matlab中有如下代码

deltax=@(t)xt(t).'-xt(t);
deltay=@(t)yt(t).'-yt(t);
deltaz=@(t)zt(t).'-zt(t);

deltar=@(t)reshape([deltax(:) deltay(:) deltaz(:)].',3*(100+1),[]).';

其中 xtytzt 都是 t 的定义明确的函数。如果我执行 deltax(2),我会得到一个包含 101 个条目的列数组,对于 deltay(2) 和 deltaz(2) 也是如此。

然而当我打电话给

deltar(2)

我收到这个错误

Input arguments to function include colon operator. To input the colon character, use ':' instead.

我也试过了

deltar=@(t)reshape([deltax(t)(:) deltay(t)(:) deltaz(t)(:)].',3*(100+1),[]).';

但这给了我语法错误。

我一定是犯了一些基本的 matlab 错误。

如果 deltax(t) return 是一个您希望重塑为列的矩阵,则不能使用每个 delta(x|y|z) [=27 上的 colon operator due to having two sets of parentheses immediately following each other (a syntax error in MATLAB; more info can be found here). You'd have to call reshape 来完成=] 单独值:

deltar = @(t) reshape([reshape(deltax(t), [], 1) ...
                       reshape(deltay(t), [], 1) ...
                       reshape(deltaz(t), [], 1)].', 3*(100+1), []).';

或者,您可以使用 cat and permute 实现相同的数据重塑,如下所示:

deltar = @(t) reshape(permute(cat(3, deltax(t), deltay(t), deltaz(t)), [3 1 2]), ...
                      3*(100+1), []).';

如果每个 delta(x|y|z) 总是 return 一个 101×M 的矩阵,一个更简单的解决方案是:

deltar = @(t) reshape([deltax(t).'; deltay(t).'; deltaz(t).'], [], 3*(100+1));