К.т.н. Заика И.В., д.т.н., Ромм Я.Е.

Таганрогский государственный педагогический институт им. А.П. Чехова, Россия

Схема автоматической идентификация решений систем уравнений на основе сортировки

 

Для идентификации нулей линейных и нелинейных алгебраических систем уравнений, а так же трансцендентных систем уравнений применяется схема сортировки с взаимно однозначным соответствием входных и выходных индексов сортируемых элементов. К программе сортировки [1] подсоединяется условный оператор, локализующий все минимумы среди элементов входной последовательности. Фиксируется любое  меньшее половины минимального расстояния между минимумами. Условие локализации всех минимальных в -окрестности значений дискретизированной функции одной переменной на равномерной сетке с шагом примет вид [1]: . Здесь  – элемент массива входных индексов, располагаемого в порядке отсортированных по неубыванию значений функции, образующих одномерный массив. Условие означает, что в -окрестности узла с индексом  нет индекса входного элемента, который бы превосходил элемент с индексом . Максимумы локализуются аналогично [1]. Нули функции идентифицируются как достаточно малые минимумы модулей значений на равномерной сетке. С использованием плоской равномерной прямоугольной сетки схема распространяется на идентификацию экстремумов и нулей функций двух переменных [2]. Дискретизированные значения функции интерпретируются как двумерные массивы. Данная схема следующим образом применяется к безусловной численной локализации нулей систем однородных уравнений. Пусть исходная система нелинейных уравнений преобразована к виду однородной системы

                                                                                (1)

с действительными левыми частями (как последует из построения, метод распространяется на случай комплексной левой части). Совокупность аргументов  можно рассматривать как n-мерный вектор с действительными компонентами. Аналогично совокупность функций представляет собой также n-мерный вектор с действительными компонентами. Пусть требуется найти все решения системы (1) в многомерном параллелепипеде, входящем в область ее определения. Строится равномерная сетка, в узлах которой значения канонической нормы вектор-функции из левой части (1) (для определенности норма – сумма модулей компонент) принимаются за элементы массива:

                     ,     .                   (2)

На вход алгоритма идентификации минимумов функции n переменных подается массив (2), после чего идентифицируются все нули системы (1) как минимумы нормы левой части. При этом первоначально идентифицируются все минимумы, затем среди них выбираются те, которые близки к нулю с априори заданной точностью : .

Пример. Приближенное решение системы  

в параллелепипеде , ,  вычисляется по программе (Delphi):

Program UravnNelin;

{$APPTYPE CONSOLE}

Uses   SysUtils;

label 21,22,23;

const eps0=0.1; h=eps0/23; x00=0.1; x11=1; y00=0; y11=1; z00=0; z11=1;

 n00=trunc(4/h); nn=n00+round(n00/2)+1;

type vect1=array [1..2*nn+nn] of  extended;

vect2=array [1..2*nn+nn] of  longint;

var  i,j,k,k1,r,rx,ry,rz,nn0,kx,ky,kz : longint;

c,a1,az: vect1; e, ex, ey,ez: vect2; x,x0,x1,xk,minx,minz: extended;

y,y0,y1,yk,z0,z1,z,zk: extended;

function f1 (x,y,z:extended):extended;

begin   f1:= x*x+y*y-z ; end;

function f2 (x,y,z:extended):extended;

begin f2:= x*x+y*y-z*z; end;

function f3 (x,y,z:extended):extended;

begin f3:= ln(x)-sqrt(y)+0.8; end;

function func (x,y,z:extended):extended;

var p: extended; i1: integer;

begin func:= abs(f1(x,y,z))+abs(f2(x,y,z))+abs(f3(x,y,z)); end;

procedure minyz (var x,y,z,minx:extended);

begin minx:=func(x,y,z);

for i:=1 to trunc((y11-y00)/h) do

for j:=1 to trunc((z11-z00)/h) do

begin y:=y0+i*h; z:=z0+j*h;

IF minx > func(x,y,z) then minx:=func(x,y,z) end end;

procedure minyy (var x,y,z,minz:extended);

begin minz:=func(x,y,z); for i:=1 to trunc((y11-y00)/h) do

begin y:=y0+i*h; IF minz > func(x,y,z) then minz:=func(x,y,z) end end;

{Описание процедуры сортировки sort}

procedure sort(var nn0:longint; var с: vect1; var e: vect2);

var  i,j,k: longint;   

begin

for j:=1 to nn0 do  begin k:= 0;

for i:=1 to j  do if с[j]>=с[i]  then k:=k+1;

for i:=j+1 to nn0 do if с[j]>с[i]  then k:=k+1;

 e[k]:=j;   

end;  end;

BEGIN  x0:=x00; x1:=x11; y0:=y00; y1:=y11;z0:=z00; z1:=z11; nn0:=n00;

for rx:=1 to nn0 do begin x:=x0+rx*h; minyz (x,y,z,minx); a1[rx]:=minx; end;

sort( nn0, a1, ex); kx:=1; while kx<= nn0 do begin

for rx := 1 to kx-1 do IF abs( ex[kx]-ex[kx-rx] ) <= eps0/h then goto 21;

xk:= x0+ex[kx]*h; for rz:=1 to nn0 do begin

z:=z0+rz*h; x:=xk; minyy (x,y,z,minz); az[rz]:=minz; end;

sort( nn0, az, ez); kz:=1; while kz<= nn0 do begin

for rz := 1 to kz-1 do IF abs(ez[kz]-ez[kz-rz]) <=eps0/h then goto 22;

zk:= z0+ez[kz]*h;

for ry:=1 to nn0 do begin y:=y0+ry*h; a1[ry]:=func(xk,y,zk) end;

sort( nn0, a1, ey); ky:=1; while ky<= nn0 do begin

for ry := 1 to ky-1 do IF abs(ey[ky]-ey[ky-ry]) <=eps0/h then goto 23;

yk:= y0+ey[ky]*h; writeln ('    ', xk:30:4,'   '); writeln ('    ', yk:30:4,'    ');

writeln ('    ', zk:30:4,'    ', f1(xk,yk,zk):2:4,'  ',f2(xk,yk,zk):2:4,'  ',f3(xk,yk,zk):2:4);

 writeln;

23: ky:=ky+1; end;

22: kz:=kz+1; end;

21: kx:=kx+1; end; writeln('end'); readln; end.

Для данного примера получатся значения:

Значения аргументов

Значения компонент 

 

X

y

z

0.8870

0.4609

1.0000

f1= -0.0009

f2= -0.0009

f3= 0.0012

Для нелинейных систем с неединственным решением схема позволяет программно локализовать все минимумы нормы (2) и среди них наиболее близкие к нулю, их локализация в окрестности наперед заданного радиуса означает приближение к решению по норме с точностью до значения радиуса. Например, для системы

                                              

которая имеет три решения, предложенная схема дает семь значений минимумов нормы, из них три наименьшие, достаточно близкие к нулю (выделены подчеркиванием), приближают искомые решения:

 Значения аргументов

Значения компонент

f1

f2

x

y

1.94007

 

3.67910

-0.0000000000

 0.0890364151

2.07596

 

3.77313

-0.0000000000

 0.0006942907

2.49393

 

4.01045

-0.0000000000

-0.2011612746

3.67927

 

1.94030

0.0000000000

 -0.0888810927

3.77324

 

2.07612

0.0000000000

-0.0005957791

4.01049

 

2.49403

0.0000000000 

 0.2011954085

4.00000

 

4.00000

-0.0000000000 

 0.0000000000

Схема без изменения применима для приближенных решений систем линейных и нелинейных алгебраических, а также трансцендентных уравнений [2], по способу компьютеризации отличаясь от аналогов [4, 5]. На вход метода поступают значения функции, которые с учетом общности ограничений могут вырабатываться в результате решения некоторой другой задачи в реальном времени. Существенным ограничением при этом является требование достаточной малости шага дискретизации. Отличительным качеством, как и в двумерном случае, остается отсутствие начальных приближений, а также области локализации экстремумов, используемых в математических методах [5,6]. Численный эксперимент показывает применимость схемы в случае вектор-функций из левой части (1) со сложным рельефом [2], включая разрывы первого рода.

 

Литература:

1.     Ромм Я.Е. Локализация и устойчивое вычисление нулей многочлена на основе сортировки. I // Кибернетика и системный анализ. – 2007. – № 1. – С. 165 – 182.

2.     Заика И.В. Разработка и исследование схем оптимизации на основе алгоритмов сортировки с приложением к идентификации экстремумов решений дифференциальных уравнений. – Таганрог: ТРТУ, 2007, автореферат диссертации на соискание ученой степени канд. техн. наук.

3.                 Ромм Я.Е. Параллельная сортировка слиянием по матрицам сравнений. II // Кибернетика и системный анализ. – 1995. – № 4. – С. 13 – 37.

4.                 Березин И.С., Жидков Н.П. Методы вычислений. Т.2. – М.: Физматгиз, 1962. – 640 с.

5.                 Демидович Б.П., Марон И.А. Основы вычислительной математики. – М.: Физматгиз, 1963. – 660 с.

6.     Васильев Ф.П. Численные методы решения экстремальных задач. – М.: Наука, 1988. – 552с.