我在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),[]).';
其中 xt
、yt
、zt
都是 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)
返回一个您希望重新整形为列的矩阵,则不能使用 colon operator 来完成由于有两组紧接在一起的括号(MATLAB 中的语法错误;可以找到更多信息 here )。你必须调用reshape
在每个 delta(x|y|z)
上分别返回值:
deltar = @(t) reshape([reshape(deltax(t), [], 1) ...
reshape(deltay(t), [], 1) ...
reshape(deltaz(t), [], 1)].', 3*(100+1), []).';
或者,您可以使用 cat
实现相同的数据 reshape 。和 permute
像这样:
deltar = @(t) reshape(permute(cat(3, deltax(t), deltay(t), deltaz(t)), [3 1 2]), ...
3*(100+1), []).';
如果每个 delta(x|y|z)
总是返回一个 101×M 的矩阵,一个更简单的解决方案是:
deltar = @(t) reshape([deltax(t).'; deltay(t).'; deltaz(t).'], [], 3*(100+1));
关于matlab - 函数定义矩阵的 reshape ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47557404/