Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

книги / Теория инженерного эксперимента

..pdf
Скачиваний:
18
Добавлен:
12.11.2023
Размер:
13.91 Mб
Скачать

данных. Перепишем первоначальный оператор ввода данных

111 READ, N, NN

где NN — число данных второй группы. Теперь при воз­ вращении к первоначальному оператору, где было вы­ числено среднее квадратическое отклонение для первой выборки данных, необходим условный переход к одной или двум частям программы: к стандартной программе для определения среднего квадратического отклонения для второй выборки или к программе выдачи данных о среднем значении и среднем квадратическом отклонении для первой выборки на печать. Сначала запишем

DATA2 = NN

а затем введем оператор IF

IF (1.0 — DATA2) 12, 100, 100

Если теперь при вводе первых данных число NN будет больше единицы, то оператор IF окажется отрицательным и произойдет переход к оператору 12. Если же вводятся такие значения NN, как 0 или 1 [ввод так называемых фиктивных (dummy) переменных], то осуществляется переход к оператору 1 0 0, который будет описан далее. Обработка данных второй выборки производится следую­ щим образом:

12

DO 16 ММ = 1, NN

16

READ, VEL2(MM)

 

SUM3 = 0.

 

DO 18 J J = 1, NN

18

SVМ3 = SUM3 + VEL2(JJ)

 

AVE2 = SUM3/DATA2

SUM4 = 0.

DO 20 K K = 1, NN

DEVI2(KK) = AVE2 — VEL2(KK)

SQDE2(KK) = DEVI2(KK)** 2.

20SUM4 = SUM4 + SQDE2(KK) VAR2 = SUM4/(DATA2 — 1.) STDE2 = SQRT(VAR2)

[Если бы эта программа вводилась в небольшую вы­ числительную машину, то уже имело бы место переполне­ ние запоминающего устройства. До сих пор мы исполь­ зовали шесть различных массивов переменных с индек­ сами, из которых фактически были нужны только два [VEL(K) и VEL2(K)]. Если в каждой выборке данных имеется 50 переменных, то введенный вначале оператор DIMENSION зарезервирует объем запоминающего устрой­ ства на 300 чисел, но к этому необходимо добавить еще множество операторов, обозначений переменных и т. д. После составления этой программы покажем ее пересмо­ тренный вариант со значительно меньшими требованиями к объему (запоминающего устройства.

Продолжим вычисление суммарного среднего квадра­ тического отклонения '(STOT), определяемого по фор­ муле (8.4):

DEGF = (DATA + DATA2 — 2.)

VARTO = (SUM2 + SUM4)/DEGF

STOT == SQRT(VARTO)

и критерия t (STUDT), определяемого по формуле (8.3):

CONST = (l./DATA) + (1./DATA2)

STUDT = (AVE — AVE2)/(STOT* (SQRT(CONST)))

В некоторых случаях значение критерия t может быть отрицательным, поэтому вводим функцию взятия абсо­ лютной величины ((АВС) (числа STUDT:

STUDT = ABS(STUDT)

Найти критерий F (FRATO) не представляет труда после того, как с помощью оператора IF будет определе­ но, какая из дисперсий больше:

IF (VAR2 — VAR) 22 , 23 , 24

22FRATO = VAR/VAR2 GO ТО 101

23FRATO= 1.0 GO ТО 101

24FRATO = VAR2/VAR

Теперь получены все интересовавшие нас статистиче­ ские показатели для этих двух выборок данных и их мож - но считать с запоминающего устройства вычислительной машины.

11.5. Операторы вывода данных

При использовании ФОРТРАН-программы для не­ больших вычислительных машин обычно применяются два оператора вывода данных: TYPE или PRINT (ПЕЧАТАТЬ) при выводе данных на печатающее устрой­ ство и оператор PUNCH (ПЕРФОРИРОВАТЬ) при выводе данных на перфокарты. В большинстве компиляторов для каждой команды TYPE или PUNCH требуется опе­ ратор FORMAT. Оператор FORMAT указывает, в каком месте перфокарт или печатающего устройства должны помещаться выходные данные и в какой форме записи. Опуская, как и ранее, оператор FORMAT, имеем

101 PUNCH, STOT, DEGF, STUDT

что означает: набить на перфокарты данные об общем сред­ нем квадратическом отклонении, числе степеней свободы и критерий Стьюдента t. Кроме того, команды

PUNCH, FRATO

PUNCH, AVE2, VAR2, STDE2

означают запись следующих данных: критерий F, сред­ нее значение, дисперсия и среднее квадратическое откло­ нение для второй выборки данных. Наконец, оператор

100 PUNCH, AVE, VAR, STDE

означает запись трех важных статистических показателей для первой выборки данных. Заметим, что если бы в на­ чале программы число NN было равно 0 или 1, то мы по­ лучили бы только этот последний оператор вывода 1 0 0.

{Если же необходимо проанализировать дополнитель­ ные группы данных, то с помощью оператора GO ТО

возвращаемся к началу программы:

GQ ТО 1U

и наконец, для прекращения вычислений подается коман­ да END (КОНЕЦ), указывающая, что машина должна прекратить вычисления.

В языке ФОРТРАН имеются три дополнительных опе­ ратора, но только один из них имеет важное значение. Оператор CONTINUE (ПРОДОЛЖАТЬ) применяется как последняя команда цикла DO в тех случаях, когда цикл DO заканчивается оператором перехода IF или GO ТО. Применение оператора CONTINUE позволяет осуществить переход от «незавершенного» цикла DO. Пример будет приведен позже.

Оператор PAUSE (ПАУЗА) применяется для останов­ ки машины в том месте программы, где записана команда PAUSE, Оператор STOP (ОСТАНОВ) также останавливает вычисления и, кроме того, выдает команду STOP на пе­ чать. Эти две команды используются главным образом для проверки продолжительных и сложных программ. Когда вычисления начинаются заново, машина переходит к оператору, следующему за PAUSE или STOP.

После составления программы для вычисления ста­ тистических показателей постараемся «сбросить лишний вес», сократив число массивов с индексами и переменных, которые не должны храниться в запоминающем устройст­ ве. Оставим только два массива: SUB(N) и SUB2(NN), которые будут служить для хранения различных пере­ менных с индексами. По существу в программе достаточ­ но иметь один массив, так как мы закончим обработку одной группы данных, прежде чем начнем обработку дру­ гой группы, но для большей ясности будем использовать два массива. Чтобы не усложнять программу, опустим некоторые операторы, в частности оператор FORMAT:

 

DIMENSION SUB(50), SUB2(50)

111

READ,

N,

NN

 

DO 4,

M =

1, N

4

READ,

SUB(M)

 

SUM = 0.

 

 

DO 6 M =

1, N

6

SUM = SUM + SUB(M)

PATД = N

AVE = SUM/DATA

SUM2 = 0.

DO 9 М = 1, N

SUB(M) = AVE — SUB(M)

SUB(M) = SUB(M)** 2.

9SUM2 = SUM2 + SUB(M) VAR = SUM2/(DATA— 1.) STDE = SQRT(VAR) DATA2 = NN

 

IF (1. — DATA2)

12, 100, 100

12

DO 16,

M = 1,

NN

16

READ,

SUB2(M)

 

 

SUM = 0.

 

 

DO 18

M = 1, NN

18SUM = SUM + SUB2(M) AVE2 = SUM/DATA2 SUM4 = 0.

DO 20 M = 1, NN

SUB2(M) = AVE2 — SUB2(M) SUB2(M) = SUB2(M)** 2.

20SUM4 = SUM4 + SUB2(M) VAR2 = SUM4/(DATA2 — 1.) STDE2 = SQRT(VAR2)

DEGF = (DATA + DATA2 — 2.) VARTO = (SUM2 + SUM4)/DEGF STOT = SQRT(VARTO)

CONST = (l./DATA) + (1./DATA2)

STUDT = (AVE — AVE2)/(STOT* (SQRT(CONST))) STiroT = ABS(STUDT)

IF(VAR2 — VAR) 22, 23, 24

22FRATO = VAR/VAR2 GO TO 101

23FRATO = 1.0 GO TO 101

24 FRATO = VAR2/VAR

101PUNCH, STOT, DEGF, STUDT PUNCH, FRATO

PUNCH, AVE2, VAR2, STDE2

100PUNCH, AVE, VAR, STDEj GO TO 111

END

Эта программа может показаться довольно сложной для читателя, который ранее не был знаком с этим вопро­ сом, но в действительности здесь не содержится ничего, кроме элементарных арифметических действий, связан­ ных несколькими логическими [операциями. Было бы удобно ввести в вычислительную машину таблицы значе­ ний критериев t и F и выдавать на печать окончательные значения вероятностей. Однако это возможно для боль­ ших вычислительных машин, хотя запрограммировать «обращение к [таблице», особенно для критерия F, где для нахождения вероятности требуются три входные величи­ ны, довольно сложно. В следующем разделе будет пока­ зано обращение к таблице, когда требуется знать одну переменную.

1 1.6 . Специальные вопросы

1 [Выше было показано, что составление программ для обработки экспериментальных данных требует большого мастерства. Необходимо рассмотреть также некоторые особые случаи, часто встречающиеся в экспериментальной работе.

а) Применение 'вычисляемого оператора GO ТО при анализе ошибок. Для вычисления ошибки результата (гл. 3) требуется дифференцирование функции, однако эту операцию непросто выполнить на цифровой вычисли­ тельной машине, хотя для этой цели существуют специаль­ ные программы. Можно составить довольно общую про­ грамму, включающую ряд наиболее часто встречающихся результатов, аналогичных приведенным в табл. 3.1. Доступ к ним будет осуществляться через вычисляемый оператор GO ТО, при этом каждая формула имеет свой

кодовый номер, указываемый в индексах оператора GO ТО. Например1:

GO ТО (1 , 6 , 8 , 9), к

1 ERROR = SQRT (РХ** 2. + PY** 2.) GO ТО 100

6ERROR - SQRT (((РХ/Х)** 2.) + ((PY/Y)** 2.)) ERROR = R* ERROR

GO TO 100

8ERROR = (B* R* PX)/X GO TO 100 '

9ERROR = R* PX

GO TO 100

В программу включены первые "четыре уравнения из табл. 3.1. Доступ к любому из них можно получить, вводя в начале программы значение К = 1, 2, 3 или 4. К сожалению, программа, составленная по такой схеме, требует введе­ ния нескольких фиктивных входных величин, так как все поименованные переменные в уравнениях должны появиться в операторе ввода данных READ. Так, для оператора 8 необходимо ввести некоторое фиктивное чис­ ло вместо В, даже если в данном случае мы этот оператор

и не используем.

 

 

 

латин­

 

б)

Двойные индексы. Рассмотренный в гл. 6

ский

квадрат

требует применения

двойных индексов.

В

квадрате 4 x 4

строки обозначим символами

1(1),

1(2), 1(3) и 1(4), считая сверху вниз. Аналогично, считая

слева

направо,

пронумеруем

столбцы: J (1), J(2 ), J(3) и

J(4). В данном

случае можно использовать двойной или

вложенный цикл DO для записи 16 чисел квадрата,

на­

пример данных о расходе горючего (FUCON) из ’приме­

ра

6 .2

:

 

DO 5 1 =

1,4

 

 

 

 

 

 

 

 

 

 

 

 

DO 5 J =

1,4

 

 

 

 

 

5

READ, FUCON(I, J)

 

 

J

При переходе к циклу DO принимаем I =■ 1, а затем

= 1

, поэтому первое число (равное 2

1 , 2в примере 6 .2 )

ERROR — ОШИБКА,— Прим, перев.

обозначается FUCON (1,1). Правило, определяющее по­ рядок вычислений для вложенных цепей ЕЮ, состоит в том, что вначале записывается оператор DO, имеющий меньший индекс. Так, переменная J принимает индекс 2, а у переменной I сохраняется индекс 1 , и мы переходим ко второму столбцу верхней строки (число равно 24,5), имеющему обозначение FUCON (1, 2 ). Таким путем про­ ходим всю верхнюю строку до конца (J = 4), затем пере­ менная I получает индекс 2 и аналогичным способом про­ ходим второй ряд. Таким образом, последовательность ввода данных для латинского квадрата имеет следующий вид:

 

J(l)

J(2)

J(3)

1(4)

1(1)

1

2

3

4

1(2)

5

6

7

8

1(3)

9

10

И

12

1(4)

13

14

15

16

Переход к квадрату, содержащему логарифмы чисел, осуществляется очень просто:

DO 7 1 = 1,4

DO 7 J = 1,4

7 FUCON(I, J) = LOG(FUCON(I, J))

При анализе такого рода часто бывает необходимо усреднить результаты, записанные в квадрате, по рядам, столбцам или для других комбинаций. Усреднение дан­ ных по рядам и столбцам осуществляется просто. Напри­ мер, усреднение данных по четырем столбцам можно вы­ полнить следующим образом:

DO 9 J = 1,4

AVER(J) = FUCONO, J) + FUCON(2, J) + FUCON(3, J) +

+ FUCON(4, J)

9 “ AVER(J) = AVER(J)/4.

Другие средние легче всего вычислить по методу «грубой силы», а не в цикле DO. Среднее по диагонали (DIAV),

содержащей числа 1 , 6 , 1 1 и 16, определяется следующим образом:

DIAV1 = (FUCON(l, 1) + FUCON(2, 2 )+FUCON(3, 3 ) +

+ FUCON(4, 4))/4.

и T. Д.

в) Считывание значений функции. Хранение в запо­ минающем устройстве ЭВМ больших статистических таб­ лиц, содержащих значения критерия t и вероятностей, или таблиц для пара, дающих давление, объем и энталь­ пию, обычно нецелесообразно. Однако во многих случаях при обработке экспериментальных данных удобно вводить в машину простую функциональную зависи­ мость X от Y, например такую, как функция, представ­ ленная в табл. 2 .1 , либо соотношение между вязкостью или теплопроводностью жидкости и ее температурой. Не представляет труда ввести в запоминающее устройство таблицу значений с помощью оператора ЕЮ:

DO 12 J = 1, N

READ, X(J)

12 READ, Y(J)

однако получить обратно некоторые значения Y при за­ данном значении X несколько труднее. Одним из спосо­ бов является применение интерполяционной формулы Лагранжа (10.4), позволяющей с помощью всех таблич­ ных значений определить Y для заданного значения X, отсутствующего в таблице. При использовании 10— 20 значений X и Y формула Лагранжа оказалась бы гро­ моздкой даже для ЭВМ. Беря четыре, соседние точки, в большинстве случаев получаем достаточно точное интер­ поляционное значение Y, но при этом возникает проблема отыскания этих четырех соседних табличных значений X и Y, если 'задано некоторое значение X, лежащее в интервале значений, входящих в таблицу, т. е. между Х(1) и X(N).

Один из способов состоит в том, что с помощью опера­ тора IF табличные значения X в определенной последо­ вательности сравниваются с заданным значением. Обоз­ начая через XNEW заданное значение X, для которого

необходимо найти соответствующее значение YNEW, записываем

NN = N — 2

DO 16 J = 3, NN

IF (X(J) — XNEW) 16. 17, 18

17XNEW = X(J) GO TO 25

18K = J

GO TO 26

16 CONTINUE

Так как нам нужны два табличных значения X, между которыми находится XNEW, то сравниваются значе­

ния X в^интервале J = 3

и J = N — 2. Начиная цикл

DO со значения J

— 3, сравниваем XNEW и Х(3). Если

значение ^XNEW

больше

(разность отрицательна), то

переходим к оператору 16,

который "разрешает продол­

жать выполнение команд цикла DO, т. е. переменная J получает индекс 4, и проверка повторяется. Если XNEW меньше Х(3), но больше Х(2), то значение J запоминается в ячейке для К и сразу осуществляется переход к опера­ тору 26:

26XI = Х(К — 2) Х2 = Х(К — 1) ХЗ = Х ( К + 1 ) Х4 = Х(К + 2) Y 1 = Y ( K — 2)

ит. д. для Y2, Y3 и Y4.

Эти четыре соседних табличных значения X и Y, по два с каждой стороны XNEW и YNEW, необходимы для применения формулы Лагранжа. Вычисление YNEW с помощью этих величин оставим для упражнений.

Если окажется, что XNEW совпадает с табличным зна­ чением X, то, минуя все промежуточные этапы и форму­ лы, переходим непосредственно к оператору 25:

25 YNEW = Y(K),