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

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


 

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

42539. Понятие социального действия. Социальное взаимодействие 15.4 KB
  Социальное действие - действие человека (независимо от того, носит ли оно внешний или внутренний характер, сводится к невмешательству или к терпеливому принятию), которое по предполагаемому действующим лицом или действующими лицами смыслу соотносится с действием других людей или ориентируется на него
42540. Концепция общества. Общество как система 15.77 KB
  Социальная система - структурный элемент социальной реальности, определенное целостное образование, основными элементами которого являются люди, их связи и взаимодействия.
42541. Принципы типологии общества. Типы общества 16.21 KB
  Традиционное общество — это общество с аграрным укладом, малоподвижными структурами и способом социокультурной регуляции, основанном на традициях (традиционное общество). Поведение индивидов в нем строго контролируется, регламентируется обычаями и нормами традиционного поведения, устоявшимися социальными институтами
42542. Первині засоби пожежегасіння та дослідження якості вогнегасних речовин 37 KB
  В комплексі заходів спрямованих на ліквідацію пожежі що використовуються в системі протипожежного захисту важливе значення має вибір найбільш раціональних способів та засобів припинення горіння згідно зі СниП 2. Існують такі основні способи припинення горіння : Охолодження зони горіння або речовини що горять нижче певних температур. Ізоляція вогнища горіння від повітря. Хімічне гальмування інгібування швидкості реакцій окислення горіння у полумї.
42543. Імітаційна модель CALL-центру 29 KB
  Вихідні дані Кп кількість букв у Вашому прізвищі 5. Кг кількість голосних букв в Вашому прізвищі 2. Кприг кількість приголосних букв в Вашому прізвищі 3. Кількість операторів = Кп = 5 Обробка викликів надання відповіді користувачеві розподіляється за законом Паретто.
42544. КОНТРОЛЬ ПАРТИИ ИЗДЕЛИЙ, ВЫБОР ОРГАНИЗАЦИОННОЙ СТРУКТУРЫ 893.5 KB
  Бригады получают конкретное задание детально знакомятся с постановкой задачи разбивают ее на простейшие выясняют тип распределения контролируемого параметра и определяют его числовые вероятностные характеристики.
42545. Разработать Windows Forms приложение - программу-калькулятор дробей 44 KB
  не имеют общих делителей то дробь называется несократимой; любая дробь может быть представлена к несократимой если её числитель сократить на их наибольший общий делитель Hog наибольшее натуральное число на которое они оба делятся без остатка; две любые дроби b и c b считаются равными если d=bc; две несократимые дроби считаются равными если равны их числители и знаменатели =c и b=d. Умножение: W W'={U U'V V'} W=U d1V d2 и W'=U' d2V' d1 где d1=HogUV' и d2=HogU' V. Деление: W W'={U U' V...
42546. Утилиты ТСР/IP. Методические указания к лабораторной работе 139 KB
  Получение списка серверов имен для домена yndex. C: nslookup type=ns yndex.35 Nonuthorittive nswer: yndex.ru yndex.
42547. Субъекты и объекты права на защиту собственности. Практика Европейского Суда по правам человека в праве собственности 62.35 KB
  С учетом расширения экономических связей между государствами, развитием миграционных процессов, возрастающей ролью привлечения иностранных инвестиций создание единых наднациональных стандартов защиты права собственности как фундаментального права человека и основной экономической категории, становится как никогда актуальным.