Современные численные методы в объектно-ориентированном изложении на C#

О решении операторных уравнений

Разбить на страницы
Показывать лекцию целиком

Цель лекции: Показать способы решения операторных уравнений а гильбертовом пространстве. Реализовать с помощью объектно-ориентированного программирования на C# классы для решения этих задач.

Как мы уже отмечали, многие математические задачи могут быть записаны в виде операторных уравнений. И одной из основных задач при рассмотрении операторных уравнений является нахождение обратного оператора. Мы рассмотрим методы решения операторных уравнений, основанные на методе Галеркина. Основным модельным примером в нашем рассмотрении будет краевая (двухточечная) задача для обыкновенного дифференциального уравнения второго порядка.

Мы будем рассматривать следующее уравнение$$-y''(x)+p(x)y'(x)+q(x)y(x)=f(x),\ x\in(0,\pi),$$ со следующими краевыми условиями$$y(0)=y(\pi)=0$$ Коэффициенты $$p(x)$$ и $$q(x)$$, а также функция $$f(x)$$ считаются известными. Однако в этой лекции мы будем рассматривать лишь случай, когда $$p(x)\equiv0$$, а $$q(x)\equiv q\ge0$$.

Используя результаты предыдущей лекции, мы будем рассматривать следующее гильбертово пространство $$L_2(0,\pi)$$, в котором в качестве базисных функций выбраны функции$$e_k=\sqrt{\frac{2}{\pi}}\sin kx,\ k=1,2,\dots.$$ Введем еще одно пространство, которое обозначим $$H^2(0,\pi)$$. Мы будем говорить, что функция $$u\in L_2(0,\pi)$$ принадлежит пространству $$H^2(0,\pi)$$, если коэффициенты Фурье этой функции:$$u=\sum\limits_{k=1}^\infty u_k\sqrt{\frac{2}{\pi}}\sin kx$$ удовлетворяют следующему условию --- для них сходится ряд:$$\|u\|_{H^2(0,\pi)}^2=\sum\limits_{k=1}^\infty k^2|u_k|^2<\infty.$$ Последнее условие требует более быстрого убывания коэффициентов Фурье, что соответствует большей гладкости решения. Как мы видели в прошлой лекции, если функция $$u\in H^2(0,\pi)$$, то вторая производная этой функции (точнее, действие оператора $${\cal D}^2$$ ) принадлежит $$L_2(0,\pi)$$. Введем еще один простой оператор$$Q:L_2(0,\pi)\to L_2(0,\pi)$$ умножения на константу $$q$$. Очевидно, что это тоже диагональный оператор, для которого коэффициенты $$\alpha_k$$ равны$$\alpha_k=q.$$ Тогда задачу 11.1 - 11.2 можно записать в операторном виде:$$-D^2[y]+Q[y]=f,$$ где $$$f\in L_2(0,\pi)$$$. Соответственно, решением задачи 11.3 называется функция $$$y\in H^2(0,\pi)$$$, удовлетворяющая уравнению 11.3.

Операторный подход позволяет довольно просто получить решение задачи 11.3. Чтобы вывести аналитико-численные формулы, для решения задачи 11.3 представим функцию $$f$$ разложением в ряд:$$f(x)=\sum\limits_{k=1}^\infty f_k\sqrt{\frac{2}{\pi}}\sin kx,$$ где коэффициенты Фурье могут быть найдены по формуле$$f_k=\int\limits_0^\pi f(x)\sqrt{\frac{2}{\pi}}\sin kx dx.$$ Соответственно, решение $$y$$ мы будем искать в виде:$$y(x)=\sum\limits_{k=1}^\infty y_k\sqrt{\frac{2}{\pi}}\sin kx.$$ Таким образом задача сводится к нахождению чисел $$y_k$$. Находить эти числа мы будем следующим образом - подставим разложение по базисным функциям в уравнение 11.3:$$-{\cal D}^2[\sum\limits_{k=1}^\infty y_k\sqrt{\frac{2}{\pi}}\sin kx]+Q[\sum\limits_{k=1}^\infty y_k\sqrt{\frac{2}{\pi}}\sin kx]=\sum\limits_{k=1}^\infty f_k\sqrt{\frac{2}{\pi}}\sin kx,$$ Что можно записать следующим образом$$\sum\limits_{k=1}^\infty \left(k^2+q\right)y_k\sqrt{\frac{2}{\pi}}\sin kx=\sum\limits_{k=1}^\infty f_k\sqrt{\frac{2}{\pi}}\sin kx$$ Умножая скалярно это равенство на базисные функции $$\sqrt{\frac{2}{\pi}}\sin kx$$, получаем цепочку (бесконечную) равенств:$$(k^2+q)y_k=f_k.$$ Откуда получаем (в силу неотрицательности $$q$$ ):$$y_k=\frac{f_k}{k^2+q}.$$ Наш операторный подход позволяет получать решение краевой задачи для дифференциального уравнения используя лишь арифметические операции.

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

Перейдем к программированию классов для реализации операторного подхода к решению задачи 11.1 - 11.2.

$$\begin{verbatim} // класс для вычисления оператора class TOE { TD2Q D2Q; public TOE(double q, TRFunc F) { D2Q = new TD2Q(q, new TL2Right(F)); } public double Y(double x) { return D2Q.Calc(x); } } // класс оператора class TD2Q : TL2Operator { double q; public TD2Q(double q, THElement u) : base(u) { if (q < 0) { this.q = 0; } else { this.q = q; } } public override double alpha(int k) { double kx = (double)k; return 1.0 / (kx * kx + q); } } \end{verbatim}$$ $$\begin{verbatim} // класс - базисные функции class TE_k : TRFunc { int k; public TE_k(int k) : base(0, Math.PI) { this.k = k; } protected override TElement CalcVal(double x) { TElement res = new TElement(Math.Sqrt(2.0 / Math.PI) * Math.Sin((double)k * x)); return res; } } \end{verbatim}$$ $$\begin{verbatim} // класс - правые части уравнения class TL2Right : TL2Element { protected TLSpace Ld; protected TRFunc F; public TL2Right(TRFunc F) { Ld = new TLSpace(); this.F = F; } // разложение по базису public override double a(int k) { TE_k e_k = new TE_k(k); return Ld.inner(F, e_k); } } class TRight1 : TRFunc { public TRight1() : base(0, Math.PI) { } protected override TElement CalcVal(double x) { TElement res = new TElement(1.0); return res; } } \end{verbatim}$$ $$\begin{verbatim} class TRight2 : TRFunc { public TRight2() : base(0, Math.PI) { } protected override TElement CalcVal(double x) { TElement res = new TElement(Math.Sin(x)); return res; } } class TRight3 : TRFunc { public TRight3() : base(0, Math.PI) { } protected override TElement CalcVal(double x) { TElement res = new TElement(Math.Cos(x)); return res; } } \end{verbatim}$$

Теперь будем решать численно нашу задачу для разных значений $$q$$ и правых частей $$f(x)$$.

$$\begin{verbatim} TRight1 F1 = new TRight1(); TOE OE = new TOE(0, F1); Console.WriteLine("q = 0; f(x)=1; Y(1) = {0}", OE.Y(1.0)); TRight2 F2 = new TRight2(); OE = new TOE(0, F2); Console.WriteLine("q = 0; f(x)=sin(x); Y(1) = {0}", OE.Y(1.0)); TRight3 F3 = new TRight3(); OE = new TOE(0, F3); Console.WriteLine("q = 0; f(x)=cos(x); Y(1) = {0}", OE.Y(1.0)); OE = new TOE(10.0, F1); Console.WriteLine("q = 10; f(x)=sin(x); Y(1) = {0}", OE.Y(1.0)); OE = new TOE(10.0, F2); Console.WriteLine("q = 10; f(x)=sin(x); Y(1) = {0}", OE.Y(1.0)); OE = new TOE(10.0, F3); Console.WriteLine("q = 10; f(x)=cos(x); Y(1) = {0}", OE.Y(1.0)); \end{verbatim}$$

В итоге получим следующие результаты:

$$\begin{verbatim} q = 0; f(x)=1; Y(1) = 1.07079628676603 q = 0; f(x)=sin(x); Y(1) = 0.841470984797919 q = 0; f(x)=cos(x); Y(1) = 0.176922106919835 q = 10; f(x)=sin(x); Y(1) = 0.0956527832996927 q = 10; f(x)=sin(x); Y(1) = 0.0764973622552322 q = 10; f(x)=cos(x); Y(1) = 0.0453741941981012 \end{verbatim}$$

Сравним наши результаты с точными решениями при $$q=0$$. Задача$$-y''(x)=1,\ x\in(0,\pi),$$ $$y(0)=y(\pi)=0$$ Имеет точное решение$$y(x)=-\frac{1}{2}x^2+\frac{\pi}{2}x,$$ значение $$y(1)$$ равно$$y(1)=-\frac{1}{2}+\frac{\pi}{2}=1.0707963267948966192313216916398\dots.$$ Задача$$-y''(x)=\sin(x),\ x\in(0,\pi),$$ $$y(0)=y(\pi)=0$$ Имеет точное решение$$y(x)=\sin(x)$$ значение $$y(1)$$ равно$$y(1)=0.8414709848078965066525023216303\dots.$$ Задача$$-y''(x)=\cos(x),\ x\in(0,\pi),$$ $$y(0)=y(\pi)=0$$ Имеет точное решение$$y(x)=\cos x +\frac{2}{\pi}x-1$$ значение $$y(1)$$ равно$$y(1)=0.17692207823572106047647166093303\dots.$$ Мы видим, что наши численные результаты довольно точны. Однако если бы мы использовали аналитические выражения для коэффициентов Фурье, то точность и скорость вычислений были бы значительно выше. Это выражает тот факт, что использование теоретических знаний при конструировании численных методов могут значительно увеличить эффективность последних.

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

Гильбертово пространство $$L_2(0,\pi)$$ - наиболее известное гильбертово функциональное пространство, состоящее из измеримых функций, интегрируемых в квадратом модуля.

Краевая задача - дифференциальное уравнение с заданными условиями на решение на концах отрезка.

Метод Галеркина - общий метод для приближенного нахождения решений операторных уравнений.

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

Практическое занятие "Реализация операторов в гильбертовых пространствах"

Цель занятия

Продемонстрировать на характерных примерах реализацию линейных операторов в сепарабельных гильбертовых пространствах.

Практическая задача

Будем рассматривать абстрактное гильбертово пространство $$H$$, которое задано с помощью своего ортонормированного базиса $$e_k$$. Если в качестве пространства $$H$$ взять гильбертово пространство $$L_2(0,\pi)$$, то в качестве ортонормированного базиса можно взять систему функций$$e_0=\frac{1}{\sqrt{\pi}},$$ $$e_k=\sqrt{\frac{2}{\pi}}\cos kx,\quad k=1,2,\ldots.$$

Рассмотрим реализацию линейного оператора, действующего в пространстве $$H$$, заданного с помощью бесконечной матрицы. Зададим формально бесконечную матрицу $$\Lambda$$ как множество$$\Lambda=\{\lambda_{ij}\}_{i,j=0}^\infty,$$ где $$\lambda_{ij}$$ суть комплексные числа, которые убывают по модулю достаточно быстро.

Действие оператора $$\Lambda$$ на некоторый элемент$$x=\sum\limits_{k=0}^\infty x_ke_k$$ можно вычислить по формуле$$\Lambda x=\sum\limits_{k=0}^\infty\left(\sum\limits_{l=0}^\infty\lambda_{kl}x_l\right)e_k.$$ Мы будем предполагать, что все возникающие у нас ряды являющиеся сходящимися.

На лекциях мы встречались с операторами, которые представлялись диагональной матрицей, и по сути сводились к умножению коэффициентов Фурье на числа. Сейчас мы рассмотрим более общие операторы.

В качестве примера рассмотрим оператор $$\Lambda_1$$, который задается матрицей$$\Lambda_1=\left\{\frac{1}{1+i^2+j^2}\right\}_{i,j=0}^\infty,$$ здесь - $$\lambda_{ij}=\frac{1}{1+i^2+j^2}$$.

Пусть мы рассматриваем пространство $$L_2(0,\pi)$$ с заданным выше ортонормированным базисом. Рассмотрим функцию $$f(x)=x$$. Эта функция представляется следующим рядом Фурье$$f(x)=\frac{1}{2}\pi^2+ \sum\limits_{k=1}^\infty\frac{2}{\pi}\frac{1}{k^2}((-1)^k-1)\cos kx$$ После действия нашим оператором $$\Lambda_1$$ мы получим функцию, которая представляется следующим рядом Фурье

$$\Lambda_1f(x)=\frac{1}{2}\pi^2+ \sum\limits_{k=1}^\infty\frac{2}{\pi}\sum\limits_{l=0}^\infty \frac{1}{1+k^2+l^2}\frac{1}{l^2}((-1)^l-1)\cos kx$$

Рассмотрим еще интересный оператор $$\Lambda_2$$, действие которого можно описать следующим образом. Пусть задан элемент пространства $$H$$ своим рядом Фурье$$x=\sum\limits_{k=0}^\infty x_ke_k.$$ Тогда элемент $$y=\Lambda_2x$$ будет задаваться следующим рядом Фурье$$y=\sum\limits_{k=1}^\infty x_{k-1}e_k.$$ Посмотрим как действует этот оператор в пространстве $$L_2(0,\pi)$$. Рассмотрим простейшую функцию $$f(x)=1$$. Представим эту функцию в виде ряда Фурье$$1=\sqrt{\pi}e_0+0e_1+0e_2+\ldots$$ После действия оператора $$\Lambda_2$$ на эту функцию мы получим функцию $$\Lambda_2f(x)$$, представимую в виде$$\Lambda_2f(x)=\sqrt{\pi}e_1=\sqrt{\pi}\sqrt{\frac{2}{\pi}}\cos x=\sqrt{2}\cos x.$$

Для оператора $$\Lambda_2$$ можно привести обратный оператор $$\Lambda_3$$, который действует согласно следующей формуле$$\Lambda_3\left(\sum\limits_{k=1}^\infty x_ke_k\right)=\sum\limits_{k=0}^\infty x_{k+1}e_k.$$ Легко видеть, что для любого элемента $$x\in H$$ имеет место$$\Lambda_3\Lambda_2x=x.$$ Равенство$$\Lambda_2\Lambda_3x=x.$$ верно только для таких $$x\in H$$, для которых $$x_0=0$$.

Лабораторная работа "Реализация операторов в гильбертовых пространствах"

Цель занятия

Продемонстрировать на характерных примерах реализацию линейных операторов в сепарабельных гильбертовых пространствах.

Сценарий лабораторной работы

  • Напишите программу на языке C#, для вычисления произвольного оператора, заданного матрицей.
  • Возьмите для примера функцию $$f(x)=\cos x$$, постройте функцию после действия на нее матричного оператора и начертите график полученной функции.
  • Проанализируйте каким образом действие этого оператора зависит от выбора базисных функций.
  • Повторите эти опыты для различных матричных операторов и функций.
  • Указания

    Матричный оператор в сепарабельном гильбертовом пространстве вводится следующим образом. Пусть в рассматриваемом гильбертовом пространстве $$H$$ задан ортонормированный базис $$e_k$$. Действие матричного оператора $$\Lambda$$ на некоторый элемент$$x=\sum\limits_{k=0}^\infty x_ke_k$$ можно вычислить по формуле$$\Lambda x=\sum\limits_{k=0}^\infty\left(\sum\limits_{l=0}^\infty\la_{kl}x_l\right)e_k.$$ Предполагая, что все возникающие ряды являющиеся сходящимися.

    Страницы:

    Цель лекции: Показать способы решения операторных уравнений а гильбертовом пространстве. Реализовать с помощью объектно-ориентированного программирования на C# классы для решения этих задач.

    Как мы уже отмечали, многие математические задачи могут быть записаны в виде операторных уравнений. И одной из основных задач при рассмотрении операторных уравнений является нахождение обратного оператора. Мы рассмотрим методы решения операторных уравнений, основанные на методе Галеркина. Основным модельным примером в нашем рассмотрении будет краевая (двухточечная) задача для обыкновенного дифференциального уравнения второго порядка.

    Мы будем рассматривать следующее уравнение$$-y''(x)+p(x)y'(x)+q(x)y(x)=f(x),\ x\in(0,\pi),$$ со следующими краевыми условиями$$y(0)=y(\pi)=0$$ Коэффициенты $$p(x)$$ и $$q(x)$$, а также функция $$f(x)$$ считаются известными. Однако в этой лекции мы будем рассматривать лишь случай, когда $$p(x)\equiv0$$, а $$q(x)\equiv q\ge0$$.

    Используя результаты предыдущей лекции, мы будем рассматривать следующее гильбертово пространство $$L_2(0,\pi)$$, в котором в качестве базисных функций выбраны функции$$e_k=\sqrt{\frac{2}{\pi}}\sin kx,\ k=1,2,\dots.$$ Введем еще одно пространство, которое обозначим $$H^2(0,\pi)$$. Мы будем говорить, что функция $$u\in L_2(0,\pi)$$ принадлежит пространству $$H^2(0,\pi)$$, если коэффициенты Фурье этой функции:$$u=\sum\limits_{k=1}^\infty u_k\sqrt{\frac{2}{\pi}}\sin kx$$ удовлетворяют следующему условию --- для них сходится ряд:$$\|u\|_{H^2(0,\pi)}^2=\sum\limits_{k=1}^\infty k^2|u_k|^2<\infty.$$ Последнее условие требует более быстрого убывания коэффициентов Фурье, что соответствует большей гладкости решения. Как мы видели в прошлой лекции, если функция $$u\in H^2(0,\pi)$$, то вторая производная этой функции (точнее, действие оператора $${\cal D}^2$$ ) принадлежит $$L_2(0,\pi)$$. Введем еще один простой оператор$$Q:L_2(0,\pi)\to L_2(0,\pi)$$ умножения на константу $$q$$. Очевидно, что это тоже диагональный оператор, для которого коэффициенты $$\alpha_k$$ равны$$\alpha_k=q.$$ Тогда задачу 11.1 - 11.2 можно записать в операторном виде:$$-D^2[y]+Q[y]=f,$$ где $$$f\in L_2(0,\pi)$$$. Соответственно, решением задачи 11.3 называется функция $$$y\in H^2(0,\pi)$$$, удовлетворяющая уравнению 11.3.

    Операторный подход позволяет довольно просто получить решение задачи 11.3. Чтобы вывести аналитико-численные формулы, для решения задачи 11.3 представим функцию $$f$$ разложением в ряд:$$f(x)=\sum\limits_{k=1}^\infty f_k\sqrt{\frac{2}{\pi}}\sin kx,$$ где коэффициенты Фурье могут быть найдены по формуле$$f_k=\int\limits_0^\pi f(x)\sqrt{\frac{2}{\pi}}\sin kx dx.$$ Соответственно, решение $$y$$ мы будем искать в виде:$$y(x)=\sum\limits_{k=1}^\infty y_k\sqrt{\frac{2}{\pi}}\sin kx.$$ Таким образом задача сводится к нахождению чисел $$y_k$$. Находить эти числа мы будем следующим образом - подставим разложение по базисным функциям в уравнение 11.3:$$-{\cal D}^2[\sum\limits_{k=1}^\infty y_k\sqrt{\frac{2}{\pi}}\sin kx]+Q[\sum\limits_{k=1}^\infty y_k\sqrt{\frac{2}{\pi}}\sin kx]=\sum\limits_{k=1}^\infty f_k\sqrt{\frac{2}{\pi}}\sin kx,$$ Что можно записать следующим образом$$\sum\limits_{k=1}^\infty \left(k^2+q\right)y_k\sqrt{\frac{2}{\pi}}\sin kx=\sum\limits_{k=1}^\infty f_k\sqrt{\frac{2}{\pi}}\sin kx$$ Умножая скалярно это равенство на базисные функции $$\sqrt{\frac{2}{\pi}}\sin kx$$, получаем цепочку (бесконечную) равенств:$$(k^2+q)y_k=f_k.$$ Откуда получаем (в силу неотрицательности $$q$$ ):$$y_k=\frac{f_k}{k^2+q}.$$ Наш операторный подход позволяет получать решение краевой задачи для дифференциального уравнения используя лишь арифметические операции.

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

    Перейдем к программированию классов для реализации операторного подхода к решению задачи 11.1 - 11.2.

    $$\begin{verbatim} // класс для вычисления оператора class TOE { TD2Q D2Q; public TOE(double q, TRFunc F) { D2Q = new TD2Q(q, new TL2Right(F)); } public double Y(double x) { return D2Q.Calc(x); } } // класс оператора class TD2Q : TL2Operator { double q; public TD2Q(double q, THElement u) : base(u) { if (q < 0) { this.q = 0; } else { this.q = q; } } public override double alpha(int k) { double kx = (double)k; return 1.0 / (kx * kx + q); } } \end{verbatim}$$ $$\begin{verbatim} // класс - базисные функции class TE_k : TRFunc { int k; public TE_k(int k) : base(0, Math.PI) { this.k = k; } protected override TElement CalcVal(double x) { TElement res = new TElement(Math.Sqrt(2.0 / Math.PI) * Math.Sin((double)k * x)); return res; } } \end{verbatim}$$ $$\begin{verbatim} // класс - правые части уравнения class TL2Right : TL2Element { protected TLSpace Ld; protected TRFunc F; public TL2Right(TRFunc F) { Ld = new TLSpace(); this.F = F; } // разложение по базису public override double a(int k) { TE_k e_k = new TE_k(k); return Ld.inner(F, e_k); } } class TRight1 : TRFunc { public TRight1() : base(0, Math.PI) { } protected override TElement CalcVal(double x) { TElement res = new TElement(1.0); return res; } } \end{verbatim}$$ $$\begin{verbatim} class TRight2 : TRFunc { public TRight2() : base(0, Math.PI) { } protected override TElement CalcVal(double x) { TElement res = new TElement(Math.Sin(x)); return res; } } class TRight3 : TRFunc { public TRight3() : base(0, Math.PI) { } protected override TElement CalcVal(double x) { TElement res = new TElement(Math.Cos(x)); return res; } } \end{verbatim}$$

    Теперь будем решать численно нашу задачу для разных значений $$q$$ и правых частей $$f(x)$$.

    $$\begin{verbatim} TRight1 F1 = new TRight1(); TOE OE = new TOE(0, F1); Console.WriteLine("q = 0; f(x)=1; Y(1) = {0}", OE.Y(1.0)); TRight2 F2 = new TRight2(); OE = new TOE(0, F2); Console.WriteLine("q = 0; f(x)=sin(x); Y(1) = {0}", OE.Y(1.0)); TRight3 F3 = new TRight3(); OE = new TOE(0, F3); Console.WriteLine("q = 0; f(x)=cos(x); Y(1) = {0}", OE.Y(1.0)); OE = new TOE(10.0, F1); Console.WriteLine("q = 10; f(x)=sin(x); Y(1) = {0}", OE.Y(1.0)); OE = new TOE(10.0, F2); Console.WriteLine("q = 10; f(x)=sin(x); Y(1) = {0}", OE.Y(1.0)); OE = new TOE(10.0, F3); Console.WriteLine("q = 10; f(x)=cos(x); Y(1) = {0}", OE.Y(1.0)); \end{verbatim}$$

    В итоге получим следующие результаты:

    $$\begin{verbatim} q = 0; f(x)=1; Y(1) = 1.07079628676603 q = 0; f(x)=sin(x); Y(1) = 0.841470984797919 q = 0; f(x)=cos(x); Y(1) = 0.176922106919835 q = 10; f(x)=sin(x); Y(1) = 0.0956527832996927 q = 10; f(x)=sin(x); Y(1) = 0.0764973622552322 q = 10; f(x)=cos(x); Y(1) = 0.0453741941981012 \end{verbatim}$$

    Сравним наши результаты с точными решениями при $$q=0$$. Задача$$-y''(x)=1,\ x\in(0,\pi),$$ $$y(0)=y(\pi)=0$$ Имеет точное решение$$y(x)=-\frac{1}{2}x^2+\frac{\pi}{2}x,$$ значение $$y(1)$$ равно$$y(1)=-\frac{1}{2}+\frac{\pi}{2}=1.0707963267948966192313216916398\dots.$$ Задача$$-y''(x)=\sin(x),\ x\in(0,\pi),$$ $$y(0)=y(\pi)=0$$ Имеет точное решение$$y(x)=\sin(x)$$ значение $$y(1)$$ равно$$y(1)=0.8414709848078965066525023216303\dots.$$ Задача$$-y''(x)=\cos(x),\ x\in(0,\pi),$$ $$y(0)=y(\pi)=0$$ Имеет точное решение$$y(x)=\cos x +\frac{2}{\pi}x-1$$ значение $$y(1)$$ равно$$y(1)=0.17692207823572106047647166093303\dots.$$ Мы видим, что наши численные результаты довольно точны. Однако если бы мы использовали аналитические выражения для коэффициентов Фурье, то точность и скорость вычислений были бы значительно выше. Это выражает тот факт, что использование теоретических знаний при конструировании численных методов могут значительно увеличить эффективность последних.

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

    Гильбертово пространство $$L_2(0,\pi)$$ - наиболее известное гильбертово функциональное пространство, состоящее из измеримых функций, интегрируемых в квадратом модуля.

    Краевая задача - дифференциальное уравнение с заданными условиями на решение на концах отрезка.

    Метод Галеркина - общий метод для приближенного нахождения решений операторных уравнений.

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

    Практическое занятие "Реализация операторов в гильбертовых пространствах"

    Цель занятия

    Продемонстрировать на характерных примерах реализацию линейных операторов в сепарабельных гильбертовых пространствах.

    Практическая задача

    Будем рассматривать абстрактное гильбертово пространство $$H$$, которое задано с помощью своего ортонормированного базиса $$e_k$$. Если в качестве пространства $$H$$ взять гильбертово пространство $$L_2(0,\pi)$$, то в качестве ортонормированного базиса можно взять систему функций$$e_0=\frac{1}{\sqrt{\pi}},$$ $$e_k=\sqrt{\frac{2}{\pi}}\cos kx,\quad k=1,2,\ldots.$$

    Рассмотрим реализацию линейного оператора, действующего в пространстве $$H$$, заданного с помощью бесконечной матрицы. Зададим формально бесконечную матрицу $$\Lambda$$ как множество$$\Lambda=\{\lambda_{ij}\}_{i,j=0}^\infty,$$ где $$\lambda_{ij}$$ суть комплексные числа, которые убывают по модулю достаточно быстро.

    Действие оператора $$\Lambda$$ на некоторый элемент$$x=\sum\limits_{k=0}^\infty x_ke_k$$ можно вычислить по формуле$$\Lambda x=\sum\limits_{k=0}^\infty\left(\sum\limits_{l=0}^\infty\lambda_{kl}x_l\right)e_k.$$ Мы будем предполагать, что все возникающие у нас ряды являющиеся сходящимися.

    На лекциях мы встречались с операторами, которые представлялись диагональной матрицей, и по сути сводились к умножению коэффициентов Фурье на числа. Сейчас мы рассмотрим более общие операторы.

    В качестве примера рассмотрим оператор $$\Lambda_1$$, который задается матрицей$$\Lambda_1=\left\{\frac{1}{1+i^2+j^2}\right\}_{i,j=0}^\infty,$$ здесь - $$\lambda_{ij}=\frac{1}{1+i^2+j^2}$$.

    Пусть мы рассматриваем пространство $$L_2(0,\pi)$$ с заданным выше ортонормированным базисом. Рассмотрим функцию $$f(x)=x$$. Эта функция представляется следующим рядом Фурье$$f(x)=\frac{1}{2}\pi^2+ \sum\limits_{k=1}^\infty\frac{2}{\pi}\frac{1}{k^2}((-1)^k-1)\cos kx$$ После действия нашим оператором $$\Lambda_1$$ мы получим функцию, которая представляется следующим рядом Фурье

    $$\Lambda_1f(x)=\frac{1}{2}\pi^2+ \sum\limits_{k=1}^\infty\frac{2}{\pi}\sum\limits_{l=0}^\infty \frac{1}{1+k^2+l^2}\frac{1}{l^2}((-1)^l-1)\cos kx$$

    Рассмотрим еще интересный оператор $$\Lambda_2$$, действие которого можно описать следующим образом. Пусть задан элемент пространства $$H$$ своим рядом Фурье$$x=\sum\limits_{k=0}^\infty x_ke_k.$$ Тогда элемент $$y=\Lambda_2x$$ будет задаваться следующим рядом Фурье$$y=\sum\limits_{k=1}^\infty x_{k-1}e_k.$$ Посмотрим как действует этот оператор в пространстве $$L_2(0,\pi)$$. Рассмотрим простейшую функцию $$f(x)=1$$. Представим эту функцию в виде ряда Фурье$$1=\sqrt{\pi}e_0+0e_1+0e_2+\ldots$$ После действия оператора $$\Lambda_2$$ на эту функцию мы получим функцию $$\Lambda_2f(x)$$, представимую в виде$$\Lambda_2f(x)=\sqrt{\pi}e_1=\sqrt{\pi}\sqrt{\frac{2}{\pi}}\cos x=\sqrt{2}\cos x.$$

    Для оператора $$\Lambda_2$$ можно привести обратный оператор $$\Lambda_3$$, который действует согласно следующей формуле$$\Lambda_3\left(\sum\limits_{k=1}^\infty x_ke_k\right)=\sum\limits_{k=0}^\infty x_{k+1}e_k.$$ Легко видеть, что для любого элемента $$x\in H$$ имеет место$$\Lambda_3\Lambda_2x=x.$$ Равенство$$\Lambda_2\Lambda_3x=x.$$ верно только для таких $$x\in H$$, для которых $$x_0=0$$.

    Лабораторная работа "Реализация операторов в гильбертовых пространствах"

    Цель занятия

    Продемонстрировать на характерных примерах реализацию линейных операторов в сепарабельных гильбертовых пространствах.

    Сценарий лабораторной работы

  • Напишите программу на языке C#, для вычисления произвольного оператора, заданного матрицей.
  • Возьмите для примера функцию $$f(x)=\cos x$$, постройте функцию после действия на нее матричного оператора и начертите график полученной функции.
  • Проанализируйте каким образом действие этого оператора зависит от выбора базисных функций.
  • Повторите эти опыты для различных матричных операторов и функций.
  • Указания

    Матричный оператор в сепарабельном гильбертовом пространстве вводится следующим образом. Пусть в рассматриваемом гильбертовом пространстве $$H$$ задан ортонормированный базис $$e_k$$. Действие матричного оператора $$\Lambda$$ на некоторый элемент$$x=\sum\limits_{k=0}^\infty x_ke_k$$ можно вычислить по формуле$$\Lambda x=\sum\limits_{k=0}^\infty\left(\sum\limits_{l=0}^\infty\la_{kl}x_l\right)e_k.$$ Предполагая, что все возникающие ряды являющиеся сходящимися.

    Вернуться к учебному плану