Главная Промышленная автоматика. const: vana: begin comment Отыскивается ql, являющийся множителем an; if q = 1 then go to varia; if (atn]-q)Xq=a[n] then begin comment Далее проверка: не является ли q общим множителем для всех ги for i:=0 step 1 until п- do if (a[i]-bq) xq¥=a{i] then go to varia; for i:=0 step 1 until n do a[i]: = a[i]/q; c: = cXq; go to const end const. Затем проверка: является ли (рх-Множнтелем многочлена; f: = aIO]; g: = l; for i: = 1 step 1 until n do begin g: = gXp; f:=fXq + gXa[i] end i; if f=0 then begin comment Данный двучлен (px-q) является множителем. Далее делим на него наш полином; г:=г-Ы; u[r]i = p; vi:r]: = q; for i:=0 step 1 until n do begin a[il: = f:=(ai[iH-f)/p; f: = fXq end i; n: = n-1; go to if n=0 then fin else varia end f; q:=-q; if q<0 then go to varia end q end p; fin: if n==0 then c: = cXa[0] end factors; Свидетельство к алгоритму 756 Алгоритм 756 является стереотипным переизданием алгоритма 75а. Свидетельство к алгоритму 75а Алгоритм 75а получен в результате сокращения и ординарной переработки процедуры, приведенной в «Подтверждении к алгоритму 75» А. П. Релфа (Relph А. Р «САСМ», 1962, № 7). Перевод подтверждения Дж. Хилмора («САСМ», 1962, № 8) здесь не приводится как потерявший свое значение после публикации алгоритма 75а. Алгоритм 75а проверен с помощью транслятора ТА-1 для многочленов Зл;3-29л;2--78л;-40 и л;-6x2-1-32. Получены правильные резуль- таты: для первого многочлена 1 X (х-4) {х-5) (Зх-2); для второго многочлена lX(x-f-2) (х-4) (х-4). * Далее указываются две поправки к алгорит.му 75 и приводится новый вариант процедуры factors, в результате переработки которого получен алгоритм 75а. {Прим. ред.) А. П. Релф (Relph А. Р. «САСМ», 1962, № 7) Алгоритм 75 был транслирован с использованием транслятора DEUCE ALGOL и дал удовлетворительные результаты после следующих исправлений... * Свидетельство к алгоритму 766 [Ml] Алгоритм 766 «Процедуры сортировки» здесь не приводится, поскольку соответствующий алгоритм 76 («САСМ», 1962, № 1) не пригоден ни к какой переработке по причинам, указанным в нижеследующем «Замечании» Б. Рэнделла. Замечание к алгоритму 76 Б. Рэнделл (Randell В. «САСМ», 1962, № 6) В процедурах сортировки были обнаружены следующие типы ошибок. 1. Описания процедур не начинаются с символа procedure. 2. В спецификациях массивов даются границы индексов. 3. Символ « = » используется вместо символа «: = » в операторах присваивания и в заголовках циклов. 4. Большое число точек с запятой опущено (обычно после end). 5. Выражения в описках граничных пар в описаниях массивов зависят от локализованных переменных. 6. В некоторых операторах процедур отсутствуют правые скобки. 7. Условные операторы следуют за then. 8. Нет описаний для А или Z, что является, по-видимому, опечаткой. 9. В некоторых процедурах делается попытка использовать некоторые идентификаторы для двух различных величин, а иногда попытка дважды описать один идентификатор в том или ином начале блока. 10. В процедуре Presort quadratic selection массив, описанный как двумерный, используется как одномерный. И. В 0днод1 месте переменная с индексами дается как фактический параметр, соответствующий формальному параметру, специфицированному как массив. 12. В некоторых процедурах идентификаторы, используемые в качестве формальных параметров, вновь описываются и все же используются как параметры. 13. В каждой процедуре в совокупности спецификаций дается k, не заданное в списке формальных параметров. Не было сделано никакой попытки транслировать или даже понять логику этих процедур. Думается, что такая чрезвычайно неаккуратная попытка использования языка АЛГОЛ никогда не должна появляться в качестве алгоритма в журнале «САСМ». АЛГОРИТМ 776 Интерполяция, дифференцирование и интегрирование функций [D1, D4, Е1] Процедура difint может в зависимости от способа обращения к ней выполнять интерполяцию, дифференцирование или интегрирование -функций одной переменной, которые на всем или на интересующей нас части интервала адекватно описываются с помощью двупараболической кривой. Процедура основана на использовании интерполяционной схемы -Лагранжа, приспособленкой для ооредненных парабол второго порядка. По данному методу вычисляется производная от функции, численно определенной в точках 1, 2, 3 и 4, путем проведения одной параболы через точки 1, 2, 3 и второй параболы через точки 2, 3 и 4. Тогда производная в точке 2 равна среднему значению аналитических производных двух парабол, т. е. коэффициенты параболы iaix\+biX2+Ci), проходящей через точки 1, 2 и 3, и коэффициенты параболы (СгХг+Ьгг-Ь + С2), проходящей через точки 2, 3 и 4, определяются с помощью урав нений Лагранжа, как показано ниже. Арифметические средние значения этих коэффициентов a{ai+a2)/2, b= {bi+b2)/2, c=,(ci-bC2)/2 используются для получения производной на интервале от точки 2 до точки 3 по формуле (2ах+Ь). Интерполяция производится аналогично, за исключением того, что конечной формулой является парабола [ах+Ьх+с). Интегрирование производится подобно построению кривой по точкам. Например, интеграл между некоторыми двумя точками, скажем, 2 и 3, является осредненным интегралом двух парабол между границами независимых координат для точек 2 и 3. Осреднение производится для каждого интервала вдоль абсциссы, так как полученные результаты накапливаются для вычисления определенного интеграла. С помощью уравнений Лагранжа находятся коэффициенты аь, bk и с* Путем вычисления t; = У] I Д {Xj - Xi), где yi = f (Xj), /=1,2.....т. I 1=1.1Ф1 т т т mm Тогда aft=2?r, Ьй = 2г X 2 Г, Ck = tiX Д данной процедуре эти формулы применяются для т = 3, Л = 1 и 2. Значения формальных параметров поясняются ниже: X - массив табличных значений аргумента, имеющий размерность [1:п]; все значения аргумента различны и образуют монотонно возрастающую последовательность; у - массив табличных значений функций, имеющий размерность :[1:п1; jt - параметр, задающий режим вьшолнения процедуры difint. Для интерполяции нужно положить lt=l; для дифференцирования it=2, а для интегрирования jt=3; xarg - значение агрумента, при котором нужно производить интерполяцию или дифференцирование. Если xarg находится вне интервала 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 [16] 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 0.0016 |