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). Вообще говоря.

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


 

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

73668. Група режимів роботи ВПМ 508 KB
  З причини того, що вантажопідйомні машини повязані з підйомом і переміщенням вантажів, вони вимагають особливої уваги при проектуванні і ретельного контролю за виготовленням і експлуатацією
73669. Гнучкі елементи вантажопідйомних машин 259.5 KB
  Неметалеві канати. Металеві дротяні канати Якщо ці елементи є складовою частиною механізму підйому то вони називаються вантажними якщо вони використовуються для переміщення вантажів то вони називаються тяговими якщо вони використовуються для обвязування вантажу що транспортується то їх називають чалочними. Пластинчасті ланцюги застосовуються головним чином в гарячих і хімічних цехах де дротяні канати швидко окислюються і виходять з ладу.
73670. Блоки і поліспасти у ВПМ 259 KB
  Якщо нерухомий блок служить тільки для зміни напряму гнучкого елементу то рухомий блок служить як для виграшу в силі так і швидкості. Гнучкі елементи вживані в ВПМ не є абсолютно гнучкими тілами а володіють певною жорсткістю яка виражається у тому що набігаюча гілка гнучкого елементу не відразу укладається на блоці а збігаюча гілка не відразу випрямляється на що потрібна витрата додаткового зусилля. У реальних умови з урахуванням цих втрат або тут Gгр вага вантажу що розуміється...
73671. Деталі для навівки і звивання гнучких елементів 440.5 KB
  Барабани для багатошарової навівки каната застосовуються у виняткових випадках при вельми великих довжинах навиваного каната коли при одношаровій навівки потрібен надзвичайно великі розміри барабана. У гладких барабанах завжди є бурти. Нижній шар каната при багатошаровій навівки стикається з циліндровою поверхнею барабана по лінії унаслідок чого виникають високі контактні напруги...
73672. Механізми вантажопідйомних машин 338.5 KB
  Залежно від типу вантажопідйомної машини її призначення можуть бути різні комбінації механізмів основним з яких є механізм підйому. Механізми підйому ГПМ Механізми підйому служать для вертикального переміщення вантажів. Залежно від типу приводу розрізняють механізми підйому з ручним і машинним приводом будівельна лебідка мал.
73673. Механізми пересування 351.5 KB
  У вантажопідйомних машинах загального призначення механізми пересування по конструктивній ознаці розрізняють: а механізми пересування з ручним приводом б механізми пересування з машинним приводом електричний і ДВС. По конструкції опорноходової частини механізми пересування підрозділяються: а на рейкові б на без рейкові. За принципом роботи механізми пересування підрозділяються на дві принципові схеми: а механізми у яких переміщення здійснюється за рахунок сил зчеплення приводних ходових коліс з рейкою або грунтом б механізми у...
73674. Вимоги до антен по параметрах електромагнітної сумісності 370 KB
  Вимоги до антен по параметрах електромагнітної сумісності Розвиток супутникових систем звязку супроводжується зростаючим завантаженням діапазонів радіочастот. Передумови для рішення проблеми ЭМС створюють відомі просторова й частотна вибірковості антен. При аналізі діаграми спрямованості апертурних антен широко застосовуваних у супутниковому...
73675. Розрахунок механізму пересування з тяговим елементом 242 KB
  Ходові колеса кранів і рейки У вантажопідйомних машинах загального призначення залежно від типу машини призначення а також величини навантаження і швидкості пересування ходові колеса виготовляються сталевими і чавунними з циліндровим і конічним ободом. Як рейки у вантажопідйомних машинах застосовується квадратна або смугова сталь а також залізничні рейки