重塑函数定义的矩阵

use*_*783 4 matlab reshape

我在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),[]).';
Run Code Online (Sandbox Code Playgroud)

其中xt,yt,zt都明确定义的功能t.如果我做deltax(2),我得到一个包含101个条目的列数组,类似于deltay(2)和deltaz(2).

但是,当我打电话

deltar(2)
Run Code Online (Sandbox Code Playgroud)

我收到这个错误

Input arguments to function include colon operator. To input the colon character, use ':' instead.
Run Code Online (Sandbox Code Playgroud)

我也试过了

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

但这给了我语法错误.

我必须做一些基本的matlab错误.

gno*_*ice 6

如果deltax(t)返回一个你希望重新整形为一列的矩阵,你不能使用冒号运算符,因为有两组括号紧跟在一起(MATLAB中的语法错误;可以在这里找到更多信息).您必须单独调用reshape每个delta(x|y|z)返回值:

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

另外,您也可以实现使用相同的数据整形catpermute像这样:

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

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

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