Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Числ_методы_I_(лаб).doc
Скачиваний:
219
Добавлен:
05.06.2015
Размер:
3.44 Mб
Скачать

Пример решения в среде Matlab

Пусть надо вычислить интеграл

с относительной погрешностью не хуже, чем 0.001.

Сначала можно применить метод трапеций. Для оценки погрешности приближённого значения интеграла по правилу Рунге следует вычислить его дважды. Например, разбить интервал интегрирования [–1, 1] на 10 отрезков 10 (шаг h= 0.1) и на 20 отрезков (шагh= 0.05). При необходимости, если требуемая точность не будет достигнута, придётся увеличить число разбиений отрезка интегрирования до 40 участков. Если же и этого окажется не достаточно, то число разбиений придётся еще раз удвоить и т.д. до тех пор, пока не получится погрешность, меньшая 0.001.

Запуск среды Matlabвыполняется последовательность командFileNewScript(см. рис.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).