- •Учебное пособие
- •Введение
- •Глава 1. Прикладные математические задачи
- •1.1. Вычисление математических функций
- •1.2. Создание программного модуля, объединяющего математические функции
- •1.3. Решение системы линейных алгебраических уравнений
- •1.4. Построение таблицы функции
- •Глава 2. Задачи вычислительной математики
- •2.1. Решение нелинейного уравнения
- •2.2. Численное дифференцирование
- •2.3. Численное интегрирование
- •2.4. Решение дифференциального уравнения
- •2.5. Аппроксимация функции
- •2.6. Интерполяция функции
- •Глава 3. Задачи математической статистики
- •3.1. Вычисление основных статистических величин
- •3.2. Создание программного статистического модуля
- •4. Построение графиков функций и создание диаграмм
- •4.1. Инициализация графического режима
- •4.2. Использование графических примитивов
- •4.3. Создание двумерной диаграммы
- •4.4. Построение графика функции
- •4.5. Создание трехмерной диаграммы
- •Библиографический список
Глава 1. Прикладные математические задачи
1.1.Вычисление математических функций
Вязыке Паскаль существует ряд стандартных функций, которые могут использоваться для математических вычислений, а следовательно, и для решения различных инженерных задач.
К их числу относятся следующие функции:
abs(x) – определяет aбсолютное значение аргумента, которым может
быть число или выражение целого или вещественного типа;
arctan(x) – вычисляет арктангенс угла, значение которого выражено
в радианах;
cos(x) – вычисляет косинус угла, значение которого выражено в
радианах;
exp(x) – вычисляет экспоненту аргумента (то есть e в степени x); int(x) – определяет целую часть аргумента. Значением функции
является величина вещественного типа;
ln(x) – вычисляет натуральный логарифм аргумента (т. е. логарифм
по основанию e);
pi – данная функция не имеет параметров, а значением ее является
число «Пи»;
round(x) – округляет значение аргумента до ближайшего целого числа;sin(x) - вычисляет cинус угла, значение которого выражено в
радианах;
sqr(x) – вычисляет квадрат аргумента, которым может быть число
или выражение целого или вещественного типа;
sqrt(x) – вычисляет квадратный корень из аргумента;
trunc(x) – определяет целую часть аргумента. Значением функции
является величина целого типа.
В то же время в системе Turbo Pascal отсутствует ряд других важных функций, которые удобно было бы использовать при выполнении различных
математических вычислений, и которые имеются в других приложениях. Например, при работе с программой «Калькулятор», являющейся
стандартным приложением операционной системы Windows можно
переключить данную программу в инженерный режим работы (в меню программы «Калькулятор» для этого имеется команда Вид → Инженерный). В таком режиме на панели «Калькулятора» появляется ряд
дополнительных экранных кнопок, позволяющих, в частности, возвести число в произвольную степень (а не только в квадрат, как в Паскале), вычислить факториал натурального числа, найти десятичный логарифм числа
6
(в Паскале имеется только стандартная функция, которая вычисляет натуральный логарифм числа.)
Данный раздел пособия посвящен составлению таких программ, которые восполняют вышеуказанные пробелы, имеющиеся в системе Turbo Pascal. Начнем с составления программ, которые возводят число в произвольную степень. Эту задачу можно разделить на две части:
а) возведение любого числа в степень (показатель степени является целым числом);
б) возведение положительного числа в степень (показатель степени – действительное число).
Приступим к решению первой части задачи. Известно, что нахождение целой положительной степени числа можно свести к многократному умножению этого числа. Любое число в нулевой степени будет равно единице. Возведение числа в целую отрицательную степень можно осуществить путем многократного деления числа. В приведенной ниже программе реализован алгоритм, позволяющий выбрать необходимый вариант вычисления в зависимости от того, является ли показатель степени положительным числом, нулем или отрицательным числом. Кроме того, в конце данной программы имеется меню, которое предоставляет пользователю возможность завершить работу с программой или вновь
вернуться к вычислениям. |
|
|
|
program stepen; |
|
|
|
uses crt; |
|
|
|
var x,s:real; |
|
|
|
n,i,y:integer; |
|
|
|
{x - основание степени, n - показатель степени, s - |
|||
искомая степень, |
|
|
|
i,y - вспомогательные переменные} |
|
|
|
begin |
|
|
|
repeat |
|
|
|
clrscr; |
|
|
|
writeln('Введите число'); |
|
|
|
readln(x); |
показатель |
степени |
(целое |
writeln('Введите |
|||
число)'); |
|
|
|
readln(n);
s:=1;
if n>0 then
for i:=1 to n do s:=s*x else
if n=0 then s:=1 else
for i:=-1 downto n do s:=s/x;
7
writeln('Число ',x:6:2,' в степени ',n,' равно ',s:10:4);
writeln;
writeln('Для продолжения работы с программой введите 0');
writeln('Для завершения 1'); readln(y);
until y=1 end.
Данная программа может возвести любое число в целую степень. Но для решения второй части задачи (возведение положительного числа в действительную степень) нужно будет использовать другой алгоритм. Для решения поставленной задачи можно воспользоваться встроенными функциями языка Паскаль – экспонентой и натуральным логарифмом.
Пусть требуется возвести в степень некоторое число x, причем k
число x можно представить в следующем виде: x=eln x. Тогда x в степени k
можно вычислить по следующей формуле: xk=ek ln x . На языке Паскаль
выражение, стоящее в последней формуле справа от знака равенства, можно записать так: xk:=exp(k*ln(x)). Ниже приводится программа, которая
реализует вышеописанный алгоритм.
program expln; uses crt;
var x,st,k:real; flag:integer;
{x - основание степени, k - показатель степени, st - искомая величина,
beginflag - признак окончания ввода данных'}
repeat clrscr; repeat
writeln('Введите основание степени (положительное число)');
readln(x); until x>0;
writeln('Введите показатель степени'); readln(k);
st:=exp(k*ln(x));
writeln('Число ',x:7:2,' в степени ',k:7:2,' равно ',st:10:4);
writeln;
8
writeln('Для продолжения вычислений введите 0'); writeln('для завершения введите 1'); readln(flag);
until flag=1; end.
Для защиты от неправильного ввода данных в этой программе имеется цикл с постусловием, который возвращает пользователя к вводу
значения основания x, если указанное пользователем основание не было положительным.
На следующем этапе создадим программу, в которой объединены два алгоритма, приведенные выше. В этой программе после ввода исходных данных проверяется, является ли показатель степени целым числом или нет.
Для этого показатель (число k) сравнивается с его целой частью, определяемой с помощью стандартной функции int. Если эти величины не
равны между собой, то показатель не является целым числом, и для вычисления функции используется формула из программы expln (использование экспоненты и натурального логарифма). Если же целая часть
числа k равна самому числу, то число k является целым. В этом случае с помощью функции trunk вещественная величина k преобразуется в целочисленную величину n, которая затем применяется в дальнейших
вычислениях. Далее применяется алгоритм многократного умножения или многократного деления из программы stepen. Программа позволяет найти
любую степень, кроме действительной степени отрицательного числа.
program unistep; uses crt;
var x,k,s:real; flag,n,i:integer;
begin repeat clrscr;
writeln('Введите основание степени'); readln(x);
writeln('Введите показатель степени'); readln(k);
if int(k)<>k then s:=exp(k*ln(x)) else
begin n:=trunc(k); s:=1;
if n>0 then
for i:=1 to n do s:=s*x
9
else
if n=0 then s:=1 else
for i:=-1 downto n do end;s:=s/x;
writeln('Число ',x:7:2,' в степени ',k:7:2,' равно ',s:10:4);
writeln;
writeln ('Для продолжения вычислений введите 0'); writeln ('для завершения работы введите 1'); readln(flag);
until flag=1; end.
Следующей программой, которая позволяет вычислить одну из функций, отсутствующих в Паскале, является программа вычисления факториала натурального числа. Согласно определению, факториалом
натурального числа n (эта величина обозначается в математике n!)
называется произведение всех натуральных чисел от 1 до n. Для решения задачи мы используем алгоритм многократного умножения, сходный с тем, который мы применяли при вычислении целой положительной степени числа. Но в данном случае будет использоваться многократное умножение не на одну и ту же величину, а на переменную i, которая последовательно
будет принимать значения натуральных чисел, начиная с единицы и далее в порядке возрастания. Ниже приводится текст программы вычисления факториала:
program faktor; uses crt;
var f,i,n,flag:longint; begin
repeat Clrscr;
writeln('Введите натуральное число'); readln(n);
f:=1;
for i:= 1 to n do f:=f*i;
writeln;
writeln('Факториал числа ',n,' равен ',f); writeln;
writeln('Для продолжение вычислений введите 0'); writeln('для завершения 1');
10
readln(flag); until flag=1; end.
Еще одной функцией, отсутствующей в стандартном наборе языка Паскаль, является вычисление десятичного логарифма. В Паскаль встроена функция вычисления натурального логарифма, поэтому наиболее простым способом нахождения десятичного логарифма является следующий: найти натуральный логарифм заданного числа, а затем подсчитать десятичный по следующей формуле:
ln(x) |
(1.1) |
log 10 x = ln(10) |
Этот способ расчета реализован в приведенной ниже программе. После ввода исходного числа в программе производится проверка: так как введенное число должно быть положительным (отрицательные числа не имеют действительных логарифмов, а логарифм нуля – это отрицательная бесконечность), то в случае ввода отрицательного числа или ноля, программа возвращает пользователя к вводу исходных данных. Затем для расчета используется приведенная выше формула.
program deslog; uses crt;
var x,log:real; flag:integer;
begin repeat clrscr; repeat
writeln('Введите положительное число'); readln(x);
until x>0; log:=ln(x)/ln(10);
writeln('Десятичный логарифм ',x:8:2,' равен ',log:10:4);
writeln;
writeln('Для продолжения вычислений нажмите 0'); writeln('для завершения нажмите 1 '); readln(flag);
until flag=1; end.
11