Автор: Пользователь скрыл имя, 22 Декабря 2011 в 20:19, курс лекций
Под табуляцией функции понимается вычисление значений функции в зависимости от аргумента, который меняется в определенных пределах с постоянным шагом. Решение задачи табуляции является достаточно характерным примером реализации циклического алгоритма.
1. Табуляция функции 4
1.1. Практические задания 6
2. Методы нахождения корней уравнений 8
2.1. Метод половинного деления 8
2.2. Итерационные методы 10
2.3. Практические задания 15
3. Вычисление определенного интеграла 16
3.1. Практические задания 19
4. Вычисление конечных сумм 20
4.1. Практические задания 24
5. Индексированные переменные 26
5.1. Одномерный массив 26
5.2. Практические задания 30
5.3. Двумерный массив 32
5.4. Практические задания 38
6. Решение системы линейных алгебраических
уравнений методом Гаусса 41
6.1. Практические задания 44
Литература 46
Под табуляцией функции понимается вычисление значений функции в зависимости от аргумента, который меняется в определенных пределах с постоянным шагом. Решение задачи табуляции является достаточно характерным примером реализации циклического алгоритма.
Формулировка задачи табуляции: дана функция y = f(x). Требуется получить значения f(x) для аргумента x, меняющегося в интервале от xmin до xmax с шагом Dx. На рис. 1.1 приведен алгоритм решения задачи табуляции, использующий цикл с предусловием. Число повторений цикла, необходимое для решения поставленной задачи, можно определить по формуле:
,
в которой квадратные скобки означают функцию взятия целой части от заключённого в них выражения.
При выполнении заданий необходимо учесть, что алгоритмы, вычисляющие значения тригонометрических функций, предусматривают подстановку аргумента, выраженного в радианах.
Табуляцию
функции можно дополнить
Специальной функции для такого рисования в классическом Си нет. Однако для этой цели можно приспособить стандартную процедуру printf, воспользовавшись особенностями форматирования выводов результатов. Под форматированием (или просто форматом) вывода понимается число выводимых на экран цифр. Для задания формата в Си необходимо указать минимальную ширину поля отводимого для печати. Если строка или число больше указанной ширины поля, то строка или число печатается полностью. Например, процедура вывода целой переменой i – printf("%5d",i) разместит ее значение в пяти позициях так, чтобы последний символ находился в последней пятой позиции. Меняя в цикле значения ширины поля (при соблюдении соответствующего масштаба), можно построить простой график из 25 точек.
Приведем пример программы, выполняющей табулирование функции:
#include <stdio.h>
#include <math.h>
float f(float x);
void main()
{
float a,b,h;
printf("\t Табулирование функции sin(7pi/8 - 2x)^2\n");
printf("Введите нижнюю границу a : ");scanf("%f",&a);
printf("Введите верхнюю
printf("Введите шаг табуляции h : ");scanf("%f",&h);
printf("Таблица табулирования\
float x = a;
while(x + h <= b)
{
printf("x : %.3f - y : %.3f\n",x,f(x));
x += h;
}
}
float f(float x)
{
float pi = 3.142;
float RetVal = pow(sin(7*pi/8 - 2*x),2);
return RetVal;
}
№ |
табулируемая функция |
a |
диапазон изменения аргумента | Dx |
1 |
3,1 |
00 £ x £ 450 |
50 | |
2 |
3,65 |
00 £ x £ 500 |
100 | |
3 |
4,66 |
50 £ x £ 450 |
50 | |
4 |
2,4 |
100 £ x £ 500 |
100 | |
5 |
2,41 |
80 £ x £ 720 |
80 | |
6 |
1,4 |
200 £ x £ 800 |
7,50 | |
7 |
1,9 |
50 £ x £ 450 |
50 | |
8 |
6,87 |
50 £ x £ 800 |
150 | |
9 |
4,55 |
80 £ x £ 800 |
120 | |
10 |
2,21 |
350 £ x £ 650 |
50 | |
11 |
1,84 |
00 £ x £ 720 |
90 | |
12 |
0,43 |
50 £ x £ 350 |
50 | |
13 |
1,89 |
200 £ x £ 440 |
40 | |
14 |
4,81 |
100 £ x £ 350 |
50 | |
15 |
0,21 |
30 £ x £ 270 |
30 | |
16 |
3×ln3 |
120 £ x £ 300 |
30 | |
17 | 1,19 | 60 £ x £ 360 | 50 | |
18 |
5,12 |
50 £ x £ 400 |
70 | |
19 |
|
00 £ x £ 360 |
60 | |
20 |
0,3p |
50 £ x £ 350 |
30 |
Как известно, компьютеры в первую очередь начали применять для выполнения трудоемких расчетов и для получения хотя бы приблизительных значений каких-либо величин при решении таких задач, для которых получить точное аналитическое решение либо невозможно, либо нецелесообразно. Примером таких задач являются задачи на уточнение корней уравнений. При их решении используют различные численные методы. Здесь представлены три метода уточнения корней уравнений, используя которые можно находить корни уравнений с требуемой точностью.
Очень часто на практике приходится решать уравнения вида f(x)=0, где функция f(x) определена и непрерывна в интервале а < х < b. Под решением уравнения понимают нахождение некоторого значения х0, которое обращает функцию f(x) в ноль. Значение х0 и называется корнем уравнения f(x)=0.
Если функция представляет собой многочлен, то уравнение f(x)=0 называют алгебраическим. Если же в функцию входят элементарные функции (тригонометрические, показательные, логарифмические и пр.), то такое уравнение называют трансцендентным.
Метод половинного деления, или метод деления отрезка пополам (дихотомии), чрезвычайно прост, и его алгоритм легко реализуется на ЭВМ.
Пусть необходимо решить уравнение f(х) = 0, где функция f(x) непрерывна на отрезке [а; b], и только один корень х0 заключен в том же интервале. Таким образом, функция f(х) будет знакопеременной на концах отрезка [а; b] (рис. 2.1). Математически это можно записать как f(a)×f(b)<0. Разделим отрезок [а; b] пополам, т. е. найдем и вычислим значение функции f(x) в этой точке.
Если окажется, что f(x) = 0, то х - корень уравнения. Если f(x)¹0, то выбираем ту половину отрезка [а; х] или [х; b], на концах которой функция f(x) имеет противоположные знаки. На рис. 2.1 это отрезок [х; b]. Половина отрезка, не содержащая корня [а; x], отбрасывается. Это означает, что левая граница интервала перемещается в точку деления пополам (a=x).
Y
a ® x b
f(a)
Рис. 2.1. Геометрическое представление метода половинного деления
При
повторном делении производятся
те же самые операции: новый отрезок
[а; b] делится пополам, вычисляется
значение функции в точке деления f(x)
и определяется отрезок, содержащий истинный
корень х0. Процесс деления продолжают
до тех пор, пока длина отрезка, содержащего
корень, не станет меньше некоторого наперед
заданного числа e (точности) или пока
значение функции в точке деления y=f(x)
превышает e по абсолютной величине.
Ввод
границ интервала a,
b и точности Eps | ||
z = f(a) | ||
x = (a+b) /2 | ||
y = f(x) | ||
y*z
да |
> 0
нет | |
a = x | b = x | |
z = y | ||
Повторять, пока b-a > Eps | ||
Вывод x, f(x) |
Рис. 2.2. Структурограмма метода половинного деления (метод дихотомии)
Алгоритм метода половинного деления приведен на рис. 2.2. Отметим, что выделение знакопеременного интервала на основе вычисления произведения f(a)×f(x) не является оптимальным, так как необходим лишь знак этого произведения. Поэтому разумнее определять знак на основе использования логических функций сравнения > или <, а также логических функций умножения и сложения: “и“ (&&) и “или“ (||). Попробуйте самостоятельно определить вид такого «логического» перемножения. Учтите, что возможны два варианта знакопеременности: на левой границе – минус, на правой – плюс, и наоборот.
Метод половинного деления обладает существенным недостатком - медленной сходимостью процесса вычисления корней. При увеличении точности значительно возрастает объем вычислительной работы. Для убыстрения вычислительного процесса применяют методы последовательных приближений (итерационные методы). В их основе - идея вычисления каждого последующего приближения на основании предыдущего, то есть использование рекуррентных формул вида:
xn+1 = f(xn). (2.1)
Пусть уравнение f(x)=0 имеет один корень на отрезке [а; b], а его первая и вторая производные f ¢(x) и f ¢¢(x) определены, непрерывны и сохраняют постоянные знаки в этом интервале.
Геометрически метод Ньютона эквивалентен замене небольшой дуги кривой y = f (x) касательной в некоторой точке кривой (рис. 2.3).
Выберем в качестве первого приближенного значения корня точку x1=b, для которой выполняется условие f (x1)×f ¢¢(x1)>0, т.е. значения функции и ее второй производной в точке х1 имеют одинаковые знаки. Напомним, что знак второй производной от функции f (x) определяет выпуклость кривой: если f ¢¢(x) положительна, то график функции имеет выпуклость вниз, как это изображено на рис. 2.3.
Через точку R1 с координатами [х1, f(x1)] проведем касательную к кривой у = f (х). В качестве второго приближения х2 корня возьмем абсциссу точки пересечения этой касательной с осью Ох. Через точку R2 снова проведем касательную, абсцисса точки пересечения которой даст нам следующее приближение х3 корня, и т. д.