Программирование на алгоритмическом языке FORTRAN. Использование управляющих операторов и конструкций DO-циклы, EXIT, CYCLE, STOP, PAUSE на примере задач экологии

Программирование вычислительных процессов на языке FORTRAN для обеспечения взаимодействия системы "Человек-Производство-Природа". Использование массивов для составления циклов подсчета уровня экологического загрязнения, затрат на переработку отходов.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 30.05.2014
Размер файла 2,0 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Министерство образования и науки Российской Федерации

Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования

Новосибирский государственный технический университет

Кафедра инженерных проблем экологии

КУРСОВАЯ РАБОТА

по дисциплине «Информатика»

Тема:

Программирование на алгоритмическом языке FORTRAN. Использование управляющих операторов и конструкций DO-циклы, EXIT, CYCLE, STOP, PAUSE на примере задач экологии

Выполнил студент ФЛА

группы СЭ-31 Сергеев С.А.

Проверил: Голубева А.О.

Новосибирск - 2014

Оглавление:

  • Введение

Задание 1. Табулирование функций

Задание 2. Программирование ветвящихся вычислительных процессов

Задание 3. Программирование циклических вычислительных процессов

Задание 4. Использование массивов

Задание 5. Решение нелинейных уравнений

  • Вывод

Введение

В наше время, для решения экологических проблем, возможно использование программирование на разных языках, в частности на языке программирования "FORTRAN". Суть данного подхода заключается в составлении циклов подсчета уровня загрязнения, затрат на переработку отходов и других важных расчетов.

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

Примерами таких алгоритмов являются DO-циклы, с помощью которых появилась возможность подсчета, управляющие операторы STOP, PAUSE - которые в любой момент времени могут приостановить любые функции автоматизированного производства.

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

Задание 1. Табулирование функций

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

Задание: Получить таблицы значений шести функций в приложениях: Microsoft Excel, Mathcad и Fortran. По полученным данным построить графики функций. По таблицам значений, полученных в Fortran, построить графики функций в Excel.

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

При записи арифметических выражений в Фортране используются следующие арифметические операции и функции (в порядке возрастания приоритета):

- , + -- вычитание и сложение;

* , / -- умножение и деление;

** -- возведение в степень;

COS(x) -- cos(x) SIN(x) -- sin(x)

TAN(x) -- tg(x) ATAN(x) -- arctg(x)

ALOG(x) -- ln(x) ALOG10(x) -- lg(x)

EXP(x) -- exp ABS(x) -- |x|

SQRT(x) -- кореньx INT(x) -- целая часть x.

ASIN(x) - arcsin(x) ACOS(x) - arcos(x)

SEC(x) - sec(x)

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

Функция 1

Текст программы

program p1

real a, b, h, x, y ; integer I, N

Open (1, file ="prog1.txt")

a = -3.14; b = 3.14

print*, "N=?"

read*, N

h=(b-a)/N

Do I=0,N

x=a+h*I

y = -3*sin(5*x)

PRINT 2, X,Y; WRITE(1, 2) X,Y

2 FORMAT (' X=',F8.1,3X,'Y=',F8.4)

enddo

end program p1

Графики MATHCAD и EXCEL:

Функция №2

Текст программы:

program p1

real h, x, y, a, b

integer I, N

Open (1, file ="prog2.txt")

a=-10; b=10

print*, "N=?"

read*, N

h=(b-a)/N

Do I=0,N

x=a+h*I; y = x/5 - 1

PRINT 2, X,Y; WRITE(1, 2) X,Y

2 FORMAT (' X=',F8.1,3X,'Y=',F8.4)

enddo

end program p1

Графики MATHCAD и EXCEL:

Функция 3

Текст программы:

program p1

real h, x, y, a, b

integer I, N

Open (1, file ="zad1.txt")

a=-2.4; b=3.4

print*, "N=?"

read*, N

h=(b-a)/N

Do I=0,N

x=a+h*I

y = 2-2*SQRT(9-(x**2)+x)/3

PRINT 2, X,Y; WRITE(1, 2) X,Y

2 FORMAT (' X=',F8.1,3X,'Y=',F8.4)

enddo

end program p1

Графики MATHCAD и EXCEL:

Функция 4

Текст программы:

program p1

real h, x, y, a, b

integer I, N

a=-5.

b=6.

Open (1, file ="zad1.txt")

print*, "N=?"

read*, N

h=(b-a)/N

Do I=0,N

x=a+h*I

y = (1/x)-(1/2)

PRINT 2, X,Y; WRITE(1, 2) X,Y

2 FORMAT (' X=',F8.4,3X,'Y=',F8.4)

enddo

end program p1

Графики MATHCAD и EXCEL:

Функция 5

Текст программы:

program p1

real h, x, y, t, a, b

integer I, N

Open (1, file ="zad1.txt")

a = -1; b = 2

print*, "N=?"

read*, N

h=(b-a)/N

Do I=0,N

t = a+h*I

x = tan(t)

y = 2/(1+cos(t))

PRINT 2, t,X,Y; WRITE(1, 2) t,X,Y

2 FORMAT ('t='F8.2,3X, 'X=',F8.1, 3X, 'Y=',F8.4)

enddo

end program p1

Графики MATHCAD и EXCEL:

Функция 6

Текст программы:

program p1

REAL, PARAMETER :: PI=3.141593

real h, x, y, a, b

integer I, N

Open (1, file ="zad1.txt")

a =0

b =2*PI

print*, "N=?"

read*, N

h=(b-a)/N

Do I=0,N

x = a+h*I

p = 1+cos(x)

PRINT 2, X, p; WRITE(1, 2) X, p

2 FORMAT ('X=',F8.4, 3X, 'p=',F8.4)

enddo

end program p1

Графики MATHCAD и EXCEL:

Вывод

По каждой из 6 предложенных были написаны тексты программ FORTRAN, выведены значения неизвестных, записаны эти значения в отдельный текстовый файл и построены графики на некоторых интервалах. Следует отметить, что графики в табличном редакторе Microsoft Excel и математическом редакторе MathCad идентичны.

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

Задание 2. Программирование ветвящихся вычислительных процессов

Цель работы: Получить навыки программирования ветвящихся вычислительных процессов. Изучить условные операторы, переменные логического типа, логические отношения и операции.

Задание: Пусть на плоскости x, y задана область D. Требуется определить «попадает» ли точка с координатами (x, y) в область D или нет. Если попадает, то необходимо вычислить функцию f1 и переменной M, значение которой является признаком «попадания» или «непопадания», присвоить значение M=1. В противном случае вычислить f2 и положить M=2.

При составлении программы на Фортране для анализа «попадания» или «непопадания» точки в область D можно составить только одно логическое выражение с использованием следующих логических отношений и операций:

отношения:операции

< -- .LT. -- меньше,

<= -- .LE. -- меньше или равно, .NOT. -- отрицание,

> -- .GT. -- больше, .AND. -- коньюнкция («и»),

>= -- .GE. -- больше или равно, .OR. -- дизьюнкция («или»),

== -- .EQ. -- равно, ..EQV.-- эквивалентность,

/= -- .NE. -- не равно. .NEQV.-- неэквив.

Результатом вычисления отношений является одно из двух логических значений .TRUE. --истина или .FALSE. -- ложь. С помощью логических операций можно создавать сложные логические выражения, которые также могут принимать только два значения .TRUE. или .FALSE.

Например, точка (x, y) «попадает» в область D (см. рис. 1), если логическое выражение

X<=0..AND.Y<=X+4..AND.Y>=-X-

4..OR.X>0..AND.Y>=0..AND.X**2+Y**2<=4. принимает значение

.TRUE. -- истина.

Ветвящиеся вычислительные процессы в Фортране можно запрограммировать с помощью следующих условных операторов IF.

Логический оператор IF имеет вид

IF(L) S

Здесь: L - логическое выражение, S - исполняемый оператор.

Если логическое выражение L истинно, то выполняется оператор S , если оно ложно, то выполнится следующий за IF оператор, а S не выполняется.

Блочный оператор IF имеет вид

IF(L) THEN

< блок операторов 1 >

ELSE

< блок операторов 2 >

END IF

Правило выполнения: если логическое выражение L истинно, то выполняется < блок операторов 1 >, а если оно ложно, то выполняется < блок операторов 2 >. При отсутствии альтернативы < блок операторов 2 > вместе с ELSE опускается.

Приведем пример Фортран-программы, в которой для анализа «попадания» или «непопадания» точки используется логическая переменная C. Этой переменной присваивается значение логического выражения. Если C=.TRUE., тов блочном операторе IF (C) THEN выполняется первый блок операторов, а если C=.FALSE. , то второй блок (стоящий после ELSE).

Область:

Текст программы

PROGRAM LAB2

LOGICAL C; REAL X, Y, Z

INTEGER I, M

DO I=1,8

PRINT *, ' X=?, Y=? '; READ '(2F7.3)', X,Y

C=Y<=2..AND.Y>=0..AND.X>=-1..AND.X<=1..OR.&

&X>=0..AND.Y<=0..AND.(9/4)*X**2+Y**2<=9.

IF(C) THEN

PRINT *, ' YES ' ; Z=F1(X,Y); M=1

ELSE

PRINT *, ' NO ' ; Z=F2(X,Y); M=2

END IF

PRINT 2, X,Y,Z,C,M

END DO

2 FORMAT (' X=',F7.3,3X,'Y=',F7.3,3X,'Z=',F11.4,3X,'C=', L2,3X,'M=',I2/)

END PROGRAM LAB2

FUNCTION F1(X,Y)

F1=sin(x**2+y**2)/(x**2+y**2)

END FUNCTION F1

FUNCTION F2(X,Y)

F2=EXP(5.*x)+18.*cos(y)

END FUNCTION F2

Вывод

В данной задаче была написана программа, которая, при вводе данных с клавиатуры, проверяет, удовлетворяют ли эти значения условию принадлежности к интервалу значений. Если они входят в область определения, то подсчет производится по формуле №1, а при неудовлетворении условия расчет производится по формуле №2. Также выводится номер формулы и логическое значение принадлежность "TRUE" или "FALSE". fortran затрата экологический отход

Задание 3. Программирование циклических вычислительных процессов

Цель работы: Получить навыки программирования циклических вычислительных процессов. Изучить циклы с шагом и циклы с условием

Задание

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

2. Составить алгоритм вычисления с заданной точностью суммы конечного числа членов ряда в указанном диапазоне изменения параметра x с заданным шагом. Для получения шага диапазон изменения x разделить на 10.

3. Составить программу решения задачи. В программе для каждого значения x предусмотреть вычисление как приближенной, так и точной суммы соответствующего ряда y по приведенной в таблице 3 формуле.

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

Работа содержит задачу, которая сводится к нахождению конечной суммы ряда при различных значениях x. Каждое слагаемое зависит от величины x и номера n, определяющего место этого слагаемого в сумме. Ряд подобран таким образом, чтобы при бесконечно большом числе членов ряда их сумма в указанном диапазоне изменения величины x была конечным числом, зависящим только от x, т.е. ряд является сходящимся.

Например,

.

Первый член этого ряда при n =0 равен x , второй член при n =1 равен , третий член равен и т.д. В сумме при бесконечно большом числе членов они дают функцию sin(x) . Видно, что при ограниченных значениях x, сравнимых по модулю с единицей, каждый последующий член этого знакопеременного ряда существенно меньше предыдущего, поэтому ряд быстро сходится и для вычисления суммы ряда с необходимой точностью достаточно просуммировать относительно небольшое число членов ряда. Например, суммирование можно прекратить, когда текущий член ряда станет по абсолютной величине меньше заданного малого положительного числа е, определяющего погрешность вычисления суммы ряда.

Формула общего члена суммы принадлежит к одному из следующих типов:

а) ;

б) ;

в) .

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

.

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

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

, где

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

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

Запишем ряд в виде

,

где ,

здесь .

Общий член ряда относится к типу (а), т.е. для вычисления члена суммы целесообразно использовать рекуррентные соотношения, выражая каждый последующий член суммы через предыдущий. Суммирование начинается с n=1, при этом начальные значения c =?1, b =1.

Для каждого значения x, задаваемого во внешнем цикле, вычисление суммы ряда выполняется во внутреннем цикле, при прохождении которого номер члена ряда увеличивается на 1, а сумма изменяется по формуле S =S +a, где a вычисляется как произведение c и b. Начальное значение суммы в данном примере равно нулю S=0. Суммирование в глухом цикле DO необходимо продолжать до тех пор, пока величина a не станет по абсолютной величине меньше е. Вычисление постоянной по модулю знакопеременной величины cn можно организовать в цикле по формуле c =?c. Для вычисления величины (2n)! в знаменателе необходимо во внутреннем цикле, где n каждый раз увеличивается на 1, число 2n умножать на число (2n ?1), так как факториал - это, по определению, произведение последовательных натуральных чисел.

Текст программы

PROGRAM LAB3

REAL B, EPS, H, S, X, X0, XK, Y

INTEGER I, N

OPEN (1, FILE='LAB3.TXT')

X0=0.1; XK=1.; EPS=0.0001

H=(XK-X0)/10.

DO I=0,10

X=X0+H*I ; N=1; B=1.; S=1.

DO

B=B*X**2/(2.*N*(2.*N-1.))

N=N+1; S=S+B;

IF (ABS(B) < EPS) EXIT

END DO

Y=(1./2.)*(exp(x)+exp(-x))

PRINT 2, X,S,Y,N; WRITE (1,2) X,S,Y,N

END DO

2 FORMAT (' X=',F6.3,3X,'S=',F10.3,3X,'Y=',F10.3,3X,'N=',I5)

END PROGRAM LAB3

Вывод

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

Задание 4. Использование массивов

Цель работы. Изучить особенности описания и использования массивов в программе.

Задание. Разработать алгоритм решения выбранной по номеру варианта задачи, составить, отладить и просчитать программу с использованием массивов.

Наряду с простыми переменными в алгоритмических языках используются переменные с индексами, называемые массивами. Массив - это упорядоченная последовательность величин, обозначаемая одним именем. Величины, из которых состоит массив, называются элементами массива. Элемент массива обозначается с помощью имени массива и индексов, следующих в круглых скобках за именем массива. Индексы отделяются друг от друга запятыми и указывают положение элемента в массиве. Индексов может быть 1, 2 и т.д. вплоть до 7. Соответственно массивы бывают одномерные, двумерные и т.д.

Все массивы, используемые в программе, должны быть описаны, так как для хранения элементов массива в определенной последовательности отводится необходимый объем памяти. При описании указываются имя массива и затем в круглых скобках через запятую граничные пары, т.е. разделенные двоеточием минимальные и максимальные значения соответствующего индекса. При отсутствии двоеточия минимальное значение соответствующего индекса в Фортране по умолчанию равно единице. Для описания массивов в Фортране используются операторы описания типа переменных (REAL, INTEGER, COMPLEX, LOGICAL, CHARACTER, DOUBLE PRECISION), а также атрибут и оператор DIMENSION.

Рассмотрим несколько примеров описания массивов. Значения граничных пар можно задавать с использованием именованных констант и константных выражений.

INTEGER, PARAMETER :: N=4

REAL, DIMENSION :: A(N,N), B(N), K(N+1,N+1), C(0:N)

В этом примере оператор REAL c атрибутом DIMENSION описывает двумерный вещественный массив A, содержащий 16 элементов; одномерный вещественный массив B, содержащий 4 элемента; двумерный вещественный массив K, содержащий 25 элементов, и одномерный вещественный массив C, содержащий 5 элементов.

Объекты с общими атрибутами можно группировать в единый список, например, следующий оператор описывает два двумерных вещественных массива D и E, каждый из которых имеет 3 строки и 4 столбца.

REAL, DIMENSION (3,4) :: D, E

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

INTEGER MIN(2,2), MAX(10)

REAL Q(5), SUMMA(3,3)

Здесь: MIN и MAX - целые массивы, содержащие 4 и 10 элементов соответственно; Q и SUMMA - вещественные массивы, содержащие 5 и 9 элементов.

Оператор DIMENSION также может использоваться для описания массивов, например, для описания одномерного вещественного массива F из 10 элементов

REAL F

DIMENSION F(-2:7)

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

В Фортране список операторов ввода READ и вывода PRINT или WRITE может содержать как имена простых переменных и элементов массива, так и имена массивов. В последнем случае вводу-выводу подлежат все элементы массива в «естественной последовательности» (т.е. сначала растет первый индекс, затем второй и т.д.). Так, если в программе описан массив A(2,2) и имеется оператор ввода READ *, A, то численные значения необходимо задавать в следующей последовательности: A(1,1), A(2,1), A(1,2), A(2,2), т.е. любая матрица вводится по столбцам. Для изменения порядка ввода-вывода или если требуется передать только часть элементов массива можно использовать неявную форму оператора цикла. Например, ввод матрицы A(2,2) по строкам осуществляет оператор READ *, ((A(I,J), J=1,2), I=1,2).

Не следует забывать, что в Фортране функции «что вводить (выводить)» и «как вводить (выводить)» распределены между операторами ввода-вывода и оператором FORMAT.

Если в программе предусмотрен ввод исходных данных с клавиатуры, то в процессе отладки приходится задавать одни и те же численные значения много раз. Поэтому, когда исходных данных достаточно много, удобнее записать их перед счетом программы в файл данных, а в программе предусмотреть оператор, считывающий данные из файла данных. Кроме того, результаты также имеет смысл выводить в файл данных, чтобы иметь возможность получить распечатку результатов счета. Обращение к файлу данных производится по его логическому номеру N, указанному в операторах READ (N,…) или WRITE (N,…). С помощью оператора OPEN можно как назначать логические номера уже имеющимся файлам, так и создавать новые файлы с указанием соответствующего логического номера, например, OPEN (1, FILE='LAB4.TXT'). После выполнения этого оператора файлу LAB4.TXT будет соответствовать логический номер 1. Файл LAB4.TXT создается в папке проекта либо предварительно до запуска программы на счет, либо в процессе работы программы в момент выполнения оператора OPEN. Для завершения доступа к файлу используется оператор CLOSE.

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

В Фортран встроено большое число функций, позволяющих:

· выполнять вычисления в массивах, например, суммировать элементы массива или находить его максимальный элемент;

· преобразовывать массивы, например, можно получать из одномерного массива двумерный;

· получать справочные данные о массиве (размер, форма и значения границ каждого измерения).

Задан массив В(4). Вычислить элементы матрицы D(4,4) по формулам

Найти максимальные элементы D и B. Печатать B, D.

Текст программы

Program lab4

integer::I,J

integer,parameter::N=4

real,dimension(N,N)::D

real,dimension(N)::B

real::S, k1, k

PRINT 1

1 FORMAT ('vvedite 4islennoe zna4enie elementov massiva B(4)')

READ *, B

DO I=1,4; DO J=1,4

IF (0<=(abs(B(I)+B(J)))<3.14) THEN

D(I,J)=sin(B(i)+B(J))

ELSE IF (3.14<=(abs(B(I)+B(J)))<6.28) THEN

D(I,J)=cos(B(i)+B(J))

else

D(I,J)=sin(B(I)-B(J))

END IF

END DO

END DO

PRINT 10, (D(I,1:N),I=1,N)

10 FORMAT ('Dvumernii massiv D'/4(4F10.5/))

PRINT 4, B

4 FORMAT ('Odnomernii massiv B'/4F10.3)

k=maxval(d); S=maxval(b)

print*, "S=", S

print*, 'k=', k

end

Вывод

Данная программа считает двумерный массив (Матрицу 4х4) по заданным формулам и введенным с клавиатуры значениям одномерного массива (вектора), а также выводит на экран максимальные значения этих массивов.

Задание 5. Решение нелинейных уравнений

Задание: Используя методы половинного деления, найти корни нелинейных уравнений f1(x)=0.

Решение нелинейных уравнений вида f(x)=0 заключается в отыскании одного или нескольких корней, т.е. таких значений аргумента x, для которых функция f(x) обращается в нуль.

Решение нелинейных уравнений обычно состоит из двух этапов:

1) Отделение, или локализация корней, т.е. отыскание таких отрезков [a,b] (одного или нескольких), внутри которых имеется только один корень нелинейного уравнения.

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

Локализовать корень уравнения можно также программно, вычисляя функцию f(x) для значений x, изменяющихся с некоторым заданным шагом h. При этом отыскиваются два таких соседних значения x, для которых f(x) имеет противоположные знаки. Алгоритм отделения корня удобно оформить в виде подпрограммы. В качестве параметров подпрограммы можно выбрать следующие: F,X0,Xк,H,A,B,IER.

Входные параметры:

F - имя внешней функции f(x);

X0,Xк - соответственно левая и правая границы отрезка оси x, на котором отделяется корень уравнения;

H - шаг перебора аргумента функции.

Выходные параметры:

A,B - соответственно левая и правая границы отрезка [a,b], содержащего первый, считая от точки X0 вправо, корень нелинейного уравнения;

IER - код ошибки. IER=0, если на участке от X0 до Xк с шагом H найден отрезок [A,B], содержащий корень уравнения; IER=1, если корень не локализован.

Алгоритм отделения корня нелинейного уравнения может быть следующим:

1) Зададим IER=1, т.е. предполагаем, что на отрезке от X0 до Xк корней нет. В дальнейшем проверим, так ли это.

2) Зададим начальное значение аргумента функции X=X0.

3) Вычислим значение функции в точке X: Y=F(X).

4) Изменим значение аргумента функции на величину шага : X=X+H .

5) Проверим, лежит ли X внутри [X0,Xк]: если X>Xк , то возвращаемся в вызывающую программу. В этом случае отрезок [A,B] не найден,IER=1.

6) Вычислим значение функции в новой точке X: Z=F(X).

7) Проверим, изменила ли функция знак при последнем изменении аргумента. Если не

изменила, то опять меняем X : если Y*Z>0 идти на 4.

8) В противном случае определим границы отрезка [A,B] по формулам A=X-H, B=X,

изменим код ошибки IER=0 и вернемся в вызывающую программу.

МЕТОД ПОЛОВИHHОГО ДЕЛЕHИЯ состоит в построении последовательности вложенных отрезков, на концах которых функция принимает значения разных знаков. Каждый последующий отрезок получают делением предыдущего пополам. Процесс построения последовательности отрезков позволяет найти корень уравнения f(x)=0 с любой заданной точностью.

В качестве параметров подпрограммы метода половинного деления можно выбрать

следующие: F,BL,AL,EPS,C,A,IER.

Входные параметры:

F - имя внешней функции f(x);

AL,BL - соответственно левая и правая граница отрезка, содержащего один корень уравнения f(x)=0;

EPS - точность вычисления корня.

Выходные параметры:

C - корень уравнения (если он найден);

A - количество итераций, которое потребовалось выполнить для вычисления корня с заданной точностью;

IER - код ошибки. IER=0, если корень найден; IER=1, если A>B или на отрезке [A,B] нет корня, т.е. если F(A)*F(B)>0.

Алгоритм метода половинного деления:

1) Зададим код ошибки IER=1.

2) Проверим, правильно ли заданы исходные данные: если F(A)*F(B)>0 или A>B, то возвращаемся в вызывающую программу.

3) Зададим текущие границы отрезка, содержащего корень A1=A, B1=B; зададим начальное число итераций A=0 и IER=0; вычислим значение функции в точке A1: Y=F(A1).

4) Вычислим середину отрезка [A1,B1]: C=.5*(A1+B1); изменим счетчик итераций на единицу : N=N+1.

5) Если длина текущего отрезка [A1,B1] меньше заданной точности, то возвращаемся в вызывающую программу.

6) Проверим, внутри какого из отрезков [A1,C] или [C,B1] лежит корень уравнения. Если корень лежит внутри [A1,C], то изменяем правую текущую границу отрезка, содержащего корень, в противном случае - левую: если F(A1)* F(C)<0, то B1=C, иначе A1=C; итерационный процесс повторяется с пункта 4.

Уравнение:

Текст программы

function F(x)

F=((x-3.)*cos(x))-1.

end

program zadanie5

real C1

integer ier

external F

x0=0.

do

call otdel(F, x0, 6., 0.1, a, b, ier)

read (*,*)

call mpd(F, a, b, 1e-5, C1, ier1)

print 2, a, b, C1

2 FORMAT (' a=',F8.1, 3X, 'b=', F8.1, 3X, 'X=', F8.1)

enddo

end

subroutine otdel(f, x0, xk, h, a, b, ier)

real x0, xk, h, a, b, x, y, z

integer ier

external F

x=x0; y=F(x); ier=1

do

x=x+h

if (x>=xk) return

z=F(x)

if (y*z<0.) exit

enddo

a=x-h; b=x; ier=0

end

subroutine mpd(F, a, b, eps, c, ier)

real F, a, eps, c, al, bl, y

integer ier

external F

ier=1

if (F(a)*F(b)>0.) return

al=a; bl=b; y=F(al); ier=0

do

c=(al+bl)/2.

if (y*F(c)>0.) then

al=c

else

bl=c

endif

if (bl-al<eps) exit

enddo

end

Проверка в MATHCAD:

Вывод

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

Размещено на Allbest.ru


Подобные документы

  • Особенности параллельного программирования высокопроизводительных многопроцессорных или многомашинных вычислительных комплексов. Основные положения и понятия стандартов MPI и OpenMP. Средства компиляции параллельных операторов для языков C и Fortran.

    лекция [177,9 K], добавлен 22.10.2014

  • Степень переносимости исходного кода между различными платформами. Первый язык программирования высокого уровня, имеющий транслятор. Программа Fortran, ее версии, отличия от других программ. Составление программ на языке программирования Fortran.

    курсовая работа [45,5 K], добавлен 04.06.2014

  • Основные приёмы и возможности алгоритмических языков программирования Fortran. Табуляция функции на языке Fortran, ее графический вид и блок-схема алгоритма. Выполнение расчетов на алгоритмическом языке Фортран. Текст (листинг) Fortran-программы.

    курсовая работа [31,9 K], добавлен 15.02.2011

  • Характеристика вычислительной системы и инструментов разработки. Программирование на языке Pascal в среде Turbo Pascal и на языке Object Pascal в среде Delphi. Использование процедур, функций, массивов, бинарного поиска. Создание базы данных в виде файла.

    отчет по практике [2,1 M], добавлен 02.05.2014

  • Машинные коды и ассемблер. Первые языки программирования высокого уровня. Язык программирования FORTRAN. Достоинства и недостатки ALGOL. Научные и бухгалтерские программы. Основные принципы, которые соблюдались при создании языка программирования Basic.

    курсовая работа [407,4 K], добавлен 21.06.2014

  • Программирование на языке Паскаль: алфавит, решение задач, простейшие программы, разветвляющие программы, циклические программы, ввод-вывод, массивы, подпрограммы, строковые данные, записи, файлы, использование библиотеки CRT, графика в Паскале.

    учебное пособие [211,1 K], добавлен 30.03.2008

  • Характерные черты программирования на алгоритмическом языке СИ (алфавит, операции, специфика операторов, комментарии и другие элементы). Аналитический обзор и рассмотрение примеров программ, иллюстрирующих особенности применения основных операторов СИ.

    презентация [251,0 K], добавлен 26.07.2013

  • Методы языка программирования C#. Алгоритмизация и программирование задач на языке высокого уровня C#. Внутренний цикл, ветвление, внешний цикл, вложенные друг в друга структуры ветвления. Вывод элементов массива на экран. Остальные элементы матрицы.

    курсовая работа [250,2 K], добавлен 27.02.2015

  • Понятие вложенных циклов, одномерных и двумерных массивов в программировании. Матрицы и основные действия с ними. Иерархические записи, понятие дерева. Операции с двоичными деревьями, рекурсия, включение и удаление узла. Алгоритм поиска по дереву.

    отчет по практике [507,1 K], добавлен 27.12.2011

  • Создание Windows-приложения на алгоритмическом языке Object Pascal в среде визуального программирования Delphi, которое, как планируется, будет обеспечивать решение специализированных задач по формированию, обработке на ЭВМ и выводу информации.

    курсовая работа [967,6 K], добавлен 20.05.2008

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.