Збережіть у стовпцях двох матриць Б і С всі вектори бj до якої ви застосували матрицю в попередніх ітераціях та результатах cj= Абj.
Для кожної нової системи ( A + D )х'=б' (або А х =б', що є особливим випадком D = 0), приблизно вирішити переопределену лінійну систему ( С+ Г Б ) у≈б', наприклад, шляхом вибору підмножини рядків (можливо, всіх) та використання методу найменшого щільного квадратного розміру. Зауважте, що лише вибрана частинаС+ D Bпотрібно зібрати; так що це швидка операція!
Покладіть х0= В у. Це хороше початкове наближення, з якого можна почати ітерацію розв’язання( A + D )х'=б'. У разі, якщо додаткові системи повинні бути оброблені, використовуйте матричні векторні продукти в цій новій ітерації для розширення матрицьБ і С на отриманій підсистемі.
Якщо матриці Б і С не вписуються в основну пам'ять, зберігайте Бна диску та заздалегідь виберіть підмножину рядків. Це дозволяє зберегти в ядрі відповідну частинуБ і С необхідні для формування системи найменших квадратів, і наступної х0 можна обчислити одним проходом Б з невеликим використанням основної пам'яті.
Рядки повинні бути вибрані таким чином, щоб вони приблизно відповідали грубій дискретизації повної проблеми. Взяти в п’ять разів більше рядків, ніж загальна кількість очікуваних множин матричного множення повинно бути достатньо.
Редагувати: Чому це працює? За конструкцією матриціБ і С пов'язані між собою С= А Б. Якщо підпростір охоплюється стовпцямиБ містить точний вектор розчину х' (рідкісна, але проста ситуація) тоді х' має форму х'= В у для деяких у. Підставивши це до рівняння, що визначаєх' дає рівняння ( С+ Г Б ) у=б'. Таким чином, у цьому випадку вищезазначений процес дає вихідну точкух0= В у=х', що є точним рішенням.
Загалом, очікувати не можна х' лежати в просторі стовпців Б, але згенерованою початковою точкою буде точка у цьому просторі колонок, найближчий до х', у метриці, визначеній вибраними рядками. Таким чином, це може бути розумне наближення. Коли більше систем обробляється, простір стовпців зростає, а наближення, ймовірно, значно покращиться, так що можна сподіватися сходитись на все меншу і меншу кількість ітерацій.
Edit2: Про створений підпростір: Якщо кожен вирішує кожну систему методом Крилова, вектори, які використовуються для отримання вихідної точки для другої системи, охоплюють підпростір Крилова першого правого боку. Таким чином, можна отримати гарне наближення кожного разу, коли цей підпростір Крилова містить вектор, близький до рішення вашої другої системи. Взагалі, вектори використовувались для отримання вихідної точки для(k+1)st система охоплює простір, що містить перший підпростір Крилова k права сторона.