Математичні передумови
Нехай A - матриця N від реальних чисел, ba вектор N дійсних чисел і xa вектор N невідомих дійсних чисел. Матричне рівняння - Ax = b.
Метод Якобі полягає в наступному: розкласти A = D + R, де D - матриця діагоналей, а R - решта записів.
якщо зробити початковий розгадку рішення x0, вдосконаленим рішенням є x1 = зворотне (D) * (b - Rx), де всі множення є матричним векторним множенням, а зворотне (D) - матрицею, оберненою.
Специфікація проблеми
- Введення : Ваша повна програма повинна прийняти як вхід такі дані: матриця A, вектор b, початкова здогадка x0 та число "помилки" e.
- Вихід : Програма повинна вивести мінімальну кількість ітерацій, щоб останнє рішення відрізнялося від справжнього рішення, щонайменше e. Це означає, що кожен компонент векторів в абсолютній величині відрізняється щонайбільше e. Ви повинні використовувати метод Якобі для ітерацій.
Як вводити дані - це ваш вибір ; це може бути ваш власний синтаксис у командному рядку, ви можете брати дані з файлу, що б ви не вибрали.
Як виводяться дані - це ваш вибір ; він може бути записаний у файл, відображений у командному рядку, написаний як мистецтво ASCII, будь-що, доки воно читається людиною.
Детальніше
Вам не дано справжнього рішення: як ви обчислите справжнє рішення, залежить тільки від вас. Ви можете вирішити це, наприклад, правилом Крамера, або обчисливши обернену безпосередньо. Важливо, що у вас є справжнє рішення, яке зможете порівняти з ітераціями.
Точність - це проблема; деякі "точні рішення" для порівняння можуть відрізнятися. Для цілей цього коду гольф точне рішення має відповідати 10 знакам після коми.
Щоб бути абсолютно зрозумілим, якщо навіть один компонент вашого теперішнього ітераційного рішення перевищує його відповідний компонент у справжньому рішенні на e, тоді вам потрібно тримати ітерацію.
Верхня межа N залежить від того, яке обладнання ви використовуєте та скільки часу ви готові витратити на виконання програми. Для цілей цього коду гольф припустимо максимум N = 50.
Передумови
Коли ви викликаєте вашу програму, ви можете припустити, що вказане в усіх випадках:
- N> 1 і N <51, тобто вам ніколи не буде дано скалярне рівняння, завжди матричне рівняння.
- Усі входи знаходяться над полем дійсних чисел і ніколи не будуть складними.
- Матриця A завжди така, що метод сходить до справжнього рішення, таким чином, ви завжди можете знайти ряд ітерацій, щоб мінімізувати помилку (як визначено вище) нижче або дорівнює e.
- A ніколи не є нульовою матрицею або матрицею ідентичності, тобто є одне рішення.
Випробування
A = ((9, -2), (1, 3)), b = (3,4), x0 = (1,1), e = 0.04
Справжнє рішення - (0,586, 1,138). Перша ітерація дає x1 = (5/9, 1), що відрізняється більш ніж на 0,04 від справжнього рішення, принаймні на одну складову. Взявши іншу ітерацію, знайдемо, x2 = (0,555, 1,148), яка відрізняється менше ніж на 0,04 від (0,586, 1,138). Таким чином, вихід є
2
A = ((2, 3), (1, 4)), b = (2, -1), x0 = (2.7, -0.7), e = 1.0
У цьому випадку істинним рішенням є (2.2, -0.8), і початкова здогадка x0 вже має помилку менше e = 1,0, таким чином ми виводимо 0. Тобто, коли вам не потрібно робити ітерацію, ви просто виведете
0
Оцінка подання
Це кодовий гольф, і всі стандартні лазівки заборонені. Найкоротша правильна повна програма (або функція), тобто найменша кількість виграних байтів. Не рекомендується використовувати такі речі, як Mathematica, які містять багато необхідних кроків в одній функції, але використовують будь-яку мову, яку ви хочете.