- •Вопрос 26. Сортировка обменом (так называемая "пузырьковая" сортировка).
- •Вопрос 27. Комбинированный тип данных. Запись. Описание записи. Доступ к полям записи
- •Вопрос 28. Оператор with.
- •Вопрос 29. Модуль crt
- •Вопрос 30. Модуль graph
- •Вопрос 31. Инициализация графики, подготовительные работы, управление цветом, закрытие режима
- •Вопрос 32. Процедуры и функции для работы с "графическими примитивами".
- •Вопрос 33. Процедуры для работы с текстом.
- •Вопрос 34. Типизированные файлы. Процедуры и функции для работы с типизированными файлами
- •Вопрос 35. Процедуры и функции для работы с файлами любого типа
- •Вопрос 36. Текстовые файлы, их описание и основные отличия от типизированных файлов.
- •Вопрос 37. Нетипизированные файлы.
- •Вопрос 38. Модули. Модульное программирование.
- •Вопрос 39. Указатели и динамическая память. Выделение и освобождение динамической памяти.
- •Вопрос 40. Основы объектно-ориентированного программирования.
- •Вопрос 41. Метод хорд
- •Вопрос 42. Метод касательных
- •Вопрос 43. Метод итераций
- •Вопрос 44. Методом средних прямоугольников
- •Вопрос 45. Методом трапеций
- •Вопрос 46. Методом Симпсона
- •Вопрос 47. MathCad. Нахождение корней уравнений.
- •Вопрос 48. MathCad. Нахождение определенных интегралов
- •Вопрос 49. MathCad. Построение графика функций
- •Вопрос 50. MathCad. Работа с матрицами
Вопрос 46. Методом Симпсона
Uses crt;
Var
a,b,h,i1,e,i2,t:real;
n,i,k:longint;
function f(x:real):real;
begin
f:=sin(x);
end;
function Simp(x:real;r:byte):real;
Var
s:real;
begin
s:=0;
for i:=1 to n-1 do
begin
if (i mod 2=r) then
s:=s+f(x)
else;
x:=x+h;
end;
Simp:=s;
end;
begin
a:=pi/4;
b:=pi/2;
e:=0.000001;
n:=2;
k:=0;
repeat
i2:=i1;
i1:=((1/3)*h)*(f(a)+f(b)+4*Simp(a+h,1)+2*Simp(a+h,0));
n:=n*2;
h:=(b-a)/n;
k:=k+1;
until abs(i1-i2)<e;
Writeln;
Writeln;
textcolor(blue);
i1:=abs(i1);
Writeln('znashenie ploshadi metodom Simpsona *= ');
Write(i1:0:6,' toshek deleni9 ',n);
writeln;
write('Kol-vo iterracci= ',k,' ');
Readkey
end.
Формула Симпсона (также Ньютона-Симпсона[1]) относится к приёмам численного интегрирования. Получила название в честь британского математика Томаса Симпсона (1710—1761).
Суть приёма заключается в приближении подынтегральной функции на отрезк е интерполяционным многочленом второй степени , то есть приближение графика функции на отрезке параболой. Метод Симпсона имеет порядок погрешности 4 и алгебраический порядок точности 3.
Формула
Формулой Симпсона называется интеграл от интерполяционного многочлена второй степени на отрезке :
где , и — значения функции в соответствующих точках (на концах отрезка и в его середине).
Погрешность
При условии, что у функции на отрезке существует четвёртая производная, погрешность , согласно найденной Джузеппе Пеано формуле равна:
В связи с тем, что значение зачастую неизвестно, для оценки погрешности используется следующее неравенство:
Представление в виде метода Рунге-Кутта
Формулу Симпсона можно представить в виде таблицы метода Рунге-Кутты следующим образом:
Составная формула (формула Котеса)
Для более точного вычисления интеграла, интервал разбивают на отрезков одинаковой длины и применяют формулу Симпсона на каждом из них. Значение исходного интеграла является суммой результатов интегрирования на всех отрезках.
где — величина шага, а — узлы интегрирования, границы элементарных отрезков, на которых применяется формула Симпсона. Обычно для равномерной сетки данную формулу записывают в других обозначениях (отрезок разбит на узлов) в виде
Также формулу можно записать используя только известные значения функции, т.е. значения в узлах:
где означает что индекс меняется от единицы с шагом, равным двум.
Общая погрешность при интегрировании по отрезку с шагом (при этом, в частности, , ) определяется по формуле[2]:
.
При невозможности оценить погрешность с помощью максимума четвёртой производной (например, на заданном отрезке она не существует, либо стремится к бесконечности), можно использовать более грубую оценку:
.
Вопрос 47. MathCad. Нахождение корней уравнений.
Для алгебраических уравнений вида f(x)=0 решение в MathCad находится с помощью функции root.Общий вид функции следующий:
root( f(х), х), где
f(х) – функция, описывающая левую часть выражения вида f(x)=0,
х – имя переменной, относительно которой решается
уравнение.
Функция root реализуеталгоритм поиска корня численным методом и требует предварительного задания
начального приближения искомой переменной х. Поиск корня будет производиться вблизи
этого числа. Таким образом, присвоение начального значения требует
предварительной информации о примерной локализации корня.
Функция позволяет найти как вещественные корни, так и комплексные. В случае комплексного корня начальное приближение нужно задать в виде комплексного числа.
Если после многих итераций Mathcad не находит подходящего приближения, то появится сообщение «отсутствует сходимость».
Эта ошибка может быть вызвана следующими причинами:
1) уравнение не имеет корней;
2) корни уравнения расположены далеко от начального приближения;
3) выражение f(x) имеет разрывы между начальным приближением и корнем;
4) выражение имеет комплексный корень, но начальное приближение было вещественным и наоборот.
Для изменения точности, с которой функция root ищет корень, нужно изменить значение системной переменной TOL. Например, просле задания в документе оператора TOL:=0.00001 точность вычисления корня станет равной 0.00001.
Для нахождения корней полиномиального используется функция polyroots.
В отличие от функции root, polyroots не требует начального приближения и вычисляет сразу все корни, как вещественные, так и комплексные.
Общий вид:
polyroots(v),
где v – вектор
коэффициентов полинома длины n+1, n – степень полинома. Вектор v формируется следующим образом: в первый его
элемент заносится значение коэффициента полинома при х0, т.е. v0,
во второй элемент - значение
коэффициента полинома при х1, т.е. v1 и
т.д. Таким образом, вектор заполняется коэффициентами перед степенями полинома справа налево.
Функция вычисляет вектор длины n, состоящий из корней полинома.
MathCAD дает возможность решать системы уравнений и неравенств.
Наиболее распространенным методом решения уравнений в Mathcad является блочный метод. Для решения системы этим методом необходимо выполнить следующее:
a) задать
начальное приближение для всех неизвестных, входящих в систему уравнений;
б) задать ключевое слово Given, которое указывает, что далее
следует система уравнений;
в) ввести уравнения и
неравенства в любом порядке (использовать кнопку логического равенства на панели знаков логических операций для набора знака «=» в уравнении);
г) ввести любое выражение,
которое включает функцию Find.
Решающим блоком называется часть документа, расположенная между ключевыми словами Given и Find.
После набора решающего блока Mathcad возвращает точное решение уравнения или системы уравнений.
Обратиться к функции Find можно несколькими способами:
Find(x1, x2,…) = - корень или корни уравнения вычисляются и выводятся в окно документа.
x := Find(x1, x2,…) – формируется переменная или вектор, содержащий
вычисленные значения корней.
Сообщение об ошибке «Решение не найдено» появляется тогда, когда система не имеет решения или для уравнения, которое не имеет вещественных корней, в качестве начального приближения взято вещественное число и наоборот.
Приближенное решение уравнения или системы можно получить с помощью функции Minerr.
Если в результате поиска не может быть получено дальнейшее уточнение текущего приближения к решению, Minerr возвращает это приближение. Функция Find в этом случае возвращает сообщение об ошибке. Правила использования функции Minerr такие же, как и для функции Find. Часть документа, расположенная между ключевыми словами Given и Minerr так же носит название решающего блока.
Для решения систем линейных уравнений можно использовать общепринятые математические методы: метод Крамера, матричный метод и т.д.
Матричный метод решения системы линейных уравнений реализован в функции lsolve. Общий вид функции:
lsolve(а, b)
где а – матрица коэффициентов перед неизвестными, b – вектор свободных членов.
Из рисунка видно, что при решении системы уравнений блочным методом можно получить численные значения корней системы уравнений, без присваивания и с присваиванием их в переменные x1 и x2. При решении системы уравнений матричным методом продемонстрированы два варианта: с использованием стандартной функции lsolve и обратной матрицы.
Решение системы линейных уравнений
Последовательность действий для решения системы линейных уравнений методом Крамера такова:
1) создать матрицу коэффициентов системы линейных
уравнений;
2) создать вектор свободных членов, например ;
3) с помощью оператора «:=» создать матрицу, равную матрице коэффициентов, например, ;
4) заменить в созданной матрице первый столбец вектором
свободных членов, используя операцию выделения столбца матрицы, например, или (в зависимости от значения переменной ORIGIN);
5) аналогично из матрицы коэффициентов создать матрицу, в которой второй столбец заменен вектором свободных членов, затем матрицу, в которой третий столбец заменен вектором свободных членов, и т.д.(количество таких матриц определяется количеством неизвестных в системе уравнений);
6) найти первый корень,
разделив определитель матрицы с замененным первым столбцом на определитель
матрицы коэффициентов, например: ;
7) найти остальные корни системы уравнений аналогично
Последовательность действий для решения системы линейных уравнений матричным методом такова:
1) создать матрицу коэффициентов системы линейных уравнений.
2) создать вектор свободных членов системы линейных уравнений;
3) получить решение системы с помощью функции lsolve, параметрами которой являются матрица коэффициентов и вектор свободных членов. (решение также можно получить, умножив матрицу, обратную к матрице коэффициентов, на вектор свободных членов: );
4) вывести полученный вектор, содержащий корни системы, с помощью оператора «=».
Последовательность действий для решения системы линейных уравнений блочным методом такова:
-- задать начальные приближения для всех неизвестных, входящих в систему уравнений;
-- набрать ключевое слово Given;
-- ниже слова Given набрать уравнения, отделяя правую и левую части символом логического равенства «=»
-- набрать функцию Find, подставляя в качестве аргументов имена неизвестных системы;
-- вывести вектор, содержащий вычисленные значения корней, с помощью оператора «=», например Find(x1,x2,x3)=.
Замечание. Корни системы уравнений, полученные разными способами, должны совпасть.