
книги из ГПНТБ / Смолов, В. Б. Аналого-цифровые и цифро-аналоговые нелинейные вычислительные устройства
.pdfфункции в виде процедуры, включаемой в программу на этапе трансляции, так и при задании функции в виде массива на перфоленте или магнитной ленте. Необходимость преобразования и смещения функции определяется управляющими переменными, значения'.которых задаются проектировщиком.
Монотонные функции, не имеющие точек перегиба, программа разделяет на четыре типа в зависимости от сочетаний знаков первой и второй производ ных. Она относит к первому типу функции с положительной первой и отри цательной второй производными, ко второму типу — функции с положитель ной первой и положительной второй производными, к третьему типу — функции с отрицательной первой и положительной второй производными, а к четвертому типу—функции, первая и вторая производные которых от рицательны. Номер типа заданной функции программа записывает в двенад цатую строку массива sol.
Программа построения аппроксимирующей зависимости при разбиении отрезка задания аргумента функции на равные участки, длина которых,
кратна степени числа два. Режим работы программы определяется перемен ной о. Если о = 0, то в исходных данных для программы задается число участков аппроксимации махе и она находит коэффициенты аппроксими рующей зависимости и относительную погрешность eps. Если же о — 1, то
программа определяет необходимое число участков, на которое разбивается аргумент для получения относительной погрешности eps, и коэффициенты
искомой зависимости. Вид аппроксимирующей зависимости определяется соответствующей стандартной процедурой, включаемой в программу на этапе трансляции. В случае КЛА в программу включается стандартная процедура Ip 1, а при ККА используется стандартная процедура 1р2.
При задании погрешности аппроксимации eps в массиве ар могут быть незаполненные строки. В этом случае из массива ар с помощью стандартной процедуры 1рЪ формируется массив ргар, число строк которого определяется
количеством участков аппроксимации, а количество и назначение столбцов совпадает с числом и назначением столбцов массива ар. Массив ргар запи
сывается на системную магнитную ленту и печатается.
В программе используются следующие обозначения переменных: q оп ределяет вид аппроксимирующей зависимости, Id. — число точек на участке аппроксимации, stn — число участков аппроксимации, nw — текущий но мер строки массива ар.
begin real хп, xk, hx, eps, tnaxe, fmax;
integer n, tiacii, kon, Id, nw, maxs, sm, q, v;
array sv [1 : 14]; |
|
|
|
|||||
read (eps, maxs, q, v); |
|
|
|
|||||
read tape |
(svl, |
sv); |
|
|
n : — sv [2]; |
|||
xn : = |
sv |
[3]; |
xk : = sv |
[4]; |
||||
fmax : = |
sv |
[7]; |
hx : = |
(xk — xn)l(n—1); |
||||
if v = |
1 |
then |
maxs : = |
n ч- |
(q + 1); |
|||
begin |
array |
f [0 : n—1], |
ар [1 : maxs, 1 : q}+ 6]; |
|||||
procedure |
Ip 1; |
|
|
|
||||
procedure |
Ip |
3; |
|
|
|
|||
read tape |
(ft, |
f); |
|
|
|
|||
mo: if v = |
0 then |
1; nach : = 0; Id: = n-~maxs; |
||||||
begin nw : = |
||||||||
for |
kon : = |
nach -f Id — 1 |
while nw <; maxs do |
|||||
begin Ip1 (nach, kon, nw); nw : = nw -+- 1; |
||||||||
|
nach : — kon + 1 |
|
|
|
||||
end; |
|
|
|
|
to |
mb |
|
|
nw : — nw — 1; go |
|
|||||||
‘ end; |
|
|
|
|
|
|
|
|
240
ml :ld : — n; sm : — 1;
m2 \maxe : = 0; nach : = 0; nw : = |
1; |
|||
m3 :kon : — nach + |
Id — 1; /pi (rnzc/i, kon, nw); |
|||
if ap [nw, q + |
6] >maxe then |
maxe : — ap [nw, q -f 61; |
||
if no>>sm then go to m4; |
|
|||
nw : = nw + 1; |
nach : — kon -j- 1; go to m3; |
|||
m4 :if maxe <feps then go to m5; |
||||
sm : = sm X 2; Id : = ld~r-2; go to m2; |
||||
m5 :begin array |
prap [1 : nw, 1 |
: q + 6]; |
||
Ip 3 (ap, |
prap); |
|
||
(prap); |
|
|||
write |
tape |
(prap, prapl); |
|
|
sv [14] : = |
nw; |
|
||
write |
tape |
(sv, svl) |
|
|
end |
|
|
|
|
end |
|
|
|
|
end |
|
|
|
|
Программа построения аппроксимирующей зависимости при разбиении отрезка задания аргумента на участки, длина которых кратна степени числа два. Настоящая программа отличается от предыдущей тем, что при построе нии аппроксимирующей зависимости по заданной погрешности eps она де
лит заданный отрезок на участки различной длины, но пропорциональные степени числа два. Поиск необходимого числа участков осуществляется пу тем последовательного деления пополам тех участков, на которых погреш ность аппроксимации превышает eps. Каждый шаг процесса поиска состоит
из анализа погрешности на каждом участке аппроксимации, полученном на предыдущем шаге, и формирования участков аппроксимации текущего шага. При этом массив ар разбивается на две части. В одной части массива распо
лагаются границы участков и параметры аппроксимирующей зависимости, полученной на предыдущем шаге поиска, а во второй части запйсываются ре зультаты аппроксимации, полученные при выполнении текущего шага. Часть массива, используемая для записи результатов аппроксимации в текущем шаге, определяется переменной р, значение которой изменяется при пере
ходе к. следующему шагу.
В этой программе используются в основном те же обозначения, что и в предыдущей программе. Переменная so определяет число участков аппрок
симации, полученное на предыдущем^шаге.
begin real хп, xk, hx, eps, fmax; |
nr, q, |
so, sn, ns, |
p, |
|
|||||||
integer n, |
nach, |
kon, |
Id, |
nw, |
|
||||||
k, maxs; |
|
|
|
|
|
|
|
|
|
|
|
array |
sv |
[1 : 141; |
|
|
|
|
|
|
|
||
read (eps, |
q); |
|
sv); |
|
|
|
|
|
|
|
|
read |
tape |
(svl, |
sv |
[3]; |
xk : = sv [4]; |
fmax |
: = sv [7 ]; |
||||
n : = |
sv |
[2]; |
xn : = |
||||||||
hx : = (xk—xn)l(n—1); maxs : = n |
(q + |
1); |
: q + |
|
|||||||
begin |
array / |
[0 : n— 1 ], |
ap |
[1 : 2 |
X maxs, |
1 |
6]; |
||||
procedure |
Ip |
1; |
|
|
|
|
|
|
|
||
procedure |
Ip |
3; |
|
|
|
|
|
|
|
||
read tape |
(fl, f); |
|
: = |
0; /pi |
(0, n—1, 1); |
|
|||||
Id : = |
n; |
sn : = 1; p |
|
||||||||
mo : Id : =; |
ld-~2; so : = |
sn; sn : = |
1; |
|
|
|
241
if |
jo = |
0 |
then |
nw : = |
maxs + |
1 |
end |
else |
|
|||||
begin |
nr : = |
1; |
|
|||||||||||
begin |
nr : = |
maxs + |
1; |
nw : = |
n end; |
|
|
|||||||
ml : if ap [nr, q -f 6] |
eps then |
q -f 6 do |
|
|||||||||||
begin for |
k : = |
1 step 1 |
until |
|
||||||||||
|
ap [nw, k) : = ap [nr, k\; |
go to m2 |
|
|||||||||||
end; |
|
ap |
[nr, 1 ]; |
kon : = |
nach + |
Id — 1; |
|
|||||||
nach : = |
sn + 1; |
|||||||||||||
lp\ {nach, kon, |
nw)\ |
nw : = nw + |
1; |
sn : = |
||||||||||
nach : = |
kon + |
1; kon\ — nach + |
Id — 1; |
|
||||||||||
Ipl {nach, kon, nw); |
|
nr + |
|
|
sn : = sn + |
|
||||||||
m2 : nw : — nw -j- 1; nr : = |
1; |
|
1; |
|||||||||||
m3 : ns : — if p = |
0 then |
nr else nr — maxs; |
|
|||||||||||
mi : if |
ns |
|
so then go to ml; |
p : = |
|
|
|
|
||||||
if |
p = 0 |
then p : = |
1 else |
0; • |
|
|
||||||||
m5 : if |
sn> so then |
go to |
mO; |
|
|
|
|
|
|
|
||||
sn : = |
sn — 1; |
|
|
|
: q + |
|
|
|
|
|||||
m6 : begin array prap [1 : sn, 1 |
6]; |
|
|
|||||||||||
|
lp3 |
{ap, prap); |
|
|
|
|
|
|
|
|
|
|||
|
{prap); |
|
|
|
|
|
|
|
|
|
|
|||
|
write tape {prap, prapl); . |
|
|
|
|
|
|
|||||||
|
sv [14] : = sn; |
|
|
|
|
|
|
|
|
|
||||
|
write |
tape |
{sv, svl) |
|
|
|
|
|
|
|
|
end
end
end
Программа построения аппроксимирующей зависимости с наименьшим числом участков. Программа предназначена для .нахождения наименьшего числа участков аппроксимации путем последовательного определения участ ков наибольшей длины, обеспечивающих приближение функции с заданной относительной погрешностью eps.
Разбиение аргумента функции на участки производится последовательно, причем на каждом шаге этой последовательности с помощью метода поиска делением пополам определяются границы одного участка аппроксимации. Направление разбиения аргумента задается системой переменной р. Если
крутизна функции имеет большее значение в окрестности начальной точки области задания аргумента (р = 0), то разбиение аргумента, выполняет, на чиная с точки, соответствующей значению хп. В противном случае (р = 1)
разбиение аргумента функции осуществляется от точки, соответствующей
значению xk. Образование новых участков |
аппроксимации продолжается |
до тех пор, пока искомая граница участка не |
совпадет с концом области за |
дания аргумента xk (р = 0) или началом хп, |
если р = 1. |
При отыскании границ участков аппроксимации могут получиться участки, для которых построение аппроксимирующей зависимости выпол нить невозможно. Такими участками являются участки, задаваемые одной точкой в случае КЛА и одной или двумя точками в случае ККА. Если они обнаруживаются, то длина последнего участка увеличивается на длину участка, для которого нельзя построить аппроксимирующую зависимость, и снова производится аппроксимация функции на последнем участке.
begin real хп, xk, hx, eps, fthax;
integer n, nach, kon, l, r, nw, m, p, q;
242
array |
sv |
[1 : 14]; |
|
|
|
|
|
|
|
|
|
|
||||
read |
(eps, |
q); |
|
|
|
|
|
|
|
|
|
|
|
|
||
read tape (svl, sv); |
|
|
[4]; n : = sv |
|
fmax : = |
sv [73; |
||||||||||
xn: = |
sv |
[3]; xk : — sv |
[2]; |
|||||||||||||
p : = |
sv |
[13]; |
[0 : n — 1 ], |
ap |
[1 : n ~ q , |
|
|
|
||||||||
begin |
array |
f |
<7 + |
6]; |
|
|||||||||||
procedure |
Ip |
1; |
|
|
|
|
|
|
|
|
|
|
||||
procedure |
Ip |
3; |
|
|
|
|
|
|
|
|
|
|
||||
read tape |
(ft, |
/); |
|
|
nw : = 1; |
|
|
|
|
|
||||||
hx : = |
(xk—xn)l(n— 1); |
|
|
|
|
|
||||||||||
if p = 1 |
then |
go to m5; |
|
|
|
|
|
|
|
|||||||
mO : nach : = 0; |
|
l : = |
nach; |
r : — kon; |
go to m3; |
|
|
|||||||||
ml : kon : = |
|
n— 1; |
|
|
||||||||||||
m2 : kon : = |
|
(/-+- r)-r-2; |
|
|
|
|
|
|
|
|
|
|||||
m3 : tpi (nach, kon, nw)', |
|
|
then l : = |
kon |
|
r : = |
kon\ |
|||||||||
if |
ap |
[nw, |
q + |
6 ]< ep s |
else |
|||||||||||
if r—l |
> |
1 |
then |
go |
to m2; |
|
|
|
|
|
|
|||||
kon : = |
/; |
|
then |
go |
to |
mlO; |
|
|
|
|
|
|||||
if |
kon = |
|
и—1 |
|
|
|
|
|
||||||||
nach : = |
|
kon |
|
1; |
then |
|
|
|
|
|
|
|
||||
m4 : if п — nach < |
q— 1 |
|
nw)\ |
|
|
|
|
|
||||||||
begin Ip1 |
(ap |
[nw, |
1], |
ft— 1; |
go |
to |
mlO end; |
|
||||||||
nw : = |
nw + |
1; go to ml; |
|
|
|
|
|
|
|
|||||||
m5 : kon : = |
|
n— 1; |
|
|
|
r : = |
kon\ |
|
|
|
|
|
||||
m6 : nach : = 0; l : = nach\ |
go |
to |
m8; |
|
|
|||||||||||
ml : nach : — (l |
|
p)--.~2; |
|
|
|
|
|
|
|
|
|
|||||
m8 : Ip1 (nach, kon, nw); |
|
|
|
r : = |
nach else |
|
nach; |
|||||||||
if ap [nw, q -|- |
S le ep s then |
/ : — |
||||||||||||||
if |
r—/ > 1 |
|
then |
go |
to |
ml; |
|
|
|
|
|
|
||||
nach : = |
r; |
|
|
|
|
|
|
|
|
|
|
|
|
|||
if |
nach = |
0 |
then go |
to |
mlO; |
|
|
|
|
|
|
|||||
kon : — nach — 1; |
|
|
|
|
|
|
|
|
|
|||||||
m9 : if |
kon < 9 |
— 1 |
then |
|
|
nw); go to mlO end; |
|
|
||||||||
begin Ip1 (0, ap |
[nw, 3], |
|
|
|||||||||||||
nw ; = |
nw + |
1; go to m6; |
|
|
|
|
|
|
|
|||||||
mlO ; begin |
array prap [1 : nw, 1 |
: <7 + |
6]; |
|
|
|
||||||||||
|
lp3 |
(ap, |
prap); |
|
|
|
|
|
|
|
|
|
||||
|
(prap); |
|
prapl); |
|
|
|
|
|
|
|||||||
|
write |
tape |
(prap, |
|
|
|
|
|
|
|||||||
|
sv [14] : = nw; |
|
|
|
|
|
|
|
|
|
||||||
|
write |
tape (sv, svl) |
|
|
|
|
|
|
|
|
||||||
end |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Библиотечная процедура 1р2. |
Библиотечная процедура 1р2 используется |
в программах ККА для построения полинома Лагранжа второй степени на участке аппроксимации.
Формальными параметрами процедуры являются: номера точек аргу мента, соответствующие началу t\ и концу t2 участка аппроксимации, и
243
номер строки массива ар, в которую записываются параметры, характери зующие аппроксимирующую зависимость на участке, заданном интервалом
\t 1, /2].
Впроцедуре сначала вычисляются узлы аппроксимации по формулам
(6-19), приведенным в § 6-1, причем в качестве начала и конца участка аппрок симации используются номера точек И и Й. Полученные значения коорди нат узлов аппроксимации округляются до ближайших целых чисел, которые заносятся в массив дискретных значений узлов аппроксимации xd. Они ис пользуются в программе для выбора значений функции из массива fj в узлах
аппроксимации. Эти значения функции обозначаются в программе перемен ными ffl, ^1 и [2.
Коэффициенты квадратичного полинома А2, А1, АО вычисляются по фор мулам (6-18), причем в качестве узлов аппроксимации для вычисления ко эффициентов принимаются действительные значения аргумента функции хО,
х1 и х2.
Если число точек аргумента на участке аппроксимации равно трем, узлы аппроксимации вычисляются с помощью оператора, помеченного мет кой m l.
Если число точек аргумента на интервале \t\, t2 ] больше, чем три, то
для каждой точки задания аргумента вычисляется значение абсолютной по грешности аппроксимации е, из которых выбирается максимальное значение погрешности етах. После определения значения етах производится попытка
уменьшения этой погрешности за счет сдвигов узлов аппроксимации. Сдвиг узлов аппроксимации осуществляется с помощью эвристического алгоритма который основан на анализе распределения погрешности в различных точках участка, на котором строится квадратичный полином.
Поскольку первоначальный выбор узлов аппроксимации производится по формулам (6-19), то в этом случае абсолютная погрешность аппроксимации трижды меняет знак на каждом участке и в таблице погрешностей имеется четыре экстремальных значения погрешности. Модули экстремальных зна чений погрешностей вычисляются и записываются в массив ет. Для запоми
нания знака погрешности на интервале, где погрешность имеет одинаковый знак, используется переменная signe. Затем в массиве ем отыскивается ми
нимальное по модулю значение погрешности.
Сдвиг узлов в аппроксимации осуществляется с целью нахождения та ких узлов, при которых модули экстремальных погрешностей приблизитель но выравниваются (в данной программе это выравнивание производится с точностью 10%). Для дальнейшего сравнения экстремальных значений погрешностей формируется целочисленный массив de. Элементы этого массива соответствуют значениям экстремумов'Тюгрешности из массива ем и прини
мают значения 1 или 0 в зависимости от величины экстремальных значений. Если разность между экстремальным значением погрешности и f,min меньше, чем 0,1 етах, то соответствующий данному экстремальному значению элемент массива de принимает значение 1, в противном случае — 0. Таким образом,
для каждого распределения погрешности можно получить двоичный код, разрядами которого являются значения элементов массива de.
Направление и величины сдвига узлов для каждого конкретного рас пределения погрешности были выбраны на основании серии опытов, прове денных для ряда функций, и иллюстрируются табл. 11-1. Первый столбец этой таблицы отводится для записи двоичного кода, соответствующего эле ментам массива de, во втором столбце расположен рисунок, иллюстрирующий
один из возможных вариантов распределения погрешности для двоичного кода расположенного в этой строке таблицы, и направление сдвига узлов аппроксимации, а в третьем, четвертом и пятом столбцах указано количество точек, на которое сдвигается узел. Если число точек, на которое сдвигается узел, в таблице напечатано со знаком минус, то сдвиг осуществляется в ле вую сторону, в противном случае узлы аппроксимации сдвигаются вправо. Приведенный в таблице алгоритм сдвига узлов в программе реализуется группой операторов, начинающейся с меткой т9. Оператор с меткой т \7
осуществляет вычисление массива новых значений узлов аппроксимации
244
Таблица 11-1
Распределение погрешности и величины сдвига узлов
$ Двоичный |
Условное изображение |
dx [0] |
dx [1] |
dx [2] |
код |
0000
0001
0010
ООП
0100
0101
- Л |
; |
Х |
Г Х |
X |
X |
0 |
0 ' |
0 |
+ 5 |
+ 5 |
+ 1 |
+ 1 |
+ 2 |
— 1 |
r f 2 |
+ 3 |
■ + 1 |
|
|
|
+ 1 |
—2 |
— 1 |
+ 1 |
— 1 |
+ 1 |
о н о |
+ 1 |
0 |
— 1 |
0111 |
X |
V |
+ 3 |
+ 2 |
+ 1 |
|
|
||||
1000 |
|
|
— 1 |
— 5 |
— 5 |
245
Двоичный
код
1001
1010
1011
1100
1101
1110
Условное изображение
Х А -
\ г ^
V v
П родолж ение |
т а б л . 11-1 |
|
dx [0] |
dx [1] |
dx[ 2] |
— 1 |
0 |
+ 1 |
— 1 |
+ 1 |
— 1 |
— 1 |
+ 2 |
+ 1 |
— 1 |
—з . |
— 2 |
— 1 |
— 2 |
+ 1 |
— 1 |
—2 |
— 3 |
xdn по значениям узлов аппроксимации xd, выбранным на предыдущем шаге)
и значениям приращений узлов аппроксимации, которые находятся в мас сиве dx.
Описанный алгоритм сдвига узлов в программе дополняется проверкой расстояний, которые получаются между новыми значениями узлов. Если в ре зультате Сдвига узлов это расстояние становится отрицательным или равным нулю, то в программе производится сдвиг в противоположную сторону тех
узлов, для которых имеет место нарушение приведенного |
выше условия. |
В противном случае новые значения узлов xdn засылаются |
в массив xd и |
осуществляется переход к вычислению коэффициентов полинома при выбран ных узлах аппроксимации и максимальной погрешности емах, которая и сравнивается с максимальной погрешностью epsM, имевшей место на преды
дущем шаге определения узлов аппроксимации. Процесс сдвига узлов повто ряется до тех пор, пока все экстремальные значения погрешностей не станут равными с заданной степенью точности или пока новый сдвиг узлов не вызо вет погрешности, превышающейпогрешность на предыдущем шаге. В этом случае сдвиг узлов заканчивается, и в соответствующие строки массива за
246
носятся коэффициенты полинома и максимальная погрешность аппрокси мации на участке. Управляющая переменная q, которая в начале программы принимается равной нулю, служит для присвоения переменной epsM значе ния максимальной погрешности ежах на первом шаге сдвига узлов.
procedure 1р2 (tl, |
t2, |
|
/3); |
|
|
|
|
|
|
|
|
|
|
|||||||
value |
tl, |
й ; |
/3; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
integer tl, |
/2, |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
begin real e, emax, etnin, epsm, x, *0, xl, x2, vl, v2, |
|
|||||||||||||||||||
/0, /1, /2, cO, cl, c2, aO, a\, a2; |
|
|
|
|
|
|
||||||||||||||
integer l, j, g, q, signe, dx10, dx21; |
|
|
|
|
|
|||||||||||||||
array em [1 : 4]; |
|
[1 : 4], xd, xdn, dx |
|
|
|
|
|
|||||||||||||
integer |
array |
de |
|
|
[0 :2 ]; |
|
|
|||||||||||||
g : = q : = 0; epsm : = 0; |
2] : = xn -f |
tl |
X hx\ |
|
||||||||||||||||
ар |
Ш , |
1 ] : = |
tl\ |
|
ар |
U3, |
|
|||||||||||||
ap |
[73, |
3] : = |
i2\ |
|
ap |
[/3, |
4 ]: — xn + |
t2 X hx\ |
|
|||||||||||
ml : if |
t2—tl — 2 |
then |
|
xd |
|
|
t\ |
|
1; xd |
|
|
|
||||||||
begin xd |
[0] : = |
|
tl\ |
[1 ] : = |
+ |
[2] |
: = 72; |
|||||||||||||
|
go to m4 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
end; |
|
|
= |
1 |
then |
|
|
|
|
|
|
|
|
|
|
|
|
|||
m2 : if |
t2—tl |
|
|
|
|
|
|
|
|
ap |
|
|
|
|||||||
begin |
ар |
U3, |
5] : = ap U3, 8] : = 0; |
|
U3, |
7] |
: = / [fl ]; |
|||||||||||||
|
ap |
U3, |
6 ]: = |
(f |
U2] — f (tl ])/hx\ |
go to fin |
|
|
||||||||||||
end; |
|
(t2 + |
tl)!2.0; |
v2 : = |
(t2— tl)/2.0; |
|
|
|
||||||||||||
m3 : vl |
: = |
|
|
|
||||||||||||||||
xd |
[0] |
: = |
entier |
(0.5 + |
(wl — v2 X cos (0.5236))); |
|||||||||||||||
xd |
[1] : = entier (0,5 |
+ |
(vl — v2 X cos (1.570796))); |
|||||||||||||||||
xd |
[2] |
: = |
entier |
(0.5 + |
(t>l — t>2 |
X cos (2.618))); |
|
|||||||||||||
m4 : fO : — f |
Ixd [0]]; |
/1 |
: = |
f [xd [1]]; /2 |
: = |
/ [xd [2]]; |
||||||||||||||
xO : — xn |
+ |
hx X xd [0]; |
xl : = |
xn + |
hx X xd |
[1 ]; |
||||||||||||||
x2 : = xn |
+ |
hx X xd [2 ]; |
cO: = |
f0l(x0 — xl)/(x0 — x2); |
||||||||||||||||
cl : = fl/(xl—x0)/(xl—x2)\ c2 : = f2l(x2—x0)/(x2—xl); |
||||||||||||||||||||
a2 : = |
cO + |
cl + |
|
c2\ |
aO : = cO X xl |
X x2 + cl |
X xO X |
|||||||||||||
x2 + |
c2 X xO X xl; |
|
x2) — cl X (xO + x2) — c2 X (xQ +xl) |
|||||||||||||||||
al |
: = — cO x |
(xl + |
|
|||||||||||||||||
it ё Ф 0 then go to fin\ |
|
|
|
|
|
|
|
|
|
|||||||||||
mb ', if |
t2—tl |
= |
2 then |
: = a2\ |
apШ, 6] : = al; |
|
|
|||||||||||||
begin |
ap |
Ш, |
5] |
|
|
|||||||||||||||
|
ap [Й, 7] |
: = |
aO; |
ap Ш, 8] :. = 0; |
go |
to fin |
|
|||||||||||||
end; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
m6 : for |
l : = |
1 step 1 |
until |
4 do em |
[/]:== |
0; |
|
|
|
|||||||||||
x : — ap |
U3, |
2]; |
|
/ : = |
1; emax : = 0; |
|
X x -,L aO));' |
|||||||||||||
signe : = |
sign (f |
[til |
— ((a2 x |
x + al) |
||||||||||||||||
for / |
: = |
tl |
step |
1 |
until |
t2 |
do |
|
|
|
|
|
|
|
||||||
begin |
e : = |
f |
[/] — ((a2 X x + al) x ^ |
+ |
aO); |
|
|
|||||||||||||
|
if abs (e) > |
emax then emax : = |
abs (e); |
|
|
|
||||||||||||||
|
if e -=f=0 Д sign |
(e) ±f=signe then |
|
|
|
|
|
|||||||||||||
|
begin |
signe : = |
|
sign |
(e); |
/ : |
= / + ! |
|
end; |
|
|
|||||||||
|
if |
abs (e) > |
em |
U] |
then |
em |
[/] |
: = abs (e); |
|
|
247
|
х : — х + |
hx |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
end; |
|
0 then begin q : = |
|
1; go to m8 end; |
|
|
|
|
|
|
|||||||||||||||
m 7 : if q = |
|
|
|
|
|
|
|
|
|||||||||||||||||
if emax |
epsm then |
go |
to |
fin; |
a2\ ap |
|
|
|
|
|
|
|
|
|
|||||||||||
m8 : epsm : = emax\ ap U3, |
5] |
|
: = |
|
[f3, 6] |
: — al; |
em |
[1 ]; |
|||||||||||||||||
ap |
f/3, |
7 ] : --- aO; |
ap Ш, 8] |
: = |
epsm!fmax\ emin : = |
||||||||||||||||||||
for l |
|
|
l |
step |
1 |
until |
4 |
do |
em [/]; |
|
|
|
|
|
|
|
|
||||||||
if em [l]—emin then emin : = |
|
|
|
|
|
|
|
|
|||||||||||||||||
for / |
: = |
1 |
step |
1 |
until |
4 |
do |
then de |
[/] |
: = |
0 |
|
|
|
|||||||||||
if |
(em |
[Л > emin)/emax < |
0.1 |
|
|
|
|||||||||||||||||||
else de |
[/] |
: = |
1; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
m9 : if de [4] = |
1 |
then |
|
|
|
|
dx |
|
|
|
|
|
|
dx |
|
|
|
|
|||||||
begin |
if xd |
[2 ] < |
t2 then |
[2 ] : = |
1 |
|
else |
[2 ] ; = |
0 |
end; |
|||||||||||||||
if |
de |
[1 ] = |
0 then go to ml3; |
|
|
|
|
dx |
|
|
|
|
|
|
|||||||||||
if xd |
[0 ] > |
tl |
then |
dx |
[0 ] : = |
— 1 else |
[0 ] : = |
0; |
|
|
|||||||||||||||
if |
de |
[2] |
= |
0 |
then go |
to |
m il; |
|
|
|
|
|
|
|
|
|
|
|
|||||||
if |
de |
[3] |
= |
0 |
then go |
to |
mlO; |
|
|
|
|
|
|
|
|
|
|
|
|||||||
if |
de |
[4] |
= |
0 |
then |
|
dx |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
begin dx |
[1 ] : = |
— 2\ |
|
[2] : = |
— 3; go to ml7 end; |
|
|
||||||||||||||||||
mlO : if de [4] = |
0 |
then |
|
|
dx |
|
[2] : = |
— 2; go to ml7 end; |
|
|
|||||||||||||||
begin dx |
[1 ] : = |
— 3; |
|
|
|
||||||||||||||||||||
dx |
[1 ] : = |
— 2; |
go to m l7‘ |
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||
m il : if |
de |
[3] |
= |
0 then go to ml2; |
|
|
|
|
|
|
|
|
|
|
|
||||||||||
if de [4] |
= |
0 then |
|
|
|
[21 : = |
— 1; go to ml7 end; |
|
|
||||||||||||||||
begin |
dx |
[11: = |
1 \ dx |
|
|
|
|||||||||||||||||||
dx |
[1 ] : = |
2; |
go |
to ml7; |
|
[1 ]: = |
0;go to ml7 end |
|
|
||||||||||||||||
ml2 : if de [41 = |
1 |
thenbegin dx |
|
|
|||||||||||||||||||||
else begin dx |
[1 ] := |
— 5; |
dx [2] : = |
— |
5; go to |
ml7 |
end; |
||||||||||||||||||
ml3 : if de [21 = |
0 then go to ml5; |
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||
if |
de |
[3] = |
0 |
then |
go |
|
to |
|
ml4; |
|
|
|
|
|
|
|
|
|
|
||||||
if |
de |
[41 = |
0 then |
|
dx |
|
|
|
|
|
0\ dx |
|
|
|
|
|
|
|
|
||||||
begin dx [0] : = |
1; |
|
[11 : = |
[21 : = |
— 1; |
go |
to ml7 |
||||||||||||||||||
end; |
|
|
|
|
dx |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
dx |
[0 ] : = |
3; |
[11 : = |
2; go to ml7; |
|
|
|
|
|
|
|
|
|||||||||||||
ml4 : if de [4] = 0 then |
dx |
|
|
|
|
|
|
|
dx [2] |
|
|
|
|
|
|||||||||||
begin |
dx |
[0] |
: = |
1; |
[1 ] : = — 2; |
|
: = — 1; go to |
||||||||||||||||||
ml7 end; |
|
1 \ dx |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
dx |
[01: = |
[1 ] : = |
— 1; go to ml7; |
|
|
|
|
|
|
||||||||||||||||
ml5 : if |
de [3] = 0 then |
go |
|
to |
|
ml6; |
|
|
|
|
|
|
|
|
|
|
|||||||||
if de [4] = 0 then |
|
dx |
|
[1 ] : == 2; |
dx |
|
[2] : = |
— 1; |
go |
to |
ml7 |
||||||||||||||
begin |
dx |
[0] : = |
1; |
|
|
||||||||||||||||||||
end; |
|
: = |
2; |
dx |
[1 ] : = |
3; |
go |
to |
ml7; |
|
|
|
|
|
|
|
|||||||||
dx |
[0] |
|
|
|
|
|
|
|
|||||||||||||||||
ml6 : if de [4] = |
0 then go to fin; |
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||
dx |
10 ] := |
dx |
[1 ] : |
= |
5; |
|
|
|
|
|
|
|
xd |
[l] + dx [/]; |
|
||||||||||
ml7 : for l : = |
0 step 1 until 2 do xdn U1 : = |
|
|||||||||||||||||||||||
dx 10 : = xdn |
[1 ] — xdn |
|
[0]; |
dx 21 |
: = xdn |
|
[2] — xdn |
ll ]; |
|||||||||||||||||
if |
dx 10 > 0 |
then |
go |
to ml8; |
|
|
|
|
|
|
|
|
|
|
|
|
248
|
g : = |
1; dx |
[1 ] : = |
dx |
[1 ] — sign (dx |
[1 ]); |
||
|
if |
dx |
[0 3> |
0 then |
dx |
[0] : = dx [0] — sign (dx [0]); |
||
|
go |
to |
ml7; |
|
|
|
|
|
ml8 |
: if dx 21 > 0 |
then go to ml9; |
[1 ]); |
|||||
|
g : = |
1; dx |
[1 ] : = |
dx |
[1 ] — sign (dx |
|||
|
if |
dx |
[21< 0 |
then dx |
[2 ] : — dx [2] — sign (dx [2]); |
|||
ml9 |
go |
to |
ml7; |
|
|
2 |
do xd [/] : = |
xdn [7); |
: for l : 0 step 1 until |
||||||||
fin : |
go |
to |
m4; |
|
|
|
|
|
end; |
|
|
|
|
|
|
Программа приближения функции рядом Уолша. Программа предназна
чена для вычисления коэффициентов ряда Уолша для заданной функциональ ной зависимости и определения минимального числа членов ряда, необхо димого для приближения представления функции с заданной степенью точ ности eps.
В результате работы программы формируется массив ар. Число столбцов
этого массива равно трем, а количество строк определяется числом точек, в которых вычисляются значения функции. Первый столбец массива ар от
водится для занесения индекса коэффициента ряда Уолша, который одно значно определяет аналитическое выражение функции Уолша, во второй столбец массива ар записываются коэффициенты ряда Уолша, а третий стол
бец служит для занесения значения относительной погрешности, которая получается при аппроксимации функции числом членов ряда Уолша, рав ным количеству заполненных строк массива ар.
Всю программу можно разбить на две части. В первой части программы вычисляются все я коэффициентов ряда Уолша, а во второй части программы определяются те члены ряда, которые необходимы для аппроксимации функ-. ции с заданной погрешностью eps. В программе реализован способ построе
ния ряда, описанный в четвертой главе. Коэффициенты ряда Уолша вычис ляются в программе по формуле (4-16).
В программе используются следующие обозначения переменных: walsh определяет значение функции Уолша, sigma — десятичный эквивалент двоич ного набора, s, I — индексы функций Уолша, q — наибольший по модулю коэффициент ряда, epsa — заданная абсолютная погрешность, емах — те
кущая наибольшая погрешность.
begin real eps, epsa, emax, fmax, sum, q; integer m, n, k, s, i, j, l, p, sigma, walsh;
array |
sv |
[1 : 14]; |
|
|
|
||
read |
(eps); |
(svl, |
sv); |
|
|
|
|
read |
tape |
|
fmax : = |
sv [7]; |
|||
m : = sv |
III; |
n : = sv |
[2]; |
||||
begin |
array f |
[0 |
: n— 1 ], |
ap [0 : n—1, |
1 : 3 ] ; |
||
integer |
array |
v [1 : m), |
M 0 : m); |
|
|||
read tape (ft, |
f); |
|
|
|
|||
v |
[m] : = |
1; |
|
|
|
|
for k : = m—1 step— 1 |
until |
1 do о [k \ : = v \k + 1 ] X 2; |
epsa : = eps X fmax; |
|
|
for s : = 0 step 1 until n—1 do |
||
begin sum : = 0; t [0] |
: = |
s; |
•for k : = 1 step 1 until m do begin i : — k—1;
t [k] : = if t [i] ^ 0 then t [г] — v [k ]
9 Заказ № 1218 |
249 |