我在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错误.
如果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)
另外,您也可以实现使用相同的数据整形cat
和permute
像这样:
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)