2015-05-06 2 views
0

Привет всем, я застрял в проблеме. Я собираюсь сделать функцию, называемую квадрантами, которая принимает в качестве входного аргумента скалярное целое число n. Функция возвращает Q, матрицу 2n-by-2n. Q состоит из четырех подматриц n-на-n. Элементы подматрицы в верхнем левом углу - все 1s, элементы подматрицы в правом верхнем углу - 2s, элементы в левом нижнем углу - 3s, а элементы в правом нижнем углу - 4s.Как сделать функцию, которая принимает n в качестве аргумента и создает подматрицу в matlab

заранее спасибо за помощь ..

ответ

1

Еще один подход с bsxfun, reshape и permute

function [ out ] = quadrants(n) 
out = reshape(permute(reshape(bsxfun(@times,... 
     ones(n,n,4),permute(1:4,[1 3 2])),n,2*n,[]),[1 3 2]),2*n,[]); 
end 

Результаты:

>> quadrants(3) 

ans = 

1  1  1  2  2  2 
1  1  1  2  2  2 
1  1  1  2  2  2 
3  3  3  4  4  4 
3  3  3  4  4  4 
3  3  3  4  4  4 

Поскольку OP отчаянное с for петли здесь альтернативный подход петли

function [ out ] = quadrants(n) 
out(2*n,2*n) = 0; 
count = 1; 
for ii = 1:n:2*n 
    for jj = 1:n:2*n 
     out(ii:ii+n-1,jj:jj+n-1) = count; 
     count = count + 1; 
    end 
end 
end 

Результаты:

>> quadrants(2) 

ans = 

1  1  2  2 
1  1  2  2 
3  3  4  4 
3  3  4  4 
+0

спасибо Су много #Santhan Салаев –

1

Я думаю, что самый простой способ сделать это (старайтесь избегать мультипликатор «для» петли в MATLAB, он не любит их, пытаются использовать как можно больше матрицы, как это возможно):

function[r] = Quadrant(n) 
a = ones(n); 
r = [a 2*a; 3*a 4*a]; 
end 
+0

Это элегантный +1 :) –

1
function [Q]=quadrant(n) 
W=zeros(n); 
X=ones (n); 
Y= ones(n)*3; 
Z= ones(n)*4; 
V={[W], [X]; 
    [Y], [Z]} 
Q=cell2mat(V) 
end 
+0

Вы должны объяснить свой код немного, а не просто размещение кода. Благодаря! – Will

+0

У этого вопроса уже есть несколько ответов, в том числе принятый, от более недели назад. Вы можете уточнить, что ваш ответ, особенно почему он лучше, чем те, которые уже были опубликованы. – APH

Смежные вопросы

 Смежные вопросы