函数定义矩阵的重塑
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),[]).';
其中 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)
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));
我在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)
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));