С x
и y
имеет одинаковую длину, ваша диагональная матрица D
должна быть квадратной матрицей размера п х п, с п, равным удвоенной длиной ваших x
или y
векторов. Причина, по которой вам нужно умножить длину на две, заключается в том, что операция [x,y]
объединяет массивы по горизонтали, дублируя одно из измерений.
В этом примере D
- это матрица идентичности. См. eye
для получения дополнительной информации.
x = linspace(-10,10); % x is 1x100
y = linspace(-10,10); % y is 1x100
[X,Y] = meshgrid(x,y); % X is 100x100 and Y is 100x100
D = eye(2*numel(x)); % D is 2*100x2*100 = 200x200
f = @(x,y) [x,y]*D*[x,y].'; % [X,Y] is 100x200 and [X,Y].' is 200x100
contour (X,Y,f(X,Y))
Если вы хотите D
быть случайной диагональную матрицу, вы можете сделать это сочетание diag
с одним из Random Number Generation доступных функций, как, например, randn
.
На предыдущем примере замените D
со следующей инструкцией:
D = diag(randn(1,2*numel(x)));
Вы также можете дать коэффициенты вы хотите перейти по диагонали матрицы. Для этого вам нужно будет создать вектор коэффициентов вручную, убедившись, что он имеет достаточную длину, чтобы он удовлетворял условиям, описанным в начале этого сообщения.
Попробовать заменить D
со следующими инструкциями:
v = 1:2*numel(x); % vector of coefficients: v = [1 2 ... 200]
D = diag(v);
Вы утверждаете, что "' [х, у] '1 на 2". Это неверно и является основной причиной вашей проблемы. – mikkola
@mikkola Я не знаю, почему это не так. Я проверяю, что [x, y] дает матрицу 1 на 2. – Simple
'X' и' Y' равны 100 на 100. Таким образом, когда вы вводите их в 'f' и эффективно выполняете' [X, Y] ', результатом является матрица 100 на 200. – mikkola