2014-02-20 7 views
2

A = [1 2; 3 4]과 같은 행렬을 가지고 있다고 가정하면, 행렬의 한 입구와 연관된 벡터를 각각 4 개 생성해야합니다. 하나는 -1.1에서부터, 두 번째는 -2.2에서부터 시작됩니다. 시도해 봤어배열의 각 항목과 관련된 벡터를 만들고 새 행렬에 저장하십시오.

for j=1:2 
    for k=1:2 
     W=linspace(-A(j,k),A(j,k),4) 
    end 
end 

해당 줄의 문제는 데이터를 저장하지 않는다는 것입니다. 또한 모든 행이 내가 언급 한 벡터 중 하나가되도록 새 행렬을 생성해야합니다. 내가 옥타브에 내가

W=linspace(-A,A,4) 

을 할 수 있다는 것을 알고 있지만 균등 A(k)A(k) 사이에 분산 된 4 개 개의 값을 원하는 경우에 MATLAB에서이

답변

0

작동하지 않습니다, 당신은 linspace와 조합에 anonymous function을 사용할 수 있습니다 이 방법 :

fun = @(x) linspace(-A(x), A(x), 4) 
b = fun(1:numel(A)) 
b = 

    -1.00000 -0.33333 0.33333 1.00000 
    -3.00000 -1.00000 1.00000 3.00000 
    -2.00000 -0.66667 0.66667 2.00000 
    -4.00000 -1.33333 1.33333 4.00000 

당신이 등 [-1 0 1], [-2 -1 0 1 2]을 원하는 가정은, 그때 arrayfun리터를 사용하는 것이 좋습니다 이케이 :

A = [1 2;3 4]; 

b = arrayfun(@(n) -A(n):A(n), 1:numel(A), 'UniformOutput',0) 

b = 
{ 
    [1,1] = 
    -1 0 1 
    [1,2] = 
    -3 -2 -1 0 1 2 3 
    [1,3] = 
    -2 -1 0 1 2 
    [1,4] = 
    -4 -3 -2 -1 0 1 2 3 4 

당신이 W 매번 당신 루프를 덮어 있기 때문에 귀하의 접근 방식은 작동하지 않았다. 다음 작품 :

V = zeros(numel(A),4); 

for k=1:numel(A) 
    W(k,:) = linspace(-A(k),A(k),4); 
end 

난 단지 당신이 MATLAB에서 linear indexing를 사용할 수 있기 때문에 A가에 대해 하나의 인덱스를 사용하는 이유. 루프 내부의 행렬에 값을 할당하기 전에 메모리를 할당해야합니다. "성장하는"행렬은 매우입니다.

0

당신은 그

W = zeros(4,4); 
a = reshape(A, 1, 4); 
for i=1:4 
    W(i,:) = linspace(-a(i), a(i), 4); 
end 

처럼 할 수 있으며 값의 고정 번호를 생성 할 경우

W = 

    -1.0000 -0.3333 0.3333 1.0000 
    -3.0000 -1.0000 1.0000 3.0000 
    -2.0000 -0.6667 0.6667 2.0000 
    -4.0000 -1.3333 1.3333 4.0000 
0

를 얻을 수 (예를 들어 4) A의 각 항목에 대해, 당신은 달성 할 수 한 줄에 :

>> bsxfun(@times, linspace(-1,1,4), A(:)) 

ans = 

    -1.0000 -0.3333 0.3333 1.0000 
    -3.0000 -1.0000 1.0000 3.0000 
    -2.0000 -0.6667 0.6667 2.0000 
    -4.0000 -1.3333 1.3333 4.0000 
관련 문제