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

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


 

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

26581. КИСЛОМОЛОЧНЫЕ ПРОДУКТЫ, ИХ ПИЩЕВОЕ, ДИЕТИЧЕСКОЕ И ЛЕЧЕБНОЕ ЗНАЧЕНИЕ 6.01 KB
  Усвояемость кисломолочных продуктов выше усвояемости молока т. Регулярное употребление в пищу кисломолочных продуктов способствует и укреплению нервной системы изза накопления в них крайне необходимых человеку витаминов синтезируемых молочнокислыми бактериями. Установлено что содержание витаминов в кисломолочных продуктах возрастает в результате и спиртового брожения. молочнокислые бактерии содержащиеся в кисломолочных продуктах способны приживаться в кишечнике человека и благотворно влиять на весь организм.
26582. КЛАССИФИКАЦИЯ ПИЩЕВЫХ ЗАБОЛЕВАНИЙ 5.7 KB
  Само название пищевые заболевания пищевые токсикоинфекции пищевые токсикозы указывают что основную роль в их возникновении играют 'пищевые продукты. В зависимости от них все пищевые заболевания людей делят на две большие группы. ПИЩЕВЫЕ ЗАБОЛЕВАНИЯ НЕ БАКТЕРИАЛЬНОЙ ПРИРОДЫ типичные пищевые отравления. Пищевые заболевания не бактериальной природы с недостаточно изученной этиологией.
26583. КОНСЕРВИРОВАНИЕ КОЖЕВЕННОГО СЫРЬЯ 5.55 KB
  Шкуры консервируют посолом врасстил тузлукованием сухосоленым пресносухим и кислотносолевым способами. Шкуры укладывают на стеллажи мездрой вверх посыпая слоем соли до 1 см высотой штабеля 15 2 м. Каждый штабель комплектуют не более 3 суток с момента посола первой шкуры. Тузлукованием консервируют шкуры крупного рогатого скота конские верблюжьи и свиные.
26584. КОНСЕРВИРОВАНИЕ МЯСА ВЫСОКОЙ ТЕМПЕРАТУРОЙ. ВЕТСАНЭКСПЕРТИЗА И ГИГИЕНА ПРИГОТОВЛЕНИЯ БАНОЧНЫХ КОНСЕРВОВ. КОНСЕРВИРОВАНИЕ МЯСА И МЯСНЫХ ПРОДУКТОВ ВЫСОКОЙ ТЕМПЕРАТУРОЙ 16.98 KB
  Технология приготовления консервов сводится к тому что подготовленное мясо или другие продукты закладывают в жестяные или стеклянные герметически закрывающиеся банки которые подвергают стерилизации при температуре выше 100С. Консервный цех или завод имеет два основных отделения: 1 жестянобаночное где изготавливают банки и 2 технологическое в котором проводят все технологические операции при изготовлении консервов. Это необходимо при стерилизации банок когда под действием высокой температуры происходит расширение металла и содержимого...
26585. КОНСЕРВИРОВАНИЕ МЯСА ХОЛОДОМ. ИЗМЕНЕНИЕ В МЫШЕЧНОЙ ТКАНИ ПРИ ЗАМОРАЖИВАНИИ 14.63 KB
  Мясо по термическому состоянию согласно стандартам подразделяют на остывшее охлажденное подмороженное замороженное и оттаявшее. К остывшему относят мясо которое после разделки туши на глубине 8 см имеет температуру не выше 12 С. Остывшее мясо используют на предприятии где его получили вывоз для реализации ограничен исключение представляют продовольственные рынки. К охлажденному относят мясо температура в толще мышц которого не выше 4 С.
26586. ЛАБОРАТОРНЫЕ МЕТОДЫ РАСПОЗНОВАНИЯ МЯСА РАЗНЫХ ВИДОВ ЖИВОТНЫХ 5.55 KB
  ЛАБОРАТОРНЫЕ МЕТОДЫ РАСПОЗНОВАНИЯ МЯСА РАЗНЫХ ВИДОВ ЖИВОТНЫХ.По анатомоморфологическим особенностям туш скелета и внутренних органов убитых животных. Однако у одного и того же вида животных температура плавления жира колеблется в зависимости от пола типа кормления. СУЩНОСТЬ РЕАКЦИИ НА ГЛИКОГЕН ПО НИБЕЛЮ состоит в том что в мясе разных видов животных содержится неодинаковое количество гликогена: в парном мясе лошади более 2 в созревшем около 1 в мясе собаки 23.
26587. МЕРОПРИЯТИЯ ПРИ ОБНАРУЖЕНИИ СИБИРСКОЙ ЯЗВЫ НА СКОТОБАЗЕ МЯСОКОМБИНАТА 2.26 KB
  При обнаружении сиб.язвы после поголовного тщательного осмотра и поголовной термометрии в карантинном отделении неблагополучную партию делят на 2 группы: 1)больных и подозрительных по заболеванию и 2)подозреваемых в заражении
26588. МЕТОДЫ ВЫЯВЛЕНИЯ МЯСА БОЛЬНЫХ ЖИВОТНЫХ 18.96 KB
  МЕТОДЫ ВЫЯВЛЕНИЯ МЯСА БОЛЬНЫХ ЖИВОТНЫХ. У животных убитых в нормальном физиологическом состоянии место зареза неровное и интенсивнее пропитано кровью чем мясо в других местах туш; у животных убитых в агональном состоянии или разделанных после падежа место зареза ровное и пропитано кровью в такой же степени как и остальные мышцы. Удовлетворительное обескровливание наблюдают у старых переутомленных а иногда и больных животных. Плохо обескровлены как правило туши больных животных.
26589. МЕТОДЫ ИССЛЕДОВАНИЯ МОЛОКА ПРИ МАСТИТАХ КОРОВ 4.51 KB
  МЕТОДЫ ИССЛЕДОВАНИЯ МОЛОКА ПРИ МАСТИТАХ КОРОВ. из каждого соска вымени в середине или в конце доения на участки бумаги пропитанныe индикатором наносится капля молока. В луночку молочноконтрольной пластинки к 1 мл сборного молока приливают 1 мл 25 раствора мастоприма. Смесь молока с мастопопримом перемешивают стеклянной палочкой в течение 1020 секунд Результаты реакции оцениваются по консистенции смеси молока с местопримом.