【发布时间】:2015-03-31 05:52:21
【问题描述】:
我试图表示一个简单的矩阵 m*n(假设它只有一行!)这样 m1n1 = m1n1^1, m1n2 = m1n1^2, m1n3 = m1n1^3, m1n3 = m1n1^4 , ... m1ni = m1n1^i。 换句话说,我试图迭代矩阵列 n 次以在末尾添加一个新向量(列),以便每个索引具有与第一个向量相同的值,但提高到其列号的幂n.
这是原始向量:
v =
1.2421
2.3348
0.1326
2.3470
6.7389
这是第三次迭代后的 v :
v =
1.2421 1.5429 1.9165
2.3348 5.4513 12.7277
0.1326 0.0176 0.0023
2.3470 5.5084 12.9282
6.7389 45.4128 306.0329
现在考虑到我在 Matlab 中完全是个菜鸟,我真的低估了这样一个看似简单的任务的难度,这花了我将近一天的时间调试和上网寻找任何线索。这是我想出的:
rows = 5;
columns = 3;
v = x(1:rows,1);
k = v;
Ncol = ones(rows,1);
extraK = ones(rows,1);
disp(v)
for c = 1:columns
Ncol = k(:,length(k(1,:))).^c; % a verbose way of selecting the last column only.
extraK = cat(2,extraK,Ncol);
end
k = cat(2,k,extraK);
disp(extraK(:,2:columns+1)) % to cut off the first column
现在这段代码(出于某种奇怪的原因)仅在行 = 6 或更少,列 = 3 或更少时才有效。
当 rows = 7 时,这是输出:
v = 1.0e+03 *
0.0012 0.0015 0.0019
0.0023 0.0055 0.0127
0.0001 0.0000 0.0000
0.0023 0.0055 0.0129
0.0067 0.0454 0.3060
0.0037 0.0138 0.0510
0.0119 0.1405 1.6654
我怎样才能让它在任意数量的行和列上运行?
谢谢!
【问题讨论】:
-
我会试试这个
bsxfun,如果成功了会回复你。 -
实际上......您的定义与您公布的结果之间存在差异!在具有 3 列的
v中,每一列似乎是列索引的第一个v(所以第 3 列是 v.^3)。但是在定义中,第三列应该是((v.^2).^3),也就是v.^6。哪一个是正确的? -
是的,你是正确的@Hoki 将 v 提高到 n 列的幂是我想要的。我会更新帖子。
-
@AbdulelahAl-Jeffery - 好的。所以你不想引用最后一列?您只想使用原始向量并将其提高到
nth 次方?如果是这样,那我原来的想法是对的。 -
实际上
format longG正是我浪费时间的原因。非常感谢@rayryeng,上帝保佑你,上帝保佑你。
标签: matlab for-loop matrix vector dimensions