67456

Модифицированная функция Бесселя нулевого индекса

Лекция

Информатика, кибернетика и программирование

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

Русский

2014-09-10

172 KB

0 чел.

Лекция 4

 – одна из функций Бесселя. Точнее, это т.н. модифицированная функция Бесселя нулевого индекса.

,

,

,   ,

.

Условия прекращения цикла суммирования:   и  


S0 = 0

A0 = 1

S1 = S0 + A1

A1 = A0*B1

B1 = (x/2)2/12

S2 = S1 + A2

A2 = A1*B2

B2 = (x/2)2/22

. . .

. . .

. . .

Si = Si-1 + Ai

Ai = Ai-1* Bi

Bi = (x/2)2/i2


Текст программы на языке  
Free Pascal,  TP7:

program BesselI0 ;

var

   x,y: Double;

function BesselI0(x, eps : Double): Double;

var

   I, N: integer;

   T, A, B, R, x2: Double;

begin

 x2 := sqr(x/2) ;

 A := x2 ;

 N := 0 ;

 B := x2 / (N + 2) / (N + 2) ;

 

 repeat

   inc(N);

   A := A * B ;

   B := x2 / (N + 2 ) / (N + 2) ;

   R := A / (1 - B) ;

 until ( B < 1) and ( R < eps ) ;

 T := 1;

 for I := N downto 1 do

   T := 1 + x2 / I / I * T ;

 BesselI0 := T ;

end ;


begin

 x := 3 ;

 y := BesselI0(x, 1e-20) ;

 writeln(y) ;

 readln ;

end.

begin

writeln(‘Введите x’) ;  readln(x) ;

writeln(‘Введите eps’) ;  readln(eps) ;

 if  (eps <= 0) or (eps >= 1)  then  exit ;

   

   writeln(‘f=’, BesselI(x, Eps));

   readln;

end.


Оконное приложение в среде
Lazarus:


Текст кода в среде
Lazarus:

unit Unit1;

{$mode objfpc}{$H+}

interface

uses

 Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;

type

 { TForm1 }

 TForm1 = class(TForm)

   Button1: TButton;

   Edit1: TEdit; Edit2: TEdit; Edit3: TEdit;

   Label1: TLabel; Label2: TLabel; Label3: TLabel;

   procedure Button1Click(Sender: TObject);

 private

   { private declarations }

 public

   { public declarations }

 end;

var

 Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

function BesselI0(x, eps : Double): Double;

var

 . . .

begin

 . . .

end;

procedure TForm1.Button1Click(Sender: TObject);

var

 x, y, eps: double;

begin

 x := StrToFloat(Edit1.Text);

 eps := StrToFloat(Edit2.Text);

 y := BesselI0(x, eps);

 Edit3.Text := FloatToStr(y);

end;

end.

Оконное приложение в среде Visual C++, фрагмент кода:

double BesselI0(double x, double eps)

{

 int i, N;

 double T, A, B, R, x2;

 x2 = (x / 2.0)*(x / 2.0) ;

 A = x2 ;

 N = 0 ;

 B = x2 / ((double)N + 2.0) / ((double)N + 2.0) ;

 

 do

 {

   N++;

   A *= B ;

   B = x2 / ((double)N + 2.0) / ((double)N + 2.0) ;

   R = A / (1 - B) ;

 }

//  while (!( B < 1 &&  R < eps )) ;

 while (B >= 1 || R >= eps);

 T = 1.0;

 for (i = N; i >= 1; i--)

   T = 1.0 + x2 / ((double)i * (double)i) * T;

 return T;

}

private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e)

{

 double x;

 x = System::Convert::ToDouble(textBox1->Text);

 double eps;

 eps = System::Convert::ToDouble(textBox2->Text);

 double y;

 y = BesselI0Aux(x, eps);

 textBox3->Text=System::Convert::ToString(y);

}


Рекурсия

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

Если задача сводится к себе, и еще раз к себе, и так далее, то количество обращений к себе должно быть конечным.

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

Рекурсия используется во множестве стандартных алгоритмов. Далее, в курсе лекций, тема «Рекурсивные алгоритмы» будет возобновляться многократно.


Пример.
  

Применяя сведение задачи к себе  n  раз, можно «дойти» до тривиального случая – до значения  0!, а оно равно 1.

Пример 2.   

Применение такого сведения задачи к себе приводит к «зацикливанию».


Числа Фибоначчи  выражаются «сами через себя» при , но выражаются явно (дают тривиальный случай) при  и :

,  ,  ,  .

,   – Golden Ratio.

Сумма убывающей геометрической прогрессии

, ,

есть функциональный (а именно, степенной, по степеням переменной ) ряд с коэффициентами 1, 1, … .


Полиномы Фибоначчи  являются коэффициентами разложения в степенной ряд функции

,     .

Полиномы Фибоначчи  выражаются «сами через себя» при , но выражаются явно (дают тривиальный случай) при  и :

,    ,    

Связь с числами Фибоначчи:  


Пример
 рекурсивной функции

function  Fib(n: integer; x: double): double;

begin

if  n < 1 then  

Fib := 0

else

if  n = 1 then  

Fib := 1

else

if  n = 2 then  

Fib := x

else

Fib := x*Fib(n-1, x) + Fib(n-2, x);

end;

Пример рекурсивной процедуры.  Ханойские башни.

var

 n: integer;

procedure HanoiTowers(n, x, y, z: integer);

begin

 if n = 1 then

    writeln(x,'->', y)

 else

 begin

     HanoiTowers(n-1, x, z, y);

     writeln(x,’–>’, y);

     HanoiTowers(n-1, z, y, x);

 end;

end;

begin

 readln(n);

 HanoiTowers(n,1,2,3);

end.


Тип «Перечисляемый»

<Перечисляемый тип> : : = 

(<Список имён значений>)

Первому из элементов <Списка имён значений> придаётся внутренний (недоступный пользователю) номер 0, второму – номер 1, и т.д.


Переменные типа «Перечисляемый»

Примеры

var

 v1: (LeftDyrecton, RightDyrecton, BackDyrecton);

type

MyType2=(Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday);

MyType4=(MyTrue, MyFalse);

var

MyVar2: MyType2;

MyVar3: boolean;

MyVar4: MyType4;

begin

for  MyVar2 :=Monday  to  Friday  do  writeln(MyVar2);    // Ошибка

for  MyVar4 :=MyFalse to  MyTrue  do  writeln(MyVar4);  // Ошибка

for MyVar3 := False to True do writeln(MyVar3);            // Выход:  False  True

end.

Замечание.  boolean ≠ (False, True). Вообще говоря.

Замечание.  Тип «Перечисляемый – порядковый тип.


 

А также другие работы, которые могут Вас заинтересовать

74423. СТРОЕНИЕ СТЕБЛЯ ОДНОДОЛЬНЫХ 38.5 KB
  У большинства однодольных система листовых следов определяет основные черты анатомического строения стеблей в гораздо большей мере нежели у голосеменных и двудольных что отчасти объясняется отсутствием вторичного прироста. Из основания каждого листа у однодольных в стебель входит значительное число закрытых проводящих пучков коллатерального строения. Таким образом все сосудистые пучки однодольных представляют собой листовые следы.
74424. Осевой цилиндр корня 39 KB
  В осевом цилиндре корня можно различать сложный радиальный проводящий пучок и паренхиму ткань периферическая часть которой в виде кольца клеток называется перициклом рис. Эти клетки удлиняются в радиальном направлении делятся тангентальными перегородками и образуют корнеродную дугу со слоями клеток функционирующими по тому же типу как в кончике корня. Заложение боковых корешков происходит весьма близко к конусу нарастания образующего их корня выход же их наружу на значительном расстоянии.
74425. Строение типичного зеленого листа 58 KB
  В пластинке листа уже с помощью лупы можно различить 4 группы тканей: 1 покровную кожицу или эпидермис; 2 основную питательную мезофилл1; 3 проводящую сосудистоволокнистые пучки жилки; 4 механическую придающую листу жесткость определяющую положение листа в пространстве. Эпидермис стебля переходит на черешок и пластинку листа. Местами преимущественно на нижней стороне листа в эпидермисе находятся устьица.
74426. Флоэма 39 KB
  При изучении формирования члеников ситовидной трубки можно видеть что сначала членик представляет живую тонкостенную клетку с протоплазмой ядром лейкопластами и центральной вакуолей через полость которой проходят тяжи протоплазмы. Клетка членик ситовидной трубки растет; замыкающие пленки пор при этом растягиваются утоньшаются; в них образуются мелкие перфорации; в остальной части клеточная оболочка значительно утолщается под микроскопом она сильно блестит. Денатурация протоплазмы обнаруживается тем что членики трубки уже не...
74427. Бесполое и половое размножение хвощей 29 KB
  Благодаря этим лентам споры обычно сцепляются в рыхлые комочки разносимые ветром из вскрывшихся спорангиев и заростки развивающиеся из спор бывают скучены группами. Раньше заростки хвощей считали раздельнополыми: одни более мелкие только с антеридиями другие более крупные только с архегониями. Однако в недавнее время у некоторых видов были обнаружены и обоеполые заростки. Возможно что они потенциально обоеполы у многих видов и что кажущаяся их однополость объясняется неодновременностью развития архегониев и антеридиев архегонии...
74428. ЧЕРЕДОВАНИЕ ПОЛОВОГО И БЕСПОЛОГО ПОКОЛЕНИЙ И СМЕНА ЯДЕРНЫХ ФАЗ 37.5 KB
  У большинства же зигота немедленно начинает делиться и образует новое растение или зародыш его; последний у семенных растений временно задерживается в дальнейшем развитии. У большинства оно способно размножаться вегетативно; кроме того у очень многих растений на нем или в нем образуются бесполым путем специальные клетки служащие для размножения носящие нередко различные названия и объединяемые под общим наименованием спор бесполого размножения. Каждый вид растений характеризуется определенным диплоидным и вдвое меньшим гаплоидным числом...
74429. Эпиблема (волосконосный слой) 31 KB
  На расстоянии 0110 мм обычно на расстоянии 123 мм от крайней точки корня клетки эпиблемы начинают образовывать корневые волоски. Корневые волоски многих травянистых растений длиннее чем у большинства древесных пород. При свободном росте при развитии корней в воде или во влажном воздухе волоски имеют форму цилиндра или конуса с закруглением на конце. Корневые волоски играют и механическую роль давая опору верхушке корня пробивающейся при росте между частицами почвы и способствуя заякориванию корневой системы в земле.
74430. Бесполое и половое размножение равноспоровых папоротников 31.5 KB
  Стенка спорангиев однослойная; содержимое их археспорий образует после редукционного деления клеточных ядер многочисленные темные споры служащие для бесполого размножения папоротников. Раскрывание созревших и начинающих подсыхать спорангиев происходит у громадного большинства папоротников при содействии группы клеток его стенок расположенных у многих кольцом и имеющих частичные утолщения...
74431. Бесполое и половое размножение разноспоровых, или водяных, папоротников 31.5 KB
  У некоторых разноспоровых папоротников а также других представителей высших споровых растений селагинелл изоэтеса произошла еще большая редукция мужских и женских заростков а также потеря и женским гаметофитом способности к фотосинтезу. У селагинелл близких к плаунам мега и микроспорофиллы собраны в колоски; мегаспоры прорастают в мегаспорангиях еще на материнском растении; у некоторых видов микроспоры переносятся на мегаспорофиллы и мегаспорангии где происходит оплодотворение начинается развитие зародыша и мегаспорангии отпадает...