2016-05-24 6 views
0

В Matlab я пытаюсь создать ячейку размером 16 x1, где каждая запись этой ячейки является матрицей. У меня следующее уравнениеЗаполнение ячейки матриц в MATLAB

$$W_g = exp^{\frac{j{2\pi m}{N}(n+\frac{g}{G}))} \,\,\,\,\,\,\, m,n=0,1,.....(N-1)$$ 

для этой работы предположим, $ N = 4 $ и индекс $ г $ является индексом, который относится к сотовому элементу т.е. г = 0: 1: 15

W=cell(16,1); 

for g=1:16 
for m=1:3 
    for n=1:3 
     W{g,m,n}= exp((2*pi*j*m/4)*  n+(g-1)/16)); 
end 
end 
end 

Как я могу сделать эту работу? У меня две проблемы с этим, вы видите, что g начинается с 0, а MATLAB не принимает индекс нуля и как фактически определять матрицы внутри ячейки.

Благодаря

+0

переполнение стека не обрабатывает LaTeX. Также добавьте 1 в 'g'? 'W {g + 1, m, n}' – Suever

+0

спасибо. что было бы лучшим способом показать это уравнение – Henry

+1

@Henry Я попытался запустить ваше уравнение через редактор LaTeX. Это не делает. Вы можете использовать этот веб-сайт: https://www.codecogs.com/latex/eqneditor.php ... для создания представления изображения уравнения, которое вы можете использовать для вставки в свой пост. Исправьте свое уравнение, сделайте изображение, затем вставьте его в свой пост здесь. – rayryeng

ответ

-1

Прежде всего, я не комплексное число в MATLAB (SQRT (-1)) не J, и вы правильно, MATLAB индексируется в 1, так просто начать отсчет г на 1, до тех пор, 16.

Затем создайте нулевую матрицу и вычислите все индексы соответственно. Нечто подобное должно работать нормально:

clc 
clear all 

W=cell(16,1); 

for g=1:16; 

    temp = zeros(3,3); 
    for m=1:3 
     for n=1:3 

      temp (m,n) = exp((2*pi*1i*m/4)*  n+g/16); 
     end 

    end 

    W{g} = temp; 
end 

, если вы планируете делать гораздо больше операций, рассмотреть возможность использования LINSPACE для создания т и п индексов и использованием матричных операций

+2

Фактически оба 'i' и' j' являются 'sqrt (-1)'. Также 'g' является частью уравнения, поэтому вы, вероятно, не хотите делать' g = 1: 16'. – Suever

+0

Я предполагал, что OP необходимо g для изменения на каждой итерации из-за того, как он отправил свою петлю изначально. Разумеется, вы могли бы установить другую переменную G как константу. Не знаю, j был также сложным по умолчанию в Matlab, я узнал что-то новое сегодня;) – jerpint

+0

ваш ответ не так? – Henry

0

Так что, если я понимаю, у вас есть это уравнение :

enter image description here

И вы просто хотите следующий код:

W=cell(16,1); 

n = 1:3; 
m = 1:3; 
N = 4; 
for g=1:16 
     W{g}= exp((2*pi*j.*m/4*N).*n+(g-1)/16); 
end 

%or the 1 line version: 

W = cellfun(@(g) exp((2*pi*j.*m/4*N).*n+(g-1)/16),num2cell([1:16]),'UniformOutput',0); 

С MATLAB можно использовать Element-wise multiplication символ .*

Например:

%A matrix multiplication 
A = [2,3] 
B = [1,3]'; 

result = A * B %result = 11 

%An element wise multiplication 
A = [2,3] 
B = [1,3]; 

result = A .* B %result = [2,9] 
Смежные вопросы