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

Книга Фортран Павловец 2008

.pdf
Скачиваний:
127
Добавлен:
31.05.2015
Размер:
1.55 Mб
Скачать

Переменным комплексного типа значения могут быть заданы следующим образом: 1) с помощью операторов присваивания

А=(–3.5,–6.8) В=(1.12,2.2Е+3) C1=6.85 C2=X*C

D=CMPLX(C1,C2*SQRT(3.))

действ. часть, мнимая часть

Переменные А,B,D обязательно должны быть описаны при помощи оператора COMPLEX.

2) с помощью оператора DATA

DATA A,B/(–3.5, –6.8), (1.12,2.2Е+3)/ 3) с помощью операторов ввода.

48. Ввод-вывод переменных комплексного типа

Ввод-вывод информации делят на форматный и бесформатный.

При бесформатном вводе комплексных данных с помощью оператора READ исходные данные вводятся в виде комплексных констант. Каждой переменной комплексного типа соответствует комплексная константа в виде двух чисел, заключённых в скобки. Переменные А и В бесформатно вводятся следующим образом:

READ (5,*) A,B

С клавиатуры надо будет ввести: (–3.5, –6.8) затем запятую или пробел и далее

(1.12,2.2Е+3).

Бесформатный вывод переменных комплексного типа осуществляется аналогично выводу переменных вещественного типа, где каждое комплексное число выводится автоматически в круглых скобках в виде двух чисел, выведенных по спецификации Е15.7. Данные будут выводиться в одну строку по 5 вещественных чисел.

Форматный ввод-вывод информации осуществляется как ввод-вывод обычных данных вещественного типа с единственным отличием: каждая комплексная переменная представляется двумя вещественными числами (действительной и мнимой частью). Операторы READ и WRITE задают список очерёдности ввода-вывода, а оператор FORMAT задаёт очерёдность спецификаций, которые будут соответствовать списку ввода-вывода.

Примечание При форматном вводе-выводе круглые скобки комплексных чисел не вводятся и не

выводятся.

Пример:

WRITE (6,8) A,B

8 FORMAT(1X,’Комплексные значения A,B’/1X,F6.3,2X,F8.2, *3X,E10.3)

На экране монитора получим:

111

Комплексные значения А,В

–3.500

–6.80

0.112Е+01

1Х,F6.3, 2X

F8.2 3X

E10.3

Комплексные значения А,В

******

1X,F6.3

В списке вывода у нас два комплексных числа. Они состоят из четырех вещественных чисел. При выводе сначала появится текст Комплексные значения А,В. Затем перейдем на другую строку и выведем, соответственно спецификациям оператора FORMAT, три числа по

1Х F6.3 2X F8.2 3X E10.3

Осталось вывести мнимую часть числа В. Но список спецификаций оператора FORMAT исчерпан и оператор FORMAT повторяет свою работу, начиная с первой открывающейся скобки (стандартная работа оператора FORMAT при любых спецификациях). Поэтому на экране снова появится строка Комплексные значения А,В и будет выполнен переход на следующую строку и сделана попытка мнимую часть числа В вывести по спецификации F6.3. Но число 2.2*103 не может быть выведено по этому формату и вместо числа появятся символы

«******».

49. Встроенные функции комплексного типа

Встроенные функции комплексного типа в языке ФОРТРАН представлены следующими функциями:

CSIN – комплексный sin CABS – комплексный модуль

и так далее.

Отличие этих функций от остальных встроенных: аргументом этих функций должна

быть величина комплексного типа.

Пример:

COMPLEX A,B,C,D A=(–1.5, –3.7) B=A+(4.5,6.3) C=CSIN(A*B+SQRT(3.))

CMPLX – формирует из двух вещественных чисел комплексное число

COMPLEX A,B,C,D,E

F=6.3

B=CMPLX(F,–SIN(2.3)*3)

мнимая часть

REAL(B) – функция выделения действительной части комплексного числа

F1=REAL(B)+1. F1=7.3

AIMAG – функция выделяет мнимую часть комплексного числа

F2=AIMAG(B)+2. F2=–SIN(2.3)*3+2.

112

Задача:

Рассчитать токи в электрической цепи:

t = tn ...tк , dt

u= U m sin щt

щ= 2рf

Преобразуем схему так, чтобы осталось только одно полное эквивалентное сопротивление цепи Zэкв.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1)

 

 

 

 

2)

 

 

3)

 

.

 

 

 

 

 

 

 

Основные формулы для расчёта этой схемы:

 

 

= R + X

 

 

 

 

 

 

 

 

 

 

 

 

Z

C

 

 

 

 

 

 

 

 

 

.2

 

2

 

 

 

 

 

 

 

 

 

 

 

Z3

= R3

+ X L

 

 

 

 

 

 

 

 

 

.

 

. .

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Z

*Z

 

 

 

 

 

 

 

 

 

 

 

 

Z4

=

. 2

.3

 

 

 

 

 

 

 

 

 

 

 

.

 

Z2

+Z3

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Zэкв

= R1 +Z4

 

 

 

 

 

 

 

 

 

X C = ω1C

X L =ωL

113

i1 =i4 = Zu

. экв

i2 =i1 . Z3 . Z2 + Z3

i3 =i1 i2

СПрограмма №38

COMPLEX Z2, Z3,Z4, ZS, TOK1, TOK2, TOK3 DIMENSION TOKM(1000)

WRITE (6,*)’Введите ИД’

READ (5,*)R1,R2,R3,C,AL,TN,TK,DT,F,UM, W=2.*3.14*F

XL=W*AL XC= –1./(W*C)

Z2=CMPLX(R2,XC) Формируем комплексную переменную Z2

Z3=CMPLX(R3,XL)

Z4=Z3*Z2/(Z2+Z3)

ZS=R1+Z4

I=1

DO 8 T=TN,TK,DT

U=UM*SIN(W*T)

Получим комплексные значения токов:

TOK1=U/ZS

TOK2=TOK1*Z3/(Z2+Z3) TOK3=TOK1-TOK2

Модуль тока I1

TOKM(I)=SQRT(REAL(TOK1)**2+AIMAG(TOK1)**2) WRITE (6,*)’При T=’,T,’ ток=’,TOK1

На экран будут выводиться значения: “При Т=

 

ток=(

 

,

 

)

 

 

 

TOKM – массив для построения графика, содержит значения модуля тока

I1 .

8I=I+1

CALL GRAF(TOKM,I–1) PAUSE

STOP END

50. Оператор EQUIVALENCE

Записывается в виде:

EQUIVALENCE (A,B)

Этот оператор устанавливает, что один и тот же объект в оперативной памяти ЭВМ может фигурировать под разными именами, то есть осуществляется эквивалентирование памяти.

114

Примеры:

DIMENSION A(6,5),B(5),E(30)

EQUIVALENCE (A(1,1),B(1))

C=B(2) Или можно было записать: C=A(2,1)

EQUIVALENCE (A(1,1),E(1))

Одномерный массив Е содержит те же данные, что и двухмерный массив А, расположенный по столбцам. Для эквивалентирования указываются начальные адреса обоих объектов.

Пример эквивалентирования текстовых переменных:

CHARACTER*20 A,B*5 EQUIVALENCE (A(1:1),B(1:1))

В результате эквивалентирования первые пять символов из переменной А будут соответствовать переменной В.

EQUIVALENCE (A(11:15),B(1:5))

Пять символов с 11 позиции по 15 позицию переменной А будут соответствовать переменной В. Или можно эту строку записать следующим образом: EQUIVALENCE (A(11:11),B(1:1)).

Правило:

Элементы списка, находящиеся в операторе EQUIVALENCE не могут быть в списке формальных параметров и списке оператора COMMON.

Пример эквивалентирования комплексных переменных:

COMPLEX D(5)

DIMENSION E(8) EQUIVALENCE (D(2),E(1))

Представим графически это эквивалентирование:

Массив D:

 

d1

 

d2

d3

 

 

d4

 

d5

 

д.ч.

м.ч.

д.ч.

м.ч.

д.ч.

м.ч.

д.ч.

м.ч.

д.ч.

м.ч.

Массив Е:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

e1

 

e2

e3

 

e4

e5

 

e6

e7

 

e8

где

д.ч. – действительная часть комплексного числа;

 

м.ч. – мнимая часть комплексного числа.

Из рисунка видно, что элемент e1 соответствует действительной части элемента d2, а элемент e2 соответствует мнимой часть элемента d2 и т.д.

51. Результаты арифметических операций

ввыражениях с данными разного типа

Вэтой главе рассмотрим, что будет происходить с выражениями, в которых участвуют переменные разных типов (INTEGER, REAL, COMPLEX).

Общий вид выражения:

C=A*B ,где А – первый операнд; В – второй операнд.

115

В качестве арифметических операций могут быть операции сложения, вычитания, произведения и частного.

Нагляднее всего использовать в качестве объяснения таблицу:

 

 

Первый операнд

 

 

Integer

Real

Complex

 

Integer

Integer

Real

Complex

 

 

Второйоперанд

 

 

 

 

Real

Real

Real

Complex

 

 

 

 

 

 

 

 

Complex

Complex

Complex

Complex

 

 

 

 

 

 

 

Если в арифметической операции участвуют вещественное число (REAL) и комплексное (COMPLEX), то результатом будет число комплексного типа. Аналогичный результат будет, если участвуют целое (INTEGER) и комплексное; два комплексных.

Пример:

COMPLEX A, B, C, D, F A=(1., –2.)

B=(3.,4.)

D=A+5. Переменная D=(6.,–2.) E=A–5. Переменная E= –4.

Здесь из комплексного числа А берётся действительная часть (1.), из неё вычитается 5 и полученный результат –4 будет вещественного типа. D=E+2. Переменная D=(–2.,0.)

Переменной комплексного типа D присвоится значение вещественного типа Е -2., тогда в действительную часть комплексного числа D запишется –2, а мнимая часть примет значение, равное 0.

F=CSQRT(D)

Результатом будет комплексное число.

F=SQRT(B) Переменная F=(1.73,0.)

Будет извлекаться корень квадратный из действительной части комплексного числа В и результат присвоится действительной части комплексного числа F. Для того, чтобы результат был комплексного типа, необходимо использовать и функцию CSQRT комплексного типа.

F=CSQRT(B).

116

52. Файлы прямого доступа

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

Файлы прямого доступа имеют записи фиксированной длины. При чтении или вводе информации необходимо следить, чтобы размер обрабатываемой информации не превышал длины записи. Если всё-таки произойдёт превышение, то наступит сбойная ситуация. При открытии файла оператором OPEN по умолчанию считается, что открываемый файл является файлом последовательного доступа, а чтобы указать, что файл имеет тип прямого доступа – необходимо записать в операторе OPEN:

OPEN (4,FILE=’DATA’, ACCESS=’DIRECT’, RECL=20, FORM=’FORMATTED’)

где ACCESS – определяет способ доступа к файлу: а) ’DIRECT’ – прямой доступ;

б) ’SEQUENTIAL’ – последовательный доступ. По умолчанию, без использования ключевого слова ACCESS предусмитрен последовательный доступ.

RECL – длина каждой записи в файле, байт;

 

 

FORM – форма передачи данных:

 

 

а) UNFORMATTED – бесформатный способ записи;

 

б) FORMATTED – форматный способ записи;

 

 

в) BINARY – двоичный способ записи.

 

 

Для этого примера данные будут располагаться в файле в виде:

 

 

20

40

60

1-я запись 2-я запись

3-я запись

4-я запись

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

Например:

READ (4, 6, REC=3) I, J, K1, K2

REC=3 означает чтение записи номер три (расположена с 40 по 60

позицию).

6FORMAT (4I5)

Читаем из файла с именем DATA по формату 4I5 запись номер 3. Считанные данные помещаем в переменные I, J, K1, K2.

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

READ (4,6) M1,M2,К1,К2

то чтение произойдет из следующей, четвертой записи. Затем можно снова прочитать запись номер 3

READ (4, 6, REC=3) I1, J1, K3, K2

Номер записи может быть переменной целого типа и может изменяться в цикле типа DO.

117

Файлы прямого доступа используются для создания баз данных и для работы с базами данных. В файле прямого доступа можно изменять содержание любой записи, при этом содержание других записей в файле не меняется (в файле последовательного доступа, если мы запишем информацию в середину файла, то информация, следующая далее, уничтожается).

53. Способы передачи форматных записей

Передача форматных записей осуществляется следующими способами:

WRITE (*, FMT=метка) список

FMT – ключевое слово, которое назначает метку оператора FORMAT, описывающего порядок вывода информация из списка.

* – вывод на системное устройство (дисплей).

WRITE (*,*)

Ключевое слово FMT может быть опущено.

WRITE (*, FMT=9) A, B или, что аналогично: WRITE (6, 9) A, B

9 FORMAT (1X,’A=’, F8.3,’ B=’, F11.4)

Вместо метки оператора FORMAT в операторе вывода может быть указана текстовая константа, которая содержит текст оператора FORMAT:

WRITE (6,’(1X,’A=’,F8.3,’ B=’,E11.4)’) A, B

содержимое оператора FORMAT список

54. Теория ошибок

Рассмотрим из-за чего в «правильно работающей» программе могут получаться неточные или совсем неправильные данные.

х – число; Дх – его ошибка;

Дх

дх = х – относительная ошибка.

В операциях сложения:

х3 = х1 + х2

Дх

3

= Дх

+ Дх

2

,

при сложении чисел

происходит сложение их ошибок.

 

 

 

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

х3

 

 

 

 

х3

 

В операциях умножения: х3

= х2 * х1

 

Дх3 =

 

Дх1

+

Дх2 .

х1

 

х2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

При делении: х

3

=

х

1

 

Дх

3

=

х2

Дх1 +

х1

Дх2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

х2

 

х22

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

При возведении вещественного числа в целую и вещественную степень, мы получим разный результат, но в простом случае это расхождение будет в 9–10 знаке после запятой.

B=5.7

A=5.7

B1=B**2=…

A1=A**2.=… IF(A1.EQ.B1) THEN …

При сравнении переменных оператором IF, получим значение TRUE.

118

Однако если А1 и В1 являются результатом длительных вычислений (вычисление суммы, например) с использованием библиотечных программ ЭВМ для вычисления функций типа log, eхp, tg, sin, th, которые вычисляются с помощью разложения в бесконечный ряд, то окончательная ошибка будет возрастать. На некотором этапе может возникнуть ситуация, когда различие между переменными А1 и В1 обнаружится в 7 знаке после запятой. При этом оператор сравнения этих переменных не выполнится (результат сравнения будет равен FALSE). Если в алгоритме работы программы должна предусматриваться ситуация, когда А1 должна быть равна В1, то вместо IF(A1.EQ.B1) с ранее заданной точностью можно записать:

IF(ABS(A1-B1).LT.1.E–6) THEN …

Чтобы снизить погрешности результатов при выполнении вычислений, следует:

избегать вычитания близких чисел;

избегать деления больших по модулю чисел на малые числа, особенно, если последние имеют невысокую точность;

сложение (вычитание) длинной последовательности чисел начинать с меньших чисел;

стремиться к уменьшению числа операций;

55. Вывод картины распределения магнитного поля

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

Если в исследуемом объеме выделить, к примеру, поверхность или плоскость, в каждой точке этой поверхности посчитать значение поля и запомнить его в двухмерном массиве, то очень полезной была бы программа, которая двухмерный массив с расчетами представила бы в виде картинки. Если весь диапазон значений поля от минимального до максимального разбить на 10 градаций и каждую градацию выводить текстовой константой в виде цифр от 0, 1, 2, … до 9, то каждое число двухмерного массива можно отобразить одним символом. Например, цифра 9 будет обозначать, что значение поля в данной точке лежит в пределах от 0,9 до 1,0 от диапазона максимум-минимум. Если весь диапазон разбить на 20 градаций и наряду с цифрами вставить текстовые константы, например: точка, 0, запятая, 1, двоеточие, 3 и т.д., то картинка будет читаться значительно лучше, а каждый символ будет отображать значение поля с точностью 5%.

Построение картинки поля продемонстрируем на примере расчета магнитного поля двух проводников с током.

Индукция магнитного поля бесконечного проводника Р с током I на расстоянии R от проводника определяется по формуле:

B =

µµ0

 

2I

, где

µ =1 µ0 = 4π 107

 

 

4π

 

R

 

119

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

x =Tx Px y =Ty Py

R = ∆x2 +∆y2 sinϕ = ∆y / R cosϕ = ∆x / R Bx = B sinϕ By = −B cosϕ

Подпрограмма расчета магнитного поля от бесконечного проводника будет иметь вид:

SUBROUTINE POLPR(XP,YP,XT,YT,TOK,BX,BY)

DX=XT-XP

DY=YT-YP

R=SQRT(DX*DX+DY*DY)

SFI=DY/R

CFI=DX/R

B=2.*TOK*1.E-7/R

BX=B*SFI

BY=-B*CFI

RETURN

END

При суперпозиции полей от двух и более проводников суммарное поле определяют сначала сложением соответствующих составляющих, а затем вычислением значения модуля суммарной индукции. Например, при индукции В1 и В2 от двух проводников

120