Объектно-ориентированный подход к реализации линейных операторов
Цель лекции: Показать как работать с неограниченными линейными операторами в бесконечномерных пространствах.
В функциональном анализе большое значения играют линейные
операторы. Пусть и
- линейные пространства,
- линейное подпространство. Линейным
оператором
называется такое отображение, что для
любых
и
верно
![A(\lambda x+y)=\lambda Ax+Ay.](/sites/default/files/tex_cache/57b7130659f5a6d6a89e37bf7ed0e3b8.png)
![{\cal D}](/sites/default/files/tex_cache/7802dec6394490ef11949e573386d43a.png)
![A](/sites/default/files/tex_cache/7fc56270e7a70fa81a5935b72eacbe29.png)
![{\cal D}(A)](/sites/default/files/tex_cache/edf11462217ca581a931a4dfd3a783b4.png)
Если пространства и
банаховы пространства, то можно
рассматривать непрерывные операторы. Оператор
называется
непрерывным, если
и для любой сходящейся в
последовательности
имеет место
![\lim\limits_{n\to\infty}Ax_n=A\lim\limits_{n\to\infty}x_n.](/sites/default/files/tex_cache/48085e0a00c3d1cc0011ed80e66ce9a0.png)
![\|A\|=\sup\limits_{x\in\Bbb{X},x\ne0}\frac{\|Ax\|_\Bbb{Y}}{\|x\|_\Bbb{X}}=
\sup\limits_{x\in\Bbb{X},\|x\|_\Bbb{X}\le1}\|Ax\|_\Bbb{Y}.](/sites/default/files/tex_cache/8683b8688a3bdec7a79c2d860ef7b293.png)
В конечномерном случае, когда ,
линейные
операторы являются матрицами
. Примером неограниченного
оператора является оператор дифференцирования. Пусть
, множество
состоит из непрерывных на
функций, имеющих непрерывную производную, тогда оператор
![A[f]=\frac{df}{dx}](/sites/default/files/tex_cache/088fef8a8eeac52962653cd35ed8ba6e.png)
Мы будем рассматривать линейные операторы в бесконечномерных
гильбертовых пространствах. Пусть - такое гильбертово
пространство, что существует бесконечная последовательность
линейно независимых элементов
таких, что
![(e_k,e_l)_\Bbb{H}=0,\quad k\ne l](/sites/default/files/tex_cache/1a2fb17ea6ac9f62eba04a7e7a216302.png)
![(e_k,e_k)_\Bbb{H}=1.](/sites/default/files/tex_cache/4db7c5125a4f9177ca7fa40f05ff65c9.png)
![\Bbb{H}](/sites/default/files/tex_cache/92f24b633379ef9fa665c4db2a127629.png)
![u=\sum\limits_{k=1}^\infty u_ke_k,](/sites/default/files/tex_cache/0d5dc32a0a2a292da939eaecb1338422.png)
![\Bbb{H}](/sites/default/files/tex_cache/92f24b633379ef9fa665c4db2a127629.png)
![\{e_k\}](/sites/default/files/tex_cache/9c24c03faec4d6d2fc13287f6420323d.png)
![u_k](/sites/default/files/tex_cache/c96b59279af8b06034c43473c16ab01d.png)
![u_k=(u,e_k)_\Bbb{H}.](/sites/default/files/tex_cache/1bf6b0c210de190beed0038723e8ae0f.png)
![\|u\|_\Bbb{H}=\left(\sum\limits_{k=1}^\infty|u_k|^2\right)^{1/2}.](/sites/default/files/tex_cache/275a24ae07fc2985dfc19037a4e409b1.png)
Таким образом, чтобы задать любой элемент пространства
достаточно задать последовательность коэффициентов Фурье, т.е.
таких чисел, что
![\sum\limits_{k=1}^\infty|u_k|^2<\infty.](/sites/default/files/tex_cache/ada9f52dda95f3e9a910b2253b82d4bd.png)
Иногда удобно рассматривать ряды, где или
. Для этих случаев все аналогично.
Любой оператор в гильбертовом пространстве можно задать как преобразование последовательности коэффициентов Фурье. Для линейного оператора это преобразование должно быть линейным.
Большой интерес представляют такие линейные операторы, которые
можно представить последовательностью чисел (вообще говоря,
комплексных) , а действие этого оператора на элемент
следующим образом. Для любого
![u=\sum\limits_{k=1}^\infty u_ke_k](/sites/default/files/tex_cache/5627dd3926bc337c358eb97c1fc4977d.png)
![A[u]=\sum\limits_{k=1}^\infty \alpha_ku_ke_k.](/sites/default/files/tex_cache/9acb15e46493f36a8ee3c59600a730b1.png)
![|\alpha_k|\le M](/sites/default/files/tex_cache/aeeab8cdf94026ca126df552dfdc9e67.png)
Классическим примером гильбертова пространства является
пространство - измеримых на
функций и
имеющих интегрируемый по Лебегу квадрат модуля на
.
Скалярное произведение задается формулой
![(f,g)_{L_2(0,2\pi)}=\int\limits_0^{2\pi}f(x)\overline{g(x)}dx.](/sites/default/files/tex_cache/4925d800effd098bd1fc2905b43c1447.png)
![e_k=\frac{1}{\sqrt{2\pi}}e^{ikx},\quad k=0,\pm1,\pm2,\cdots.](/sites/default/files/tex_cache/1d21728f861ccbe4cdacd867e7e5b2fe.png)
![\alpha_k=ik](/sites/default/files/tex_cache/3c6e8f24efcb680be5cfd128976091a7.png)
![\sum\limits_{k=0}^\infty|\alpha_ku_k|^2<\infty.](/sites/default/files/tex_cache/ceb009b7e8dd9a6afa06e2e75c6ea890.png)
Обратимся к вопросу об объектно-ориентированнной реализации элементов гильбертовых пространств и линейных диагональных операторов.
![\begin{verbatim}
abstract class THElement
{
abstract public double a(int k);
}
abstract class THOperator
{
THElement u;
public THOperator(THElement u)
{
this.u = u;
}
abstract protected double alpha(int k);
public double a(int k)
{
return alpha(k) * u.a(k);
}
}
\end{verbatim}](/sites/default/files/tex_cache/91999dc97cb41496775fc8e47c4b545f.png)
![THElement](/sites/default/files/tex_cache/ae6a1e3dc7d63e5af15fbb09c4ca3364.png)
![THOperator](/sites/default/files/tex_cache/4639b92831903885d4d82db330763756.png)
Рассмотрим пространство в котором выберем следующий
базис
![e_k=\sqrt{\frac{2}{\pi}}\sin kx,\quad k=1,2,\cdots.](/sites/default/files/tex_cache/29183ec699ee7dc0c17122adf0b71355.png)
![f(x)=x(\pi-x).](/sites/default/files/tex_cache/24b3eb9d58e79e9c82672400453bebf0.png)
![f(x)=\sum\limits_{k=1}^\infty
-\frac{4}{\pi}\frac{(-1)^k-1}{k^3}\sin kx.](/sites/default/files/tex_cache/1db90069d429bb7672feca7f73953d82.png)
![f_k=-2\sqrt{\frac{2}{\pi}}\frac{(-1)^k-1}{k^3}.](/sites/default/files/tex_cache/f10ec48d36dcab6a4e3a6773a26ed21d.png)
![D^2](/sites/default/files/tex_cache/cd0545ba5644a91193403b58bebf1b84.png)
![\alpha_k](/sites/default/files/tex_cache/1921bcba2403434dd77df374f622ea16.png)
![\alpha_k=-k^2.](/sites/default/files/tex_cache/0b1c91c29b376a2935d3f4d432e0198b.png)
![D^2[f]](/sites/default/files/tex_cache/de611e15461e8afa0f712a039ad5ad39.png)
![g(x)={\cal D}^2[f](x)=\sum\limits_{k=1}^\infty
\frac{4}{\pi}\frac{(-1)^{k+1}-1}{k}\sin kx.](/sites/default/files/tex_cache/faee2df5f627d6cd72474d344e2d50da.png)
![\frac{4}{\pi}\sum\limits_{k=1}^\infty\frac{1}{k^2}<\infty,](/sites/default/files/tex_cache/2f553964b3b4ba287289c65576289db2.png)
![f(x)=x(\pi-x)](/sites/default/files/tex_cache/022e18ed6562bdd9a1843dd3c4a8a5ac.png)
![{\cal D}^2](/sites/default/files/tex_cache/575e40e13690ebf32ad9b5450aa6f369.png)
![h=-2](/sites/default/files/tex_cache/f50b00c33300f03b778ce0e3ca1b4ec2.png)
![-2=\sum\limits_{k=1}^\infty
\frac{4}{\pi}\frac{(-1)^{k+1}-1}{k}\sin kx.](/sites/default/files/tex_cache/6bf8fce1773ac2345e1e507ef07b80f6.png)
![{\cal D}^2f(x)=-2,](/sites/default/files/tex_cache/b328d785cd254eaf3c8376d2501901d9.png)
![-2](/sites/default/files/tex_cache/5d7b9adcbe1c629ec722529dd12e5129.png)
![x](/sites/default/files/tex_cache/9dd4e461268c8034f5c8564e155c67a6.png)
![f(x)](/sites/default/files/tex_cache/50bbd36e1fd2333108437a2ca378be62.png)
![{\cal D}^2](/sites/default/files/tex_cache/575e40e13690ebf32ad9b5450aa6f369.png)
![{\cal D}^2\sin kx=-k^2\sin kx.](/sites/default/files/tex_cache/ea11939942a13f1dac542c3fe2ac60e5.png)
![f(x)=1](/sites/default/files/tex_cache/546e912f7f43b2233ac97a4ecf33883e.png)
![1=\sum\limits_{k=1}^\infty-\frac{2}{\pi}\frac{1}{k}((-1)^k-1).](/sites/default/files/tex_cache/6d312b8ccd686e3995a39159067119b6.png)
![D^2[1]](/sites/default/files/tex_cache/bad8abdc8b487e997ef6df8fd6ce3152.png)
![g_k=\sqrt{\frac{2}{\pi}}k((-1)^k-1).](/sites/default/files/tex_cache/bd67fa3961341a9af210fbcdf24d2c23.png)
![\sum\limits_{k=1}^\infty\frac{2}{\pi}k^2((-1)^k-1)^2](/sites/default/files/tex_cache/ef3b62882a0c2b1823769f7c7368be7c.png)
![{\cal D}^2](/sites/default/files/tex_cache/575e40e13690ebf32ad9b5450aa6f369.png)
![x=0](/sites/default/files/tex_cache/e11729b0b65ecade3fc272548a3883fc.png)
![x=\pi](/sites/default/files/tex_cache/de4f666f5b3038c263cfad1d839a2a7f.png)
Проверим наши теоретические выкладки с помощью компьютерного моделирования на C#. Для этого мы реализуем следующие классы.
![\begin{verbatim}
abstract class TL2Element : THElement
{
public double Calc(double x)
{
double res = 0;
for (int k = 1; k <= 1000; k++)
{
res += a(k) * Math.Sin((double)k * x);
}
res *= Math.Sqrt(2.0 / Math.PI);
return res;
}
}
class TL2F1 : TL2Element
{
public override double a(int k)
{
double kx = (double)k;
if ((k % 2) == 0)
{
return 0;
}
else
{
return -2.0 * Math.Sqrt(2.0 / Math.PI) *
(-2.0) * (1.0 / (kx * kx * kx));
}
}
}
\end{verbatim}](/sites/default/files/tex_cache/8f0f770a143b7982bd1af438380a6115.png)
![\begin{verbatim}
class TL2F2 : TL2Element
{
public override double a(int k)
{
double kx = (double)k;
if ((k % 2) == 0)
{
return 0;
}
else
{
return - Math.Sqrt(2.0 / Math.PI) *
(-2.0) * (1.0 / kx);
}
}
}
\end{verbatim}](/sites/default/files/tex_cache/0d0604b6ee0f648d88eb283afe49e4a3.png)
![\begin{verbatim}
abstract class TL2Operator : THOperator
{
public TL2Operator(THElement u) : base(u) { }
public double Calc(double x)
{
double res = 0;
for (int k = 1; k <= 1000; k++)
{
res += a(k) * Math.Sin((double)k * x);
}
res *= Math.Sqrt(2.0 / Math.PI);
return res;
}
}
class TD2Operator : TL2Operator
{
public TD2Operator(THElement u) : base(u) { }
public override double alpha(int k)
{
double kx = (double)k;
return -(kx * kx);
}
}
\end{verbatim}](/sites/default/files/tex_cache/db66f94a359aa2d64ce172de55c110f3.png)
![\begin{verbatim}
TL2F1 F1 = new TL2F1();
TL2F2 F2 = new TL2F2();
TD2Operator D2 = new TD2Operator(F1);
Console.WriteLine("D2[x(pi-x)](1) = {0}", D2.Calc(1.0));
D2 = new TD2Operator(F2);
Console.WriteLine("D2[1](1) = {0}", D2.Calc(1.0));
\end{verbatim}](/sites/default/files/tex_cache/811ac3e3f596dca54e7bbddadc959a76.png)
![\begin{verbatim}
D2[x(pi-x)](1) = -1.99914825586894
D2[1](1) = 425.069483543905
\end{verbatim}](/sites/default/files/tex_cache/7bdd4dafad328a47a99b68b7091aa9a5.png)
![{\cal D}^2](/sites/default/files/tex_cache/575e40e13690ebf32ad9b5450aa6f369.png)
![f(x)=1](/sites/default/files/tex_cache/546e912f7f43b2233ac97a4ecf33883e.png)
Ключевые термины
Абстрактный ряд Фурье - аналог ряда Фурье в гильбертовом пространстве.
Диагональный оператор - оператор, который можно задать путем умножения коэффициентов абстрактного ряда Фурье на числа.
Линейный оператор - линейное отображение одного линейного пространства в другое.
Непрерывный оператор - непрерывное отображение одного метрического пространства в другое.
Краткие итоги: Приведена конструкционная реализация линейных неограниченных операторов в гильбертовом пространстве. Реализованы классы операторов, для представления линейных операторов на языке C#.