2015-09-28 3 views
0

Я пытаюсь пройти через некоторые лог-пространства, чтобы вычислить значения Z и создать контурный график. Но я застрял. Как я могу создать график контура, теперь у меня есть значения Z? И как я могу установить свою переменную Z? Мои вычисления для Z основаны на изображениях, и я не могу сделать это по-другому.MatLab - Loop через X и Y для вычисления Z

X = logspace(-10,0,10); 
Y = logspace(-10,0,10); 
for x = X 
    for y = Y 
     % here should some magic happen... but you have to assign real positive integers as indices for z 
     z(x, y) = 1; % some other heavy calculation 
    end 
end 

% what should I do here? 
contourf(x, y, z); % does not work unfortunately 
+1

Не то, чтобы вы, вероятно, захотели вычислить предмет как функцию 'X' и' Y'. Например, вы можете просто сказать 'Z = X.^3-2 * log (Y);' и вычислить 'Z' по элементам из' X' и 'Y'. –

+0

Другими словами: если возможно, создайте свою функцию так, чтобы она работала на матрицах! Тогда вам не нужен цикл for и можно просто написать 'Z = f (X, Y)', что обычно быстрее. – hbaderts

+0

Правда, но это становится более сложным при вычислении средней корреляции 20 пар изображений для разных значений X и Y. –

ответ

2

Это работает?

X = logspace(-10,0,10); 
Y = logspace(-10,0,10); 
for x = 1:numel(X) 
    for y = 1:numel(Y) 
     %// Note the reversed y,x - this is because the x-axis in an image/chart is usually mapped to the horizontal axis which is the columns whereas matrix representations would have dimension one as the rows. Hence you need to put x in dimension 2 and y in dimension 1 
     z(y,x) = 1; %// i.e. z(y,x) = f(X(x), Y(y)) 
    end 
end 

contourf(X, Y, z); 
+0

Да, это почти делает :)! Теперь он подает следующую жалобу: размер X должен соответствовать размеру Z или числу столбцов из Z. Где $ X $ имеет $ numel (X) = 2 $, $ Y $ имеет $ numel (Y) = 3 $ и $ Z $ имеет 3 столбца и 2 строки. –

+0

@Kevin try my edit - Я просто переключил 'x' и' y' вокруг при назначении 'z' – Dan

+1

Спасибо! Оно работает :)! Теперь мне нужно подождать 30 минут для результатов :). –