Как я могу решить эту ошибку MATLAB "Размеры матрицы должны согласовываться"? - PullRequest
1 голос
/ 09 марта 2011

Я набираю некоторый код для класса, но каждый раз, когда я запускаю функцию, я получаю одну и ту же ошибку:

??? Error using ==> plus
Matrix dimensions must agree.

Error in ==> Test at 6
f32=3.*exp((-x2.^2-y1.^2)./3);

Я знаю, что проблема в простой индексной ошибке, но я не могу ее нигде найти. Кто-нибудь может мне помочь?

Также у меня та же проблема со следующей строкой кода:

f34=(exp(-0.3./x2))./(log(y2).*sqrt(x2));

РЕДАКТИРОВАТЬ # 1:

x2 определяется как 0:0.1:5, а y1 определяется как -5:0.1:5, но это то, что мне было поручено определить их как. И я знаю, что exp не является функцией, потому что я использовал его в другом месте в моем файле.

РЕДАКТИРОВАНИЕ № 2:

OK. Так что, если я не могу использовать свои текущие x и y, есть ли я в любом случае, я могу определить их, чтобы они оставались на этих границах, при этом делая их одинакового размера?

Ответы [ 2 ]

4 голосов
/ 09 марта 2011

UPDATE:

ОК, теперь, когда вы подтвердили, что ваши переменные x2 и y1 содержат разное количество элементов, у вас есть пара вариантов на выбор:

  1. Для каждой переменной вы можете создать заданное количество значений в соответствующих диапазонах, используя функцию LINSPACE . Например:

    x2 = linspace(0,5,101);   %# 101 values spanning the range 0 to 5
    y1 = linspace(-5,5,101);  %# 101 values spanning the range -5 to 5
    

    Однако, когда вы вычисляете результат f32 (который также будет массивом из 101 элемента), он будет оцениваться только по соответствующим парам значений в x2 и y1 (например, x2(1) и y1(1), x2(50) и y1(50) и т. Д.).

  2. Если вы предпочитаете оценивать f32 в каждую уникальную пару точек в диапазонах x2 и y1, вам следует вместо этого использовать функцию MESHGRID чтобы генерировать ваши ценности. Это также позволит вам иметь различное количество точек в диапазонах для x2 и y1:

    [x2,y1] = meshgrid(0:0.1:5,-5:0.1:5);
    

    Вышеуказанное создаст x2 и y1 как массивы 101 на 51, так что f32 также будет массивом 101 на 51, оцененным во всех точках в заданных диапазонах значений.

Предыдущий ответ:

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

size(x2)
size(y1)

Если они дают один и тот же результат или имеют значение [1 1], то это не ваша проблема.

Следующее, что нужно проверить, это то, скрыли ли вы функцию EXP , создав переменную с именем exp. Если вы запускаете код в виде сценария в окне командной строки, введите whos и посмотрите, появляется ли переменная с именем exp. Если это так, вам нужно удалить или переименовать его, чтобы вы могли использовать функцию EXP.

0 голосов
/ 10 марта 2011

Как вы ожидаете, что -x2.^2-y1.^2 будет работать, когда x2 и y1 имеют разный размер? x2=0:0.1:5 имеет пятьдесят или около того записей, в то время как y1=-5:0.1:5 имеет около ста записей.

...