2013-11-28 1 views
0

У меня есть 3 векторовСоздать контур участка в MATLAB с 3-х векторов и х, у векторов по логарифмической шкале

x =[10^(-10) 10^(-9) 10^(-8) 10^(-7) 10^(-6) 10^(-5) 10^(-4) 10^(-3) 10^(-2)] 

y =[10^(-10) 10^(-9) 10^(-8) 10^(-7) 10^(-6) 10^(-5) 10^(-4) 10^(-3) 10^(-2)] 

и Z, который является ошибкой, которая принимает значения от 5 до 0,01.

Мне нужно создать контурный график. Тем не менее, я не могу использовать meshgrid, поскольку шаг на моей оси x и y должен быть очень маленьким, и Matlab падает, когда я пытаюсь это сделать.

Есть идеи по его решению?

+0

Если оси x и y должны быть в логарифмическом масштабе, они просто отображаются как линейная сетка (по крайней мере, для значений, которые вы указали). Почему бы просто не использовать x = [2:10], y = [2:10] (линейная шкала, где значение представляет экспоненту) и те же значения z, что и при использовании логарифмической шкалы x и y? – Falimond

+0

Итак, как мне создать meshgrid? Мне нужно создать meshgrid, чтобы иметь контурный график, не так ли? – user3047186

+0

У вас есть 9x9 = 81 z баллов правильно? – Falimond

ответ

0

Вы можете использовать meshgrid для получения требуемой сетки и позже заменить этикетки. Свойства, которые вы ищете, называются XTick и XTickLabel. См. Например: http://www.mathworks.com/matlabcentral/answers/92565

+0

Как мне создать meshgrid с векторами x и y, которые у меня есть? – user3047186

+0

Как упоминалось ранее, просто используйте индексы x- и y-векторов, т. Е. В случае x: 1-> 10^-10, 2-> 10^-9, ... Отображение этих значений может быть разрешается с помощью XTickLabel после создания графика. – fuesika

0

Для просмотра результатов необходимо использовать логарифмический масштаб. На практике это означает, что вы, вероятно, следует сделать

x = logspace(-10, -2, 9); 
y = logspace(-10, -2, 9); 

logX = log(x); 
logY = log(y); 

[lxx lyy]=meshgrid(logX, logY); 

, а затем построить контуры, как обычно, с

contour(lxx, lyy, reshape(z, [9 9])); 

Наконец, вы хотите аннотировать оси, чтобы показать вам с помощью логарифмической шкалы - или вы можете отключите метки и замените их своими значениями.

Кроме того, интересно, если вы могли бы использовать сетку у вас есть

[xx yy] = meshgrid(x, y); 

и после построения контура, делая

set(gca, 'xscale', 'log'); 
set(gca, 'yscale', 'log'); 

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

+0

Ну, это действительно не работает. Проблема в том, что у меня есть векторы: x = [10^(- 10) 10^(- 9) 10^(- 8) 10^(- 7) 10^(- 6) 10^(- 5) 10^(-4) 10^(- 3) 10^(- 2) 10^(- 1) 10^(- 0) .. (11 раз) и у = [10^(- 10) 10 (-10) (11 раз) 10 (-9) 10^(- 9) (11 раз) .... 10 (0) 10 (0) (11 раз)] z также вектор, поэтому контурный график не работает, когда z слева как вектор. – user3047186

+0

См. Редактирование. Я создал векторы 'x' и' y', которые не повторяются, затем 'xx' и' yy' (или 'lxx' и' lyy' для версий журнала), которые являются регулярной сеткой. И затем измените ваш вектор 'z' в матрицу 9x9 с помощью' reshape (x, [9 9]) 'и постройте с контуром (lxx, lyy, reshape (x, [9 9])); – Floris