Табулирование и программирование функций
Табулирование и построение графиков функций. Получение таблиц значений шести функций в приложениях: Microsoft Excel, Mathcad и Fortran. Программирование циклических вычислительных процессов. Особенности описания и использования массивов в программе.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | методичка |
Язык | русский |
Дата добавления | 17.04.2013 |
Размер файла | 845,8 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Размещено на http://www.allbest.ru/
Курсовая работа по информатике
Для студентов 1 курса по направлению 280700, 022000
Задание №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.
Таблица 1. Варианты заданий
Размещено на http://www.allbest.ru/
Размещено на http://www.allbest.ru/
Рассмотрим пример.
Дана функция . Областью определения является вся числовая ось от ? ? до + ?. Но вследствие периодичности функции синус достаточно построить график в интервале . Областью изменения функции является интервал .
Каждая пара значений x и y должна быть записана в таблицу результатов счета. Запишем алгоритм решения первой задачи.
1. Зададим тип и значение неизменяемому параметру ?.
2. Опишем тип используемых в программе переменных.
3. Откроем файл для записи значений x и y.
4. Определим начальное a и конечное b значения переменной x.
5. Введем количество строк n для табулирования функции.
6. Вычислим шаг h цикла для изменения переменной x.
7. Организуем цикл с управляющей переменной i целого типа.
8. В цикле вычислим значения переменных x и y.
9. Напечатаем на дисплей значения x и y.
10. Повторим печать значений x и y в файл.
11. Закончим цикл.
В соответствии с алгоритмом составим Фортран-программу:
PROGRAM LAB1
REAL, PARAMETER :: PI=3.141593
REAL A, B, H, X, Y
INTEGER I, N
OPEN(1, FILE='LAB1.TXT')
A=-2./3.; B=2.*(PI-1.)/3.
PRINT *, ' N=?'; READ *, N
H=(B-A)/N
DO I=0,N
X=A+H*I
Y=0.5*SIN(3.*X+2.)
PRINT 2, X,Y; WRITE(1, 2) X,Y
END DO
2 FORMAT (' X=',F8.4,3X,'Y=',F8.4)
END PROGRAM LAB1
Прокомментируем работу программы:
- вначале после ключевого слова PROGRAM объявляется имя программы, которое обязательно должно начинаться с буквы латинского алфавита или символа $ (в общем случае ключевое слово PROGRAM с именем программы может отсутствовать);
- первый оператор задает тип и значение именованной константе PI;
- затем идут два оператора, описывающие тип используемых в программе переменных;
- оператор OPEN назначает логический номер 1 файлу «LAB1.TXT». Указанный файл создается в папке проекта либо предварительно, либо в процессе работы программы в момент выполнения оператора OPEN;
- в следующей строке через точку с запятой записаны два оператора, которые вычисляют значения переменных A и B (обратите внимание на десятичные точки в неименованных константах вещественного типа);
- оператор PRINT выводит на дисплей в свободном формате символьную константу, которая заключена в апострофы. Эта последовательность символов является подсказкой для пользователя;
- оператор READ требует ввода с клавиатуры значения целой переменной N. После нажатия клавиши [Enter] переменной N будет присвоено набранное значение;
- следующий оператор вычисляет значение переменной H;
- оператор цикла DO организует повторение вычислений в теле цикла необходимое число раз при изменении управляющей переменной I от 0 до N с шагом 1 (шаг равен 1 по умолчанию, т.к. его значение не указано);
- операторы в следующих двух строках обеспечивают вычисление арифметических выражений, записанных справа от знака равенства. Результаты присваиваются переменным X и Y;
- оператор PRINT работает под управлением оператора FORMAT с меткой 2. Он выводит на экран сначала символьную константу X=, которая в программе заключена в апострофы, затем числовое значение переменной X по дескриптору F8.4. Далее через три позиции выводится символьная константа Y=, и значение Y также по дескриптору F8.4 , где 8 - общее число позиций для выводимого числа, а 4 - количество позиций для цифр после десятичной точки. В общее число позиций включается знак отрицательного числа «-» и десятичная точка (ноль перед десятичной точкой, как правило, не печатается);
- оператор WRITE повторяет печать значений X и Y в файл «LAB1.TXT» с логическим номером 1 под управлением оператора FORMAT с меткой 2;
- предпоследний оператор END DO ограничивает тело цикла;
- последний оператор END PROGRAM LAB1 ограничивает программный модуль, заканчивая его (LAB1 или PROGRAM LAB1 могут быть опущены). Если имя программы не объявлено, то оно не может присутствовать и в операторе END.
Задание №2. Программирование ветвящихся вычислительных процессов
Цель работы: Получить навыки программирования ветвящихся вычислительных процессов. Изучить условные операторы, переменные логического типа, логические отношения и операции.
Задание: Пусть на плоскости x, y задана область D. Требуется определить «попадает» ли точка с координатами (x, y) в область D или нет. Если попадает, то необходимо вычислить функцию f1 и переменной M, значение которой является признаком «попадания» или «непопадания», присвоить значение M=1. В противном случае вычислить f2 и положить M=2.
В каждом варианте задания область D можно разбить на две подобласти: D1, D2. Подобласть D1 ограничена прямыми линиями, уравнения которых нужно составить. При этом удобно использовать уравнение прямой в отрезках на осях: . Подобласть D2 ограничена кривой второго порядка, уравнение которой указано в задании. Варианты заданий приведены в таблице 2.
Пояснение задачи
1. Для заданного варианта из таблицы нарисовать область D и выписать функции f1(x,y) и f2(x,y) . Записать уравнения, определяющие границы области, и подготовить исходные данные (координаты точек) так, чтобы часть точек находилась внутри области D , а часть -- вне ее (см. рис. 1). При этом для каждой четверти координатной плоскости рекомендуется выбрать по две точки.
2. Создать на компьютере проект для решения поставленной задачи, составить и отладить программу.
3. Для выбранных точек получить и записать результаты счета.
Размещено на http://www.allbest.ru/
Размещено на http://www.allbest.ru/
Пусть область D имеет вид, показанный на рисунке 1, а функции f1 и f2 заданы как .
Прямой x = 0 разобьем область D на две подобласти: D1 и D2 . Уравнения прямых, ограничивающих подобласть D1 , будут: во второй четверти ; в третьей .
Уравнение окружности с центром в начале координат, ограничивающей подобласть D2 при x >0 и y >0 , имеет вид .
Теперь можно записать, что некоторая точка (x, y) «попадает» в область D, если она «попадает» в область D1 или D2 , то есть если x ?0 и y ?x +4 и y??x?4 или x >0 и y ?0 и .
Точка (x, y) «не попадает» в область D, если x ?0 и y >x +4 или x ?0 и y <?x ?4 или x >0 и y < 0или x >0 и .
При выполнении задания можно проводить анализ как «попадания», так и «непопадания» точки в область D.
При составлении программы на Фортране для анализа «попадания» или «непопадания» точки в область 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=X<=0..AND.Y<=X+4..AND.Y>=-X-4..OR.&
&X>0..AND.Y>=0..AND.X**2+Y**2<=4.
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=',E11.4,3X,'C=', L2,3X,'M=',I2/)
END PROGRAM LAB2
FUNCTION F1(X,Y)
F1=ALOG(ABS(X+Y)+1.)
END FUNCTION F1
FUNCTION F2(X,Y)
F2=EXP(1./(ABS(X)+ABS(Y)))
END FUNCTION F2
После окончания программы описаны внутренние процедуры-функции F1 и F2. Эта программа для своего завершения требует ввести координаты 8 точек.
Варианты заданий приведены в таблице 2.
Таблица 2. Исходные данные
Размещено на http://www.allbest.ru/
Размещено на http://www.allbest.ru/
Задание №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 A, B, C, 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; C=-1.; B=1.; S=0.
DO
B=B*(2.*X)**2/(2.*N*(2.*N-1.)); A=C*B
N=N+1; S=S+A; C=-C;
IF (ABS(A) < EPS) EXIT
END DO
Y=2.*(COS(X)**2-1.)
PRINT 2, X,S,Y,N; WRITE (1,2) X,S,Y,N
END DO
2 FORMAT (` X=`,F6.3,3X,'S=`,E10.3,3X,'Y=`,E10.3,3X,'N=`,I5)
END PROGRAM LAB3
Результаты счета выводятся не только на дисплей, но в файл LAB3.TXT. Вывод осуществляется под управлением оператора FORMAT с меткой 2, который формирует таблицу, содержащую для каждого x из указанного диапазона приближенное и точное значения суммы ряда, а также количество просуммированных членов.
Варианты заданий приведены в таблице 3.
Таблица 3. Варианты заданий.
Размещено на http://www.allbest.ru/
Размещено на http://www.allbest.ru/
Задание №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.
Отличительной особенностью Фортрана является развитая система операций с массивами. Операции над массивами и сечениями массивов задают параллелизм действий над компонентами массивов (или массива). Такие средства, с одной стороны, позволяют пользователю лаконично и сжато описать алгоритм обработки массивов и, с другой стороны, дают возможность компилятору генерировать более эффективный код с учетом особенностей конкретного компьютера. Очевидно, что наиболее эффективно использование этих возможностей для вычислительных систем, имеющих аппаратные средства для векторной обработки.
В Фортран встроено большое число функций, позволяющих:
· выполнять вычисления в массивах, например, суммировать элементы массива или находить его максимальный элемент;
· преобразовывать массивы, например, можно получать из одномерного массива двумерный;
· получать справочные данные о массиве (размер, форма и значения границ каждого измерения).
1. Ввод одномерного массива B(8) можно осуществить несколькими способами:
а) READ (1,*) B
Численные значения (8 значений) перед запуском программы на счет записываются через запятую или пробел в файл данных, соответствующий логическому номеру 1. Этот способ наиболее предпочтителен.
б) PRINT 1
1 FORMAT (` INPUT VECTOR B(8)')
READ *, B
После появления на экране монитора текста INPUT VECTOR B(8) численные значения элементов массива вводятся с клавиатуры (8 значений через запятую или пробел).
в) PRINT 1
FORMAT (` INPUT VECTOR B')
DO I=1,8
PRINT 2, I
READ *, B(I)
END DO
FORMAT (` B(`,I2,')=')
Массив вводится с клавиатуры поэлементно по одному значению в строку после появления на экране соответствующей подсказки.
2. Ввод двумерного массива A(4,4)
а) из файла данных построчно с использованием неявной формы цикла
READ (1,*) ((A(I,J), J=1,4), I=1,4)
Перед выполнением программы численные значения записываются в файл данных, соответствующий логическому номеру 1, в четыре строки по четыре элемента в строку через запятую или пробел.
б) из файла данных построчно с использованием сечения массива (простейшей формы индексного триплета)
READ (1,*) (A(I,:),I=1,4)
Файл данных такой же, как и в случае а).
в) с клавиатуры построчно через запятую или пробел
READ *, (A(I,:),I=1,4)
3. Вывод одномерного массива B(4) на экран.
PRINT 5, B
5 FORMAT (` VECTOR B'/4F10.4)
При выводе в файл данных оператор PRINT заменяется на оператор WRITE, например, при выводе двумерного массива A(4,4)
WRITE (1,10) (A(I,:), I=1,4)
10 FORMAT (` MATRICA A'/4(4F10.4/))
4. Суммирование элементов одномерного массива B(10)
а) с использованием встроенной функции SUM
S=SUM(B)
б) по следующему алгоритму: начальное значение суммы принимается равным нулю S = 0, затем в цикле по i от 1 до 10 накапливается сумма
S=0.
DO I=1,10
S=S+B(I)
END DO
5. Произведение элементов одномерного массива B(10) .
а) целесообразно использовать встроенную функцию PRODUCT
P=PRODUCT(B)
б) можно составить алгоритм, аналогичный алгоритму сложения элементов массива, в котором начальное значение произведения необходимо положить равным единице, а операцию сложения заменить произведением
P=1.
DO I=1,10
P=P*B(I)
END DO
6. Пусть требуется определить максимальный элемент массива B из N элементов и его номер K.
а) Определение максимального (или минимального) элемента одномерного массива S =max (b1,b2,…,bn ) и номера k этого элемента выполняется по следующему алгоритму: сначала за максимальный принимается первый элемент массива S = b1 и, следовательно, номером k максимального элемента будет единица k =1. Затем в цикле по i от 2 до N текущее значение максимального S сравнивается с bi . Если условие S <bi не выполняется, то цикл повторяется. Если условие S <bi выполняется, то текущему значению максимального S присваивается значение bi , а его номеру - значение i .
INTEGER, PARAMETER :: N=10
REAL B(N) /1.,2.,3.,4.,5.,6.,5.,4.,3.,2./
S=B(1); K=1
DO I=2,N
IF (S.LT.B(I)) THEN
S=B(I); K=I
END IF
END DO
PRINT *, ' S=', S, ` K=', K
END
б) Определение максимального (или минимального) элемента одномерного массива S =max (b1,b2,…,bn ) и номера k этого элемента можно выполнить с использованием встроенных функций MAXVAL и MAXLOC.
INTEGER, PARAMETER :: N=10
REAL B(N) /1.,2.,3.,4.,5.,6.,5.,4.,3.,2./
S=MAXVAL(B); K=MAXLOC(B)
PRINT *, ' S=', S, ` K=', K
END
7. Пусть требуется расположить элементы одномерного массива B(10) в порядке невозрастания, т.е. так чтобы для всех элементов массива выполнялось условие: bi ?bi+1 при i =1,9 . Рассмотрим один из способов решения этой задачи.
Сначала из всех элементов bi при i =1,10 найти максимальный (его величину S и номер k ), затем переставить первый и максимальный элементы. Из оставшихся девяти элементов bi при i =2,10 найти максимальный и поменять его местами со вторым и т.д. Перестановка двух элементов массива с номерами k и j выполняется следующим образом: элемент bk равен S , поэтому сначала следует заменить bk на bj, а затем bj присваивается значение S. Программа упорядочения элементов массива будет иметь следующий вид:
DO J=1,9
S=B(J); K=J
DO I=J+1,10
IF (S.LT.B(I)) THEN
S=B(I); K=I
END IF
END DO
B(K)=B(J); B(J)=S
END DO
Внешний цикл по j изменяет номер элемента, с которого начинается поиск.
8. Пусть требуется составить одномерный массив С(4) из максимальных элементов строк матрицы А(4,4). Программа строится по схеме двойного цикла. Параметром внешнего цикла является номер строки i . Во внутреннем цикле по j определяется максимальный элемент строки:
DO I=1,4
C(I)=A(I,1)
DO J=2,4
IF (C(I).LT.A(I,J)) C(I)=A(I,J)
END DO
END DO
9. Пусть требуется умножить матрицу А(4,4) на вектор В(4). Результатом умножения матрицы А(4,4) на вектор В(4) является вектор С(4), элементы которого определяются по формуле .
а) используем встроенную функцию MATMUL, которая выполняет матричное умножение операндов
C=MATMUL(A,B)
б) алгоритм строится по схеме двойного цикла: внешний цикл по параметру i, во внутреннем цикле по параметру j производится суммирование:
DO I=1,4
C(I)=0.
DO J=1,4
C(I)=C(I)+A(I,J)*B(J)
END DO
END DO
10. Пусть требуется найти произведение D матрицы A на матрицу F, где A(4,4), F(4,4) и D(4,4). Умножение матрицы на матрицу осуществляется по схеме тройного цикла в соответствии с формулой , где i=1,4 и j=1,4.
а) используем схему тройного цикла с суммированием во внутреннем цикле
DO I=1,4
DO J=1,4
D(I,J)=0.
DO K=1,4
D(I,J)=D(I,J)+A(I,K)*F(K,J)
END DO
END DO
END DO
б) используем схему двойного цикла со встроенной функцией суммирования
DO I=1,4
DO J=1,4
D(I,J)=SUM(A(I,:)*F(:,J))
END DO
END DO
11. Пусть требуется вычислить элементы матрицы D(4,4) по формулам:
Программа, использующая блочный оператор IF, имеет следующий вид
DO I=1,4
DO J=1,4
IF ((B(I)+B(J)).LT.-1.) THEN
D(I,J)=(B(I)+B(J))**2
ELSE IF ((B(I)+B(J)).GT.1.) THEN
D(I,J)=SQRT(B(I)+B(J))
ELSE
D(I,J)=2.*(B(I)+B(J))
END IF
END DO
END DO
Варианты заданий
В вариантах заданий в качестве исходных данных используются следующие массивы
.
1. Заданы массивы А(4,4), В(4). Вычислить элементы массивов С(4), D(4,4), F(4,4) в соответствии с формулами:
.
Вывести на печать массивы C, D, F.
2. Заданы массивы A(4,4), B(4). Вычислить элементы массива по формуле:
Найти максимальный элемент массива P=C+B. Преобразовать матрицу A, разделив все ее элементы на найденный максимум. Печатать A, B, C, P.
3. Заданы массивы A(4,4), B(4). Из 1-й строки А вычесть 3-ю и в полученной матрице найти максимальный элемент. Из всех элементов массива В вычесть найденный максимум. Печатать А, В.
4. Задан массив В(4). Вычислить элементы массива С(4) по формулам
Вычислить элементы матрицы D(4,4) по формуле . Найти . Из всех элементов массива B вычесть S. Печатать B, C, D, S.
5. Задан массив А(4,4). Составить вектор С(4) из минимальных элементов в столбцах А. Из каждой строки А вычесть С. Печатать А, С.
6. Задан массив А(4,4). Составить вектор С(4) из максимальных модулей элементов в строках А. Элементы вектора С разделить на максимальный элемент С. Из диагональных элементов А вычесть С. Печатать A, C.
7. Заданы массивы А(4,4), В(4). Найти С=АВ. Максимальный элемент С и его номер k . Из k-й строки матрицы А вычесть С. Печатать A, B, C, k.
8. Заданы массивы А(4,4), В(4). Найти максимальные элементы массивов А и В и поменять их местами. Печатать А, В.
9. Задан массив В(4). Вычислить элементы массива С(4) по формулам
Вычислить элементы матриц D(4,4) и F(4,4) . Найти Q=DF. Печатать С, D, F, Q.
10. Заданы массивы А(4,4), В(4). Составить вектор С(4) из максимальных элементов в строках А. Вычислить P=BC. Из диагональных элементов А вычесть P. Печатать А, В, С, Р.
11. Задан массив А(4,4). Вычислить элементы массива по формулам
Найти F=AD. Печатать A, D, F.
12. Заданы массивы А(4,4), В(4). Найти максимальный элемент В и его номер k, минимальный элемент В и его номер l . В матрице А элемент akl заменить на найденный максимум, alk - на минимум. В векторе В поменять местами максимальный и минимальный элементы. Вычислить C=AB. Печатать А, В, С.
13. Заданы массивы А(4,4), В(4). Упорядочить B в порядке не убывания. Из каждой строки А вычесть В. Печатать А, В.
14. Заданы массивы А(4,4), В(4). Вычислить С=АВ. Упорядочить С в порядке не возрастания. Из столбцов А вычесть С. Печатать А, В, С.
15. Задан массив В(4). Вычислить С(4) по формулам:
.
Вычислить элементы D(4,4) по формулам
. Печатать B, C, D.
16. Заданы массивы А(4,4), В(4). Упорядочить строки А по не убыванию значений первых элементов строк. Вычислить элементы вектора С(4) по формуле . Печатать A, B, C.
17. Задан массив В(4). Вычислить элементы матрицы D(4,4) по формулам
Найти максимальные элементы D и B, поменять их местами. Печатать B, D.
18. Задан массив В(4). Вычислить элементы матрицы D(4,4) по формулам
Из всех элементов D вычесть максимальный элемент В. Вычислить C=DB. Печатать B, C, D.
19. Задан массив А(4,4). Вычислить элементы вектора С(4) по формулам:
.
Вычислить P=AC. Из диагональных элементов A вычесть вектор Р. Печатать А, С, Р.
20. Заданы массивы A(4,4), В(4). В матрице A найти минимальный и максимальный элементы, поменять их местами. Вычислить C=АВ. Печатать A, В, С.
21. Заданы массивы A(4,4), В(4). В массиве B найти максимальный и минимальный элементы, поменять их местами. Вычислить C=АВ. Из диагональных элементов A вычесть вектор С. Печатать А, В, С.
22. Задан массив A(4,4). Из диагональных элементов A вычесть максимальный элемент А. Вычислить вектор С(4) как сумму 1-й и 3-й строк А. Вычислить P=АС. Печатать A, С, Р.
23. Заданы массивы А(4,4), В(4). Вычислить C=АВ. Упорядочить C в порядке не убывания. Из диагональных элементов A вычесть вектор С. Печатать А, В, С.
24. Заданы массивы A(4,4), В(4). Вычислить элементы массива С(4) как сумму элементов в соответствующих строках А. Из диагональных элементов А вычесть С. Вычислить P=АС. Печатать A, С, Р.
25. Задан массив А(4,4). Вычислить элементы массива D(4,4) по формулам
.
Вычислить F=AD. Печатать A, D, F.
26. Задан массив B(4). Вычислить элементы массива C(4) по формуле . Вычислить элементы массива D(4,4) по формуле . Печатать B, C, D.
27. Задан массив B(4). Вычислить элементы массива C(4) по формуле . Вычислить элементы массива D(4,4) по формуле . Печатать B, C, D.
28. Заданы массивы A(4,4), В(4). Вычислить C=АВ. Из первой строки A вычесть B, из второй строки A вычесть вектор С. Печатать A, B, C.
29. Заданы массивы A(4,4), В(4). Найти максимальный и минимальный элементы B и поменять их местами. Вычислить C=АВ. Печатать A, В, С.
30. Задан массив B(4). Вычислить элементы массива C(4) по формуле: . Найти и поменять местами максимальные элементы B и С. . Печатать B, C, D.
Задание №5. РЕШЕHИЕ HЕЛИHЕЙHЫХ УРАВHЕHИЙ
Задание: Используя методы половинного деления и Ньютона, найти корни нелинейных уравнений f1(x)=0.
Решение нелинейных (трансцендентных или алгебраических) уравнений вида f(x)=0 заключается в отыскании одного или нескольких корней, т.е. таких значений аргумента x, для которых функция f(x) обращается в нуль. В общем случае функции f(x) не имеют аналитических формул для своих корней, поэтому приходится использовать приближенные методы.
Решение нелинейных уравнений обычно состоит из двух этапов:
1) Отделение, или локализация корней, т.е. отыскание таких отрезков [a,b] (одного или нескольких), внутри которых имеется только один корень нелинейного уравнения.
2) Уточнение приближенного значения корня до некоторой заданной степени точности. Отделить корни в некоторых случаях можно графически. Так, если уравнение имеет вид cos(x)-x=0, то переписав его в виде cos(x)=x и построив графики функций y1=cos(x) и y2=x, найдем приближенное значение корня как точку пересечения функций y1 и y2.
Локализовать корень уравнения можно также программно, вычисляя функцию f(x) для значений x, изменяющихся с некоторым заданным шагом h. Пpи этом отыскиваются два таких соседних значения x, для которых f(x) имеет противоположные знаки. Алгоритм отделения корня удобно оформить в виде подпрограммы. В качестве параметров подпрограммы можно выбрать следующие: F,XL,XR,H,A,B,IER.
Входные параметры:
F - имя внешней функции f(x);
XL,XR - соответственно левая и правая границы отрезка оси x, на котором отделяется корень уравнения;
H - шаг перебора аргумента функции.
Выходные параметры:
A,B - соответственно левая и правая границы отрезка [a,b], содержащего первый, считая от точки XL вправо, корень нелинейного уравнения;
IER - код ошибки. IER=0, если на участке от XL до XR с шагом H найден отрезок [A,B], содержащий корень уравнения; IER=1, если корень не локализован.
Алгоритм отделения корня нелинейного уравнения может быть следующим:
1) Зададим IER=1, т.е. предполагаем, что на отрезке от XL до XR корней нет. В дальнейшем проверим, так ли это.
2) Зададим начальное значение аргумента функции X=XL.
3) Вычислим значение функции в точке X: Y=F(X).
4) Изменим значение аргумента функции на величину шага : X=X+H .
5) Проверим, лежит ли X внутри [XL,XR]: если X>XR , то возвращаемся в вызывающую программу. В этом случае отрезок [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,A,B,EPS,C,N,IER.
Входные параметры:
F - имя внешней функции f(x);
A,B - соответственно левая и правая граница отрезка,содержащего один корень уравнения f(x)=0;
EPS - точность вычисления корня.
Выходные параметры:
C - корень уравнения (если он найден);
N - количество итераций, которое потребовалось выполнить для вычисления корня с заданной точностью;
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; зададим начальное число итераций N=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.
Метод половинного деления - наиболее унивеpсальный метод отыскания коpней нелиней ных уpавнений. К его недостаткам относится невысокая скоpость сходимости.
МЕТОД HЬЮТОHА (метод касательных) является одним из наиболее эффективных методов нахождения коpней нелинейных уpавнений. Он состоит в постpоении итеpационной последовательности xi+1=xi-f(xi)/f'(xi), сходящейся к коpню уpавнения f(x)=0. Геометpическая интеpпpетация метода следующая: если чеpез точку с кооpдинатами (xi ,f(xi)) пpовести касательную к функции y=f(x), то точка пеpесечения этой касательной с осью абсцисс пpинимается за уточненное значение коpня xi+1. Метод Hьютона особенно эффективен, когда известно хоpошее пpиближение коpня и в окpестности коpня функция имеет большую кpутизну.
В качестве паpаметpов подпpогpаммы метода Hьютона можно pекомендовать следующие:
F,PF,X0,EPS,NMAX,X,N,IER.
Входные паpаметpы:
F - имя внешней функции f(x);
PF - имя внешней функции f '(x);
X0 - начальное пpиближение для коpня уpавнения;
EPS - точность вычисления коpня;
NMAX - максимальное количество итеpационных циклов.
Выходные паpаметpы:
X - коpень уpавнения;
N - количество итеpаций, выполненных для вычисления коpня с заданной точностью;
IER - код ошибки. Если коpень найден, то IER=0; если коpень не найден за NMAX итеpационных циклов, то IER=1.
Используемый в подпpогpамме метода Hьютона алгоpитм:
1) Зададим: IER=1; начальное значение количества итеpаций N=0; текущее значение коpня X=X0.
2) Выполним итеpационный цикл: изменим содеpжимое счетчика итеpаций на единицу N=N+1; если количество итеpаций пpевысило NMAX, осуществим возвpат в вызывающую пpогpамму; вычислим уточненное значение коpня по фоpмуле Y=X-F(X)/PF(X); вычислим модуль pазности между уточненным и текущим значениями коpня E=ABS(Y-X); в качестве нового текущего зададим уточненное значение коpня X=Y; пpовеpим, следует ли пpодолжать уточнение коpня: если E>EPS, то итеpационный цикл следует повтоpить с начала пункта 2.
3) Если точность вычисления коpня достигнута, то следует изменить код ошибки IER=0 и осуществить возвpат в вызывающую пpогpамму.
Один из недостатков метода Hьютона состоит в том, что пользуясь им, пpиходится диффеpенциpовать функцию f(x). Если сделать это затpуднительно, то можно пpоизводную заменить конечной pазностью.
При выполнении задания требуется:
1) Построить графики функций y1=f1(x) и y2=f2(x) в MathCad для того, чтобы определить количество корней и отрезки, где они расположены. Функции могут иметь один, несколько или бесчисленное множество корней. Необходимо решить вопрос с преподавателем, какие корни подлежат определению.
2) Составить все необходимое для расчетов программное обеспечение: подпрограммы-функции для вычисления f1(x), f1'(x), f2(x), f2'(x) ,p1(x), p2(x); подпрограммы для локализации корней, методов половинного деления, Ньютона, простых итераций; головную программу. 3) Провести счет. Результаты оформить в виде таблицы. Предусмотреть печать не только окончательных, но и промежуточных результатов ( отрезков [ A, B ], числа итераций, кодов ошибок)
Варианты задания приведены в таблице 4.
Таблица 4. Варианты заданий
Размещено на http://www.allbest.ru/
Размещено на http://www.allbest.ru/
21 |
|||
22 |
|||
23 |
|||
24 |
|||
25 |
|||
26 |
|||
27 |
|||
28 |
|||
29 |
|||
30 |
Рекомендуется в качестве отрезка [A, B] для всех вариантов принять [0; 1]. Кроме № 10, интервал [0; 1.5], №20, интервал [1.5; 2.5], №23, интервал [1.5; 2.5]
Размещено на Allbest.ru
...Подобные документы
Составление отчетной ведомости "Магазины" в Excel 2013. Работа с таблицами семейства Microsoft Office. Построение круговой диаграммы и гистограммы, графиков. Разработка процедур для табулирования функций. Программирование функций пользователя на VBA.
курсовая работа [2,6 M], добавлен 03.04.2014Пакет Microsoft Office. Электронная таблица MS Excel. Создание экранной формы и ввод данных. Формулы и функции. Пояснение пользовательских функций MS Excel. Физическая постановка задач. Задание граничных условий для допустимых значений переменных.
курсовая работа [3,4 M], добавлен 07.06.2015Особенности использования встроенных функций Microsoft Excel. Создание таблиц, их заполнение данными, построение графиков. Применение математических формул для выполнения запросов с помощью пакетов прикладных программ. Технические требования к компьютеру.
курсовая работа [1,1 M], добавлен 25.04.2013Организация файлов и доступ к ним. Файловые операции. Программирование с использованием встроенных функций ввода-вывода; линейных, разветвляющихся и циклических вычислительных процессов с использованием If-else, оператора выбора Case; массивов и матриц.
курсовая работа [5,8 M], добавлен 24.05.2014Процессор электронных таблиц Microsoft Excel - прикладная программа, предназначенная для автоматизации процесса обработки экономической информации, представленной в виде таблиц; применение формул и функций для производства расчетов; построение графиков.
реферат [2,4 M], добавлен 03.02.2013Программирование вычислительных процессов на языке FORTRAN для обеспечения взаимодействия системы "Человек-Производство-Природа". Использование массивов для составления циклов подсчета уровня экологического загрязнения, затрат на переработку отходов.
курсовая работа [2,0 M], добавлен 30.05.2014Создание приложения, которое будет производить построение графиков функций по заданному математическому выражению. Разработка программы "Генератор математических функций". Создание мастера функций для ввода математического выражения, тестирование.
дипломная работа [1,7 M], добавлен 16.02.2016Математические возможности Mathcad и Microsoft Excel. Преобразование алгебраических выражений. Вычисление значения функции. Решение уравнений и систем. Вычисление значения интеграла, производных и пределов. Построение графиков функций. Работа с матрицами.
курсовая работа [559,5 K], добавлен 15.07.2012Вычисление выражений, использование стандартных функций; работа с графикой. Порядок действий при вычислении, способы ввода данных с клавиатуры. Построение таблиц функций. Организация циклов в программе, итерационные процессы. Работа с массивами чисел.
контрольная работа [614,7 K], добавлен 16.09.2012Вычисление значений выражений при вещественных типах данных float и double. Нахождение суммы элементов, используя оператор цикла. Вычисление функций с разложением в степенной ряд. Работа со строками. Обработка массивов с использованием функций.
лабораторная работа [24,3 K], добавлен 09.02.2010Особенности параллельного программирования высокопроизводительных многопроцессорных или многомашинных вычислительных комплексов. Основные положения и понятия стандартов MPI и OpenMP. Средства компиляции параллельных операторов для языков C и Fortran.
лекция [177,9 K], добавлен 22.10.2014Технология работы с программой Microsoft Excel, ее функциональные возможности и взаимодействие с другими программами Office. Методика выполнения расчетов, вычисления логарифмических и тригонометрических функции в Excel. Построение графиков и диаграмм.
контрольная работа [1,2 M], добавлен 05.06.2009Создание круговой диаграммы в табличном процессоре Microsoft Office Excel. Построение графиков математических функций. Назначение и алгоритм построение диаграммы с помощью Мастера диаграмм. Типы диаграмм в Excel. Метки строк и столбцов диаграммы.
лабораторная работа [1,6 M], добавлен 15.11.2010Создание электронных таблиц в MS Excel, ввод формул при помощи мастера функций. Использование относительной и абсолютной ссылок в формулах. Логические функции в MS Excel. Построение диаграмм, графиков и поверхностей. Сортировка и фильтрация данных.
контрольная работа [2,3 M], добавлен 01.10.2011Построение эмпирических формул методом наименьших квадратов. Линеаризация экспоненциальной зависимости. Элементы теории корреляции. Расчет коэффициентов аппроксимации, детерминированности в Microsoft Excel. Построение графиков функций, линии тренда.
курсовая работа [590,9 K], добавлен 10.04.2014Понятие и возможности MS Excel. Основные элементы его окна. Возможные ошибки при использовании функций в формулах. Структура электронных таблиц. Анализ данных в Microsoft Excel. Использование сценариев электронных таблиц с их практическим применением.
курсовая работа [304,3 K], добавлен 09.12.2009Определение возможностей математического пакета и изучение методов вычисления выражений в Mathcad. Возможности построения графиков функций одной переменной. Просмотр и способы построения графика функции одного аргумента и участков двухмерных графиков.
контрольная работа [384,8 K], добавлен 06.03.2011Практика построения графиков с использованием функций и работа с мастером диаграмм в ПП Microsoft Excel. Применение встроенных функций работы с матрицами для решения системы линейных уравнений. Практика создания запросов при работе с базами данных.
контрольная работа [436,1 K], добавлен 08.08.2011Программа Microsoft Excel для работы с таблицами данных и формулами. Абсолютные и относительные ссылки. Использование мастера функций, ввод ее параметров. Суммирование, построение диаграмм и графиков. Арифметические и логические табличные формулы.
курсовая работа [47,3 K], добавлен 28.11.2009Решение нелинейного уравнения вида f(x)=0 с помощью программы Excel. Построение графика данной функции и ее табулирование. Расчет матрицы по исходным данным. Проведение кусочно-линейной интерполяции таблично заданной функции с помощью программы Mathcad.
контрольная работа [1,8 M], добавлен 29.07.2013