Предположим, у нас есть 3-х мерный массив F и 2-х мерная матрица S.
Сначала я нахожу матрицу Y, которая умножается на F на S. Затем я пытаюсь найти оценку F (назовем его F_est) из Y в качестве проверки работоспособности в моем коде.
Может ли кто-нибудь увидеть ошибку в логике, я, кажется, не знаю, почему F_est не совсем F.
F= randn(2,4,600);
S= randn(4,600);
for i =1:size(F,1);
for j=1:size(F,2)
for k= 1:size(F,3)
Y(i,k)= F(i,j,k) * S(j,k);
end
end
end
for i =1:size(F,1)
for j=1:size(F,2)
for k= 1:size(F,3)
F_est(i,j,k)= Y(i,k) / S(j,k);
end
end
end
затем я пытаюсь проверить, равен ли F_est - F нулю, а это не так. Любые идеи. Очень дорого.
**** РЕДАКТИРОВАТЬ после комментариев
На основании полученных ответов мне интересно, имеет ли смысл приведенный ниже код?
for k=1:size(F,3)
Y(:,k) = squeeze(F(:,:,k)* S(:,k)
end
Могу ли я восстановить F, если у меня есть Y и S?
Спасибо @AnderBiguri, поэтому в этой части более крупного кода у меня есть файлы mat, которые вводят F и S, но я отредактировал вопрос с помощью randn, и все же мое странное наблюдение сохраняется
Если «не ноль» находится в районе 1e-12: stackoverflow.com/questions/686439/…
@AndrasDeak это не то
@AndrasDeak нет, на самом деле это не так уж и мало, вы можете попробовать код. Благодарность
Y(i,k) сохраняет последнее значение относительно j. Это, вероятно, непреднамеренно и ошибка. Вы не можете воссоздать F из этого.
@AndrasDeak не уверен, что понимаю, Y не является функцией j, правильно?
Я хочу сказать, что Андер объяснил в своем ответе ниже.
@AndrasDeak Я думаю, вы говорите о другом
По поводу вашего обновления: нет. Я имею в виду, что вы все равно не сможете получить F обратно из Y, поскольку матричный продукт не может быть так легко перевернут.
@AndrasDeak, это по той же причине, что объяснил Андер? Благодарность
Нет, причина не в том. В первом фрагменте кода вы выполнили поэлементное умножение, но не сохранили все результаты, поэтому вы потеряли данные. В последнем фрагменте кода вы используете умножение матриц, которое включает в себя умножение и сложение значений. Выходные данные теперь содержат данные, сгенерированные с использованием всех ваших входных матриц, но вы по-прежнему не можете отменить операцию, потому что обратная система уравнений является недоопределенной.



Когда вы создаете Y, вы постоянно меняете его значения. При любом значении пары i,k вы перезаписываете Yj раз!
Эти 2 кода не эквивалентны, поскольку F_est(i,j,k) вычисляется только один раз, но у вас есть Y(i,k)j раза.
Я не знаю, что вы пытаетесь сделать, но умножение 3D-матрицы на 2D-матрицу не определено, и это не 2D-матрица
Вы говорите, что Y содержит только информацию из 2D-плоскости F(:,size(F,2),:), поэтому остальная часть F не может быть восстановлена.
@CrisLuengo действительно. Это просто плохая математика, вы не можете перемножить эти вещи вместе.
Что ж, технически можешь. Это просто ничего не значит. :)
@AnderBiguri, спасибо! Я редактировал вопрос. Не могли бы вы помочь мне с последней частью?
@Tyrone Это имеет смысл только в том случае, если вы пытаетесь объяснить, что делаете. Однако учтите, что то, что вы предлагаете, неверно с математической точки зрения и не имеет ничего общего с кодом. Вы не можете умножить 3D-матрицу на 2D-матрицу.
Поэтому я предполагаю, что не могу также умножить 2D-матрицу на 1-мерную матрицу, как я сделал в этом небольшом фрагменте кода, который я добавил позже после редактирования.? Спасибо
@AnderBiguri относительно моей обновленной части, просто интересно, могу ли я восстановить F, учитывая Y и S?
@Tyrone Вам нужно выйти из кода и вернуться к бумаге. Вы не можете создать Y, поэтому нет, вы не можете восстановить F. Прекратите пробовать случайный код. Если вам нужна помощь, я предлагаю вам открыть новый вопрос, объясняющий реальную проблему, которую вы пытаетесь решить, а не код, который вы пытаетесь решить.
можешь показать числовой пример?