![]() |
|
|
![]()
|
|
| Андрей А |
|
|||
|
Unregistered |
Народ помогите расколоть задачу.
Есть матрица 4x4: 1.1000000000000000 1.0901226582931150 1.0586606002640680 1.0080886692402250 1.0865561322623290 1.1000000000000000 1.0917324174590570 1.0624243262013280 1.0453597772655500 1.0833275531627040 1.1000000000000010 1.0941123323336140 0.9783399882464660 1.0403029693517960 1.0819218565679880 1.1000000000000000 Есть четыре произвольных значения(в диапазоне от 0 до 100000), допустим 5, 2, 14, 7. Умножаем их на матрицу. Надо по результату этого умножения узнать что за значения были умножены на матрицу. Но есть одна фишка. Вся эта задача реализована на C++ и все значения только в типе double. И это значит что после умножения мы получим эти значения: 29.15652906396762 30.099319821206 30.45022083221438 30.18286465127438 Вот зная их и зная матрицу надо узнать 5,2,14,7. Помощь оплачу! Пишите на [email protected] |
|||
|
||||
| LuckLess |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 180 Регистрация: 15.9.2004 Репутация: нет Всего: 1 |
А как получается число , при умножении числа на матрицу ??При данной операции обычно получается опять матрица...
|
|||
|
||||
| podval |
|
|||
![]() Где я? Кто я? ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3094 Регистрация: 25.3.2002 Где: СПб Репутация: 18 Всего: 62 |
Что имеем: пусть A - вон та матрица, записанная выше, а x = [5,2,14,7]' - тот самый вектор (штрих означает транспонирование, т.е. вектор-столбец).
После умножения матрицы на вектор получаем вектор: y = A*x Чтобы получить из y снова x, надо сделать следующее: х = inv(A)*y, где inv(.) - продедура обращения матрицы. Однако, если матрица A именно такая, как указано, то значения исходного и рассчитанного x не совпадут, т.к. матрица A плохо обусловлена (посчитайте определитель). Поэтому результат будет сильно зависеть от того, насколько скрупулезно составлена процедура обращения матрицы А. Да и это вряд ли поможет. Вот прогнал в Матлабе. Результат произведения матрицы на вектор: 29.558 30.354 30.452 29.819 И назад получаем вот что: Warning: Matrix is close to singular or badly scaled. Results may be inaccurate. RCOND = 4.380076e-017. х = 4 8 20 11 И другим способом обращения матрицы: Warning: Matrix is close to singular or badly scaled. Results may be inaccurate. RCOND = 4.380076e-017. (Type "warning off MATLAB:nearlySingularMatrix" to suppress this warning.) x = 1.8071 10.5929 6.1721 9.4125 |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 20 Всего: 454 |
Если известны начальная матрица и конечный вектор - запросто.
A * B = C B = С * (1 / A) -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| Peter |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 771 Регистрация: 28.7.2003 Где: Ставрополь Репутация: нет Всего: 1 |
Ох, кто бы еще математику учил... Я за такие ответы студентам сразу нехорошие отметки ставлю. НА МАТРИЦУ ДЕЛИТЬ НЕЛЬЗЯ!!! A*B=C -> B=[A^(-1)]*C Обратную матрицу искать надо. -------------------- всё, что делаете, делайте от души, как для Господа (Послание апостола Павла колоссянам, 3:23). |
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 33 Всего: 110 |
ну, это - вопрос терминологии, не надо из-за нее ставить нехорошие отметки деление - операция, обратная умножению а запись 1/A (ведь не было же написано B/A) вполне подходит на обозначение обратной матрицы только не стоит забывать о том, что умножение матриц некоммутативно -------------------- qqq |
|||
|
||||
| podval |
|
|||
![]() Где я? Кто я? ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3094 Регистрация: 25.3.2002 Где: СПб Репутация: 18 Всего: 62 |
Модератор: Давайте вернёмся к теме обсуждения.
|
|||
|
||||
| dm9 |
|
|||
![]() Дмитрий Копытин ![]() ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 3876 Регистрация: 22.7.2002 Где: Москва Репутация: нет Всего: 137 |
Если придираться, возникнут проблемы, связанные с конечностью дробной части double.
Добавлено @ 20:23 То есть восстановление чисел возможно лишь с какой-то точностью... |
|||
|
||||
![]()
|
| Правила форума "Алгоритмы" | |
|
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Алгоритмы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |