АЛГОРИТМЫ

Новости

Рассылка новостей

Форум

AlgoPascal

Редактор блок-схем

Статьи

О сайте

Контакты



Содержание - Интегральные уравнения - Линейное уравнение Вольтерра первого рода

Линейное уравнение Вольтерра первого рода

Линейное интегральное уравнение Вольтерра первого рода имеет вид:

Если k(a, a) не равно 0, f(a) = 0 и если функции f(x), k(x, s) имеют производные f'(x), k'(x, s), непрерывные в интервале (a, b), заключенном в интервале интегрирования, внутри которого k(x, s) не обращается в нуль, то уравнение Вольтерра первого рода допускает в интервале (a, b) непрерывное и единственное решение.

Представленная процедура решает уравнение методом квадратурных формул. Вычисление интеграла производится по формуле трапеций с постоянным шагом h:

где

  • i = 2, 3, ...
  • x = a+(i-1)h
  • A = 1 при j > 1 и A = 0.5 при j = 1

Если нашли ошибку в алгоритме - сообщите!



Реализации алгоритма на различных языках:

Реализация алгоритма на C++
Реализация алгоритма на Delphi
Реализация алгоритма на Visual Basic 6

Блоксхемы:

Посмотреть блок-схему алгоритма
Скачать блок-схему алгоритма


Реализация алгоритма на AlgoPascal:

unit Volterra1Unit;

declaration
    function F(X : Real):Real;
    function K(X : Real; S : Real):Real;

interface SolveVolterra1;

implementation


(******************************************************************
Процедура  решает  интегральное  уравнение  Вольтерра первого рода,
заданное   ядром   интегрирования   K(X,S) и правой частью F(X), на
отрезке [A, B].

Результат помещается в массив Y с номерами элементов от 1 до N, где
1 соответствует A, N соответсвует B.
******************************************************************)
procedure SolveVolterra1(
    const A : Real;
    const B : Real;
    const N : Integer;
    out   Y : array of Real);
var
    G   :   Real;
    H   :   Real;
    K1  :   Real;
    X   :   Real;
    
    I   :   Integer;
    J   :   Integer;
    
begin
    SetBounds(y, [1, N]);
    
    h := (b-a)/(n-1);
    k1 := K(a,a);
    y[1] := (-3*F(a)+4*F(a+h)-F(a+2*h))/(2*h*k1);
    for i:=2 to n do
    begin
        x := a+(i-1)*h;
        g := F(x)/h;
        for j:=1 to i-1 do
        begin
            k1 := K(x,a+(j-1)*h);
            if j=1 then
            begin
                k1 := k1/2;
            end;
            g := g-k1*y[j];
        end;
        y[i] := 2*g/K(x,x);
    end;
end;


end.

 


Бочканов Сергей, Быстрицкий Владимир
Copyright © 1999-2004
При поддержке проекта MANUAL.RU