- •Численные методы
- •Содержание
- •Введение
- •1. Вычисление определенных интегралов Справочная информация
- •Формула средних прямоугольников
- •Формула трапеций
- •Формула Симпсона (j.Gregory(Грегори)1668,Th.Simpson1743)
- •Пример решения в среде Matlab
- •Контрольные задания
- •2. Решение нелинейных уравнений Справочная информация
- •Метод простых итераций Метод основывается на приведении исходного уравнения к форме
- •Относительная разница между значениями приближения корня на третьей и четвёртой итерациях составляет
- •Метод хорд
- •Пример решения на пэвм в среде Matlab
- •Контрольные задания
- •3. Решение систем линейных алгебраических уравнений Справочная информация
- •Метод Гаусса с выбором главного элемента
- •Метод простых итераций
- •О выборе метода решения систем уравнений
- •Пример решения на пэвм в среде Matlab
- •Контрольные задания
- •4. Интерполяция таблично заданных функций Справочная информация
- •Кусочно-линейная интерполяция
- •Пример решения на пэвм в среде Matlab
- •Контрольные задания
- •5. Аппроксимация таблично заданных функций Справочная информация
- •Пример решения на пэвм в среде Matlab
- •Контрольные задания
- •6. Решение задачи коши для обыкновенных дифференциальных уравнений 1-го порядка Справочная информация
- •Усовершенствованный метод Эйлера
- •Оценка погрешностей методов
- •Программное обеспечение
- •Пример решения на пэвм в среде Matlab
- •Контрольные задания
- •7. Решение задачи коши для нормальных систем обыкновенных дифференциальных уравнений и уравнений высших порядков Справочная информация
- •Метод Эйлера
- •Усовершенствованный метод Эйлера
- •Оценка погрешностей методов
- •Пример решения на пэвм в среде Matlab
- •Контрольные задания
- •Приложение. Основы работы в среде matlab Интерфейс среды
- •Переменные и константы
- •Арифметические операторы
- •Операторы отношения
- •Логические операторы
- •Элементарные функции
- •Простейшие способы ввода–вывода информации
- •Векторы и матрицы
- •Оператор двоеточие «:»
- •Оператор разветвления if
- •Операторы циклов
- •Вывод информации в файл
- •Форматный вывод информации
- •Ввод данных из файла
- •Построение графиков
- •Сообщения об ошибках и исправление ошибок
- •Список литературы
Пример решения в среде Matlab
Пусть надо вычислить интеграл
с относительной погрешностью не хуже, чем 0.001.
Сначала можно применить метод трапеций. Для оценки погрешности приближённого значения интеграла по правилу Рунге следует вычислить его дважды. Например, разбить интервал интегрирования [–1, 1] на 10 отрезков 10 (шаг h= 0.1) и на 20 отрезков (шагh= 0.05). При необходимости, если требуемая точность не будет достигнута, придётся увеличить число разбиений отрезка интегрирования до 40 участков. Если же и этого окажется не достаточно, то число разбиений придётся еще раз удвоить и т.д. до тех пор, пока не получится погрешность, меньшая 0.001.
Запуск среды Matlabвыполняется последовательность командFileNewScript(см. рис.5):
Рис.5.
В результате открывается окно редактора. Желательно сразу сохранить пока ещё пустой файл в своей папке с расширением .m(см. рис.6), например,integral.m.
Открывшееся окно редактора предназначено для написания последовательности инструкций встроенного в Matlabязыка программирования. В данном случае она будет иметь вид, показанный на рис.7. Командыx1=-1:0.2:1 иx2=-1:0.1:1 задают массивы ординат точек разбиения отрезка интегрирования [–1, 1] с шагами 0.2 и 0.1 соответственно. По командамY1=exp(-x1.^2) иY2=exp(-x2.^2)
Рис.6.
Рис.7.
вычисляются массивы значений подынтегральной функции в точках разбиения. Команды Z1=trapz(x1,Y1) и Z2=trapz(x2,Y2) позволяют вычислить приближенные значений интеграла с использованием встроенной в среду Matlabфункцииtrapz, реализующей формулу трапеций для указанных массивов значений аргумента и функции. Инструкция dz=(Z2-Z1)/Z2/3 реализует правило Рунге и позволяет оценить погрешности приближенного значения интеграла, вычисленного для разбиения отрезка интегрирования интервала на 20 частей, которое хранится в переменнойZ2.
После написания программы следует сохранить файл с её текстом, а затем, выбрав в окне Current folgerс помощью навигации по папкам внешней памяти компьютера сохраненный файлintegral.m, следует запустить его на выполнение командойrunконтекстного меню. В результате в окнеCommand Window(см. рис.8) появится резуль-
Рис.8.
тат вычислений по данной программе. Полученное приближённое значение интеграла равно z2=1.4924, а оценка его погрешности естьdz=8.2303*10-4.
Требуемый результат в данном примере достигнут. Если же нужный уровень погрешности не был бы достигнут, то в файле integral.mнадо было бы изменить строчкиx1=-1:0.2:1 иx2=-1:0.1:1, задавая в два раза более мелкое разбиение отрезка интегрирования.
В Matlab’е, помимоtrapzсуществует множество специальных встроенных функций. Одна из нихquadреализует формулу Симпсона с автоматическим подбором шага интегрирования для достижения требуемой относительной погрешности. У неё обязательными являются три параметра:
имя подынтегральной функции, которая предварительно должна быть задана в m-файле с именем. Перед именем в обращении к процедуре ставится знак @;
нижний предел интегрирования;
верхний предел интегрирования.
По умолчанию функция quadвычисляет приближенное значение интеграла с погрешностью 10–6. Для изменения точности вычислений следует задать дополнительный четвертый аргумент – погрешность решения, например 0.001.
Чтобы применить процедуру quad, создаётсяm-файл, содержащий следующие инструкции:
function f = myfun (x)
f = exp(-x.^2)
Он сохраняется в своей папке с именем myfun.m, а в командном окне даётся команда:
q=quad(@myfun,-1,1,0.001)
Получающийся результат приведен на рис.9.
Рис.9.
Для реализации метода средних прямоугольников с расчётом погрешностей по правилу Рунге можно предложить следующий вариант программы, которая не пользуется встроенными функциями:
a=-1; b=1 задание нижнего и верхнего пределов интеграла
n=20 задание числа участков разбиения отрезка интегрирования
h=(b-a)/n вычисление шага разбиения отрезка интегрирования
x=a+h/2:h:b вычисление ординат средних точек для случая n участков
x2=a+h:h*2:b вычисление ординат средних точек для случая n/2 участков
Y=exp(-x.^2) вычисление значений подынтегральной функции для случая n участков
Y2=exp(-x2.^2) вычисление значений подынтегральной функции для случая n/2 участков
s1=sum(Y2)*h*2 вычисление интеграла для случая n участков
s=sum(Y)*h вычисление интеграла для случая n/2 участков
ds=abs(s-s2)/abs(s)/3 вычисление погрешности по правилу Рунге
Результатом выполнения этой программы будет появление в командном окне следующей информации:
h =
0.1000
s1 =
1.4961
s =0
1.4943
ds =
4.1152e-004
Полученный результат близок к тому, что был получен с использованием функции traps(см. рис.8).