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

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


 

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

23102. Принципова схема лазера. Властивості лазерного випромінювання. Типи лазерів та їх застосування 51.5 KB
  При падінні хвилі з власною частотою переходу системи: змінюються заселеності рівнів N1 i N2 кількість атомів в одиниці об’єму що знаходяться на 1 та на 2 енергетичних рівнях відповідно. dN12=BN1dt ; кількість частинок що перейшли з 1 рівня на 2 dN21= AN2dt BN2dt кількість частинок що перейшли з 2 рівня на 1 де Акоеф. Крім того в стаціонарному режимі при умові термодинамічної рівноваги виконуються рівняння: N1N2=N=const кількість частинок в системі є сталою. В дворівневій системі не можна забезпечити умову N2 N1 бо навіть в...
23103. Рівняння Шредингера. Інтерпретація хвильової функції 49 KB
  Рівняння Шредингера. Для цього необхідне рівняння: 1. Рівняння повинно бути лінійним і однорідним хвиля задовольняє принц. Це рівняння Шредингера.
23104. Співвідношення невизначеності Гейзенберга, приклади його проявів 74.5 KB
  Нехай стан частинки опивується хв. Остаточно Співвідношення невизначеностей проявляється при будьякій спробі вимірювання точного положення або точного імпульса частинки. Виявляється що уточнення положення частинки впливає на те що збільшується неточність в значенні імпульса і навпаки. Часто втрачає зміст ділення повної енегрії частинкияк квантового об’єкту на потенціальну і кінетичну .
23105. Сестринский процесс при холециститах 25.25 MB
  Воспаление желчного пузыря регистрируется почти у 10% населения планеты, причем в 3-4 раза чаще холециститом страдают женщины. Большинство людей не следят за своим рационом, ведут сидячий образ жизни.
23106. Теорія молекули водню. Обмінна взаємодія 371 KB
  Оскільки гамільтоніан не залежить від спінових змінних то хвильова функція зображається добутком спінової функції на просторову . За допомогою хвильової функції знаходимо середнє значення повного гамільтоніана системи: де кулонівський інтеграл К характаризує ел. наближені хвильові функції Кулонівський інтеґрал К є малим числом і головну роль відіграє обмінний інтеґрал який у ділянці малих є додатною величиною а при змінює знак. Таким чином для симетричної просторової функції є можливим зв'язаний стан системи і теорія...
23107. Прискорювачі заряджених частинок та принципи їх роботи 62.5 KB
  При непрямих методах прискорення електричне поле індукується змінним магнітним полем або використовується змінне електричне поле у вигляді біжучих або стоячих хвиль. Ідея прискорення заряджених частинок електричним полем яке породжується змінним магнітним полем. Основна складова – потужний електромагніт обмотка якого живиться змінним струмом з частотою сотні МГц. При зміні маг потока з’являється вихрове ел поле і на кожний електрон в камері діє сила eE.
23108. Общая характеристика экономики государственного сектора 262 KB
  Под государственным сектором экономики страны понимают сектор, представляющий и обслуживающий интересы всего населения. Государство является основным институтом, организующим и координирующим взаимоотношения граждан и социальных групп в стране и обеспечивающим условия для их совместной деятельности
23109. Сучасні уявлення про ядерні сили. Моделі атомного ядра 136.5 KB
  За сучасними поглядами сили між нуклонами є виявом сильної кваркглюонної взаємодії. Така частинканосій сильної міжкваркової взаємодії називається глюоном. При взаємодії глюонів з кварками колір кварків змінюється. Аромат кварків їхній електричний та баріонний заряди не змінюються тобто колір є найбільш важливою властивістю кварків при взаємодії.
23110. Теорія молекули водню. Обмінна взаємодія 59.5 KB
  Теорія молекули водню. Відносне розміщення цих центрів атомних ядер визначає просторрову конфігурацію молекули при цьому стійкому рівноважному стану відповідає мінімум енергії молекули. Відносний рух ядер коливання ядер і обертання молекули як цілої – це окремі задачі. Таким чином для Н2 хвильове рівняння можна записати у вигляді: де V – потенціальна енергія молекули V=V1V2 – енергія першого ел.