2014-08-31 49 views
-4

我想在MATLAB創建以下矩陣:通過輸入一個命令來創建以下矩陣。不要輸入所有的單個元素明確

M= [ 0 0 1 10 20 
    0 0 3 8 26 
    0 0 5 6 32 
    0 0 0 0 0] 

但我不手動所有元素要輸入。

我試圖M (1:3,3:5)=[x;y;z]

其中

  • x是1至5
  • y的linspace是10〜6
  • z是20至32
  • 的linspace的linspace

但它沒有工作(最後一行零缺失)。我如何巧妙地創建M

+1

這是什麼語言? MATLAB? – 2014-08-31 14:12:51

+0

什麼是你的郎? – Kasramvd 2014-08-31 14:12:58

+0

matlab c programming – 2014-08-31 14:14:04

回答

0

我假設這是一些編程任務,否則我沒有看到爲什麼這需要在一行中完成的原因。我還假設連接一個零向量是不需要的。說到這裏有幾個建議:

假設你的向量定義,像這樣:

x = 1:2:5; 
y = 10:-2:6; 
z = 20:6:32; 

「最乾淨」的方式(無零矢量級聯的假設下)大概是:

M = subsasgn(zeros(4,5),substruct('()',{1:3,3:5}),[x',y',z']); 

或者,如果使用外部函數,您可以使用insertrows submission on FEX

M = insertrows(insertrows([(x)',(y)',(z)'],0,4)',0,[0,0])'; 

有兩個命令,並假設M不存在,你可以這樣做:

M(2:4,3:5)=([fliplr(x)',fliplr(y)',fliplr(z)']); 
M = flipud(M); 
0

奇怪的問題,但在這裏你去,在一個命令。這是假定M是以前不存在的,那xyz被定義爲x = 1:2:5; y = 10:-2:6; z = 20:6:36;

M(1:4,3:5) = [[x;y;z].'; zeros(1,3)]; 

當然,你可以避開xyz通過對飛定義它們的值:

M(1:4,3:5) = [[1:2:5; 10:-2:6; 20:6:36].'; zeros(1,3)]; 
0

如果您正在尋找不需要其他輸入的單線程並在內部創建linspace值,則可以使用下面的一個 -

M(1:4,3:5)=[bsxfun(@plus,[1 10 20],bsxfun(@times,[2 -2 6],[0:2]'));zeros(1,3)] 

輸出 -

M = 
    0  0  1 10 20 
    0  0  3  8 26 
    0  0  5  6 32 
    0  0  0  0  0 
相關問題