Опубликован: 18.05.2011 | Доступ: свободный | Студентов: 872 / 65 | Оценка: 4.40 / 4.20 | Длительность: 12:30:00
Лекция 6:

Принципы организации вычислительных процедур

< Лекция 5 || Лекция 6: 12 || Лекция 7 >

Обратимся к способам построения операторов T[n]. Мы рассмотрим два принципиальных метода построения приближенных решений. Во-первых, это метод дискретизации. Как правило, пространство X состоит из бесконечного числа элементов, более того, часто это пространство является бесконечномерным линейным пространством. А на компьютере мы можем работать только с конечными множествами. Поэтому для каждого целого n вводится конечное множество X_n и два отображения:

D_n:X\to X_n
и
I_n:X_n\to X.
Первое отображение осуществляет дискретизацию бесконечного пространства. Примером этого отображения может быть сужение непрерывной функции, заданной на отрезке на конечную сетку. Второе отображение играет роль интерполяции с конечного множества. Часто для этих отображений выполнено условие согласования:
D_nI_n\tilde x=\tilde x,
для любого элемента \tilde x\in X_n.

Далее решается следующая задача

A[I_n(x)]=y. ( 5.2)
Для этой задачи необходимо выбрать элемент \tilde x_n\in X_n, тогда оператор T строится по формуле:
T[n]=I_n\tilde x_n.
Поскольку выбор элемента \tilde x_n осуществляется из конечного множества, то такой выбор может быть осуществлен для заданного n на вычислительной машине.

Вычислительные процедуры, основанные на методе дискретизации пространства, как правило, применяются для нахождения приближенных решений дифференциальных и интегральных уравнений. В том числе и для приближенного решения уравнений в частных производных.

Другим часто применяемым принципом построения вычислительных процедур является использование принципа неподвижной точки отображения. Предположим, что решение уравнения 5.1 является неподвижной точкой некоторого другого отображения B:X\to
X, то есть если x^* - решение задачи 5.1, то имеет место:

Bx^*=x^*. ( 5.3)
Для простоты рассмотрения мы будем предполагать, что отображение B имеет единственную неподвижную точку.

Во многих случаях для конструктивного нахождения неподвижной точки оператора B или, соответственно, решения уравнения 5.3 используется метод простых итераций. Пусть задано начальное приближение x_0\in X, тогда последующие приближения строятся по формуле:

x_n=Bx_{n-1},\quad n=1,2,\dots
В случае, когда оператор B является сжимающим отображением, то оператор B имеет единственную неподвижную точку и последовательность x_n сходится к этой точке при любом выборе начального приближения.

Напомним, что отображение B называется сжимающим, если существует такое число \alpha<1, что для любых x',x''\in X имеет место

\rho(Bx',Bx'')\le\alpha\rho(x',x'').

Рассмотрим пример на применение метода неподвижных точек. Пусть пространства X и Y являются пространствами \Bbb{R}^2 с евклидовой метрикой. В качестве оператора A возьмем квадратную матрицу:

A=\left(%
\begin{array}{cc}
  0.9 & -0.4 \\
  -0.2 & 0.8 \\
\end{array}%
\right)
и рассмотрим уравнение
Ax=f, ( 5.4)
где f=\left(%
\begin{array}{c}
  1 \\
  1 \\
\end{array}%
\right) - вектор столбец. Таким образом, уравнение 5.4 представляет собой систему линейных алгебраических уравнений. Чтобы использовать метод неподвижной точки введем оператор B следующим образом:
Bx=\left(%
\begin{array}{cc}
  0.1 & 0.4 \\
  0.2 & 0.2 \\
\end{array}%
\right)x+\left(%
\begin{array}{c}
  1 \\
  1 \\
\end{array}%
\right)
Легко видеть, неподвижная точка оператора B совпадает с точным решением уравнения 5.6. Кстати, точное решение этого уравнения имеет вид:
x^*=\left(%
\begin{array}{c}
  1.875 \\
  1.71875 \\
\end{array}%
\right)
Будем строить приближенные решения по формуле
x_n=Bx_{n-1},\quad n=1,2,\dots
где x_0=0. Знание точного решения позволит нам вычислять значения \delta(x_n). Приведем программу расчета.
\begin{verbatim}
// Класс - двумерный вектор
class TR2
{
    public double x1; // координаты
    public double x2;

    // конструктор по умолчанию
    public TR2()
    {
        x1 = 0;
        x2 = 0;
    }

    // конструктор с заданными значениями
    public TR2(double x1, double x2)
    {
        this.x1 = x1;
        this.x2 = x2;
    }

    // вычислить метрику до точки A
    public double rho(TR2 A)
    {
        return Math.Sqrt((x1 - A.x1) * (x1 - A.x1) +
        (x2 - A.x2) * (x2 - A.x2));
    }

}
\end{verbatim}
\begin{verbatim}
// Класс - матрица 2x2
class TMatrix2
{
    double a11, a12, a21, a22;

    public TMatrix2(double a11, double a12,
        double a21, double a22)
    {
        this.a11 = a11;
        this.a12 = a12;
        this.a21 = a21;
        this.a22 = a22;
    }

    // вычислить вектор после применения матрицы к вектору x
    public TR2 Calc(TR2 x)
    {
        TR2 res = new TR2();

        res.x1 = a11 * x.x1 + a12 * x.x2;
        res.x2 = a21 * x.x1 + a22 * x.x2;

        return res;
    }
}
\end{verbatim}
\begin{verbatim}
// Класс для итерационного решения уравнения
class TContractingMatrix2
{
    TR2 x, f; // текущее значение, правая часть
    TMatrix2 Matrix; // матрица оператора

    public TContractingMatrix2(TMatrix2 Matrix, TR2 x0, TR2 f)
    {
        this.Matrix = Matrix;
        x = x0;
        this.f = f;
    }

    // переход к следующей итерации
    public TR2 Next()
    {
        TR2 xx = Matrix.Calc(x);

        xx.x1 += f.x1;
        xx.x2 += f.x2;

        x = xx;

        return x;
    }

    // текущее состояние
    public TR2 GetCurent()
    {
        return x;
    }
}
\end{verbatim}
Теперь испытаем класс TContractingMatrix2 на нашем примере.

x_n=[1.000000E+000,1.000000E+000]; d_n=1.132354E+000\\
x_n=[1.500000E+000,1.400000E+000]; d_n=4.921652E-001\\
x_n=[1.710000E+000,1.580000E+000]; d_n=2.155842E-001\\
x_n=[1.803000E+000,1.658000E+000]; d_n=9.420490E-002\\
x_n=[1.843500E+000,1.692200E+000]; d_n=4.119651E-002\\
x_n=[1.861230E+000,1.707140E+000]; d_n=1.801125E-002\\
x_n=[1.868979E+000,1.713674E+000]; d_n=7.875165E-003\\
x_n=[1.872368E+000,1.716531E+000]; d_n=3.443224E-003\\
x_n=[1.873849E+000,1.717780E+000]; d_n=1.505477E-003\\
x_n=[1.874497E+000,1.718326E+000]; d_n=6.582366E-004\\
x_n=[1.874780E+000,1.718564E+000]; d_n=2.877996E-004\\
x_n=[1.874904E+000,1.718669E+000]; d_n=1.258341E-004\\
x_n=[1.874958E+000,1.718715E+000]; d_n=5.501820E-005\\
x_n=[1.874982E+000,1.718734E+000]; d_n=2.405550E-005\\
x_n=[1.874992E+000,1.718743E+000]; d_n=1.051774E-005\\
x_n=[1.874996E+000,1.718747E+000]; d_n=4.598653E-006\\
x_n=[1.874998E+000,1.718749E+000]; d_n=2.010661E-006\\
x_n=[1.874999E+000,1.718749E+000]; d_n=8.791174E-007\\
x_n=[1.875000E+000,1.718750E+000]; d_n=3.843748E-007\\
x_n=[1.875000E+000,1.718750E+000]; d_n=1.680595E-007\\
x_n=[1.875000E+000,1.718750E+000]; d_n=7.348034E-008\\
x_n=[1.875000E+000,1.718750E+000]; d_n=3.212767E-008\\
x_n=[1.875000E+000,1.718750E+000]; d_n=1.404712E-008\\
x_n=[1.875000E+000,1.718750E+000]; d_n=6.141797E-009\\
x_n=[1.875000E+000,1.718750E+000]; d_n=2.685366E-009\\

Мы видим, что величина \delta(x_n) стремится к нулю, а сама последовательность x_n сходится к точному решению.

Классический подход вычислительной математики состоит в том, что строится некоторая эффективно выполняемая вычислительная процедура позволяющая получать приближенные решения, которые сходятся (в том или ином смысле) к точному решению. Такой подход подразумевает, что исходная задача является корректной. Корректность задачи по Адамару означает выполнения следующих трех условий:

  • Существование решения
  • Единственность решения
  • Непрерывная зависимость решения от оператора задач, правой части, начального условия

В начале прошлого века могло показаться, что эти условия всегда должны быть выполнены для имеющих физический смысл задач. Однако довольно быстро выяснилось, что наука и техника предъявляют большой класс задач, для которых условия некоторые из условий 1--3 не выполнены. К таким задачам относятся уравнения Фредгольма первого рода, обратные задачи для дифференциальных уравнений, задачи аналитического продолжения функций и многие другие. Задачи, для которых не выполнены какие-либо из условий 1--3, называются некорректными задачами. Некорректные задачи возникают в физике, например, неустойчивость Релея-Тейлора.

Как правило, применять классические вычислительные процедуры для решения некорректных задач не удается. В середине XX-го века известным математиком А.Н.Тихоновым были заложены основы теории регуляризации некорректных задач. Эти результаты нашли свое эффективное применение во многих научно-технических областях.

Изучение теории регуляризации некорректных задач выходит за рамки нашего курса.

Ключевые термины

Корректность задачи по Адамару - существование единственного решения у задачи и непрерывная зависимость решения от данных задачи.

Невязка приближенного решения - количественная мера неудовлетворения приближенным решением уравнению.

Операторное уравнение - уравнение в абстрактных пространства записанное с помощью операторов в этих пространствах.

Принцип неподвижной точки отображение - существование такого элемента для оператора, который отображается этим оператором в себя.

Краткие итоги: Рассмотрены различные способы организации вычислительных процедур для решения операторных уравнений. Рассмотрены вопросы связи невязки и точности решений. Приведен пример организации итерационной процедуры.

< Лекция 5 || Лекция 6: 12 || Лекция 7 >
Олег Корсак
Олег Корсак
Латвия, Рига
Дмитрий Кифель
Дмитрий Кифель
Казахстан, Темиртау