2016-06-17 3 views
-1

Существует одна часть кода (MatLab), где я получаю эту ошибкуОшибка: размер матрицы должны согласовать (Matlab)

Matrix dimension must agree

Ниже приведены две реализации той же логики, но первый не один за работой. В чем проблема в первой может кто-нибудь сказать

Первая реализация

f = 1/2 * (sum((theta .* X) - y).^2); 

Второй implementaion

hx = (theta' * X - y); 
f = sum(hx.^2) * .5; 

Выше X, y, theta столбцы векторов размерности 15 * 1 и коды реализации

$ J (\ theta) = \ frac {1} {2} \ sum \ limits {i} (\ theta^T x^{(i)} - y^{(i)})^2 $

+1

На этот вопрос нельзя ответить без размеров тета, X и y. – excaza

+0

Они используют разные операции, '. *' Vs '*'. – Daniel

+0

Если все они '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' – Dan

ответ

1

Если X, y и theta - векторы столбцов размерности 15 * 1, то правильная реализация вашего уравнения должна быть первой, и она не должна давать вам никаких ошибок. [Я проверил со случайными векторами столбца 15*1, и он отлично работает].

Второй код в основном не реализовать уравнение, потому что то, что вы делаете: theta' * X [что эквивалентно sum(theta.*X)], вычитая у из скалярной суммы, чтобы получить hx и снова суммируя площади hx. Я предлагаю вам перепроверить размеры theta, X и y. Из загруженного вами кода тета 14*1. Итак, поскольку вы также сказали, что не получаете ошибки во втором коде, возможно, X является 14*N матрицей и y является 1*N строка вектор. В этом случае вы должны знать, что делать с этим уравнением, и, очевидно, вы не можете использовать первую реализацию как есть. Однако вторая реализация неверна.

+0

Получаю, вторая - правильная реализация. Здесь theta = 14 * 1, X = 14 * 400, y = 1 * 400 – Atinesh

Смежные вопросы