8(495)909-90-01
8(964)644-46-00
pro@sio.su
Главная
Системы видеонаблюдения
Охранная сигнализация
Пожарная сигнализация
Система пожаротушения
Система контроля удаленного доступа
Оповещение и эвакуация
Контроль периметра
Система домофонии
Парковочные системы
Проектирование слаботочных сетей
Аварийный
контроль
Раздел: Документация

0 ... 90 91 92 93 94 95 96 ... 365

Поскольку при создании анонимной функции переменные среды фиксируются, то нет смысла определять отдельно анонимную функцию и передавать ее имя в качестве аргумента, ибо для новых параметров все команды надо повторить. В листинге 6.4 приведен пример использования вложенных функций для решения той же задачи.

Листинг 6.4. Использование функции, зависящей от параметра, в качестве аргумента fzero :

function [х, у] = froot(pl, р2, хО) [х, у] = fzero(@pfun, хО); function f = pfun(x) f = exp{pl*x) - p2*sin(x); end

Терерь вместо вызова функции fzero следует обращаться к собственной функции f root:

» [х, у] = froot(0.1, 2,0)

При необходимости можно добавить управляющую структуру options в список входных аргументов для передачи ее fzero. Пользователь пакета может выбрать наиболее приемлемый для него вариант.

Этот раздел посвящен приближенному вычислению определенных интегралов и двойных определенных интегралов с заданной точностью. Пользователь имеет возможность выбирать наиболее подходящий метод численного интегрирования в зависимости от свойств подынтегральной функции.

Вычисление определенных интегралов

Начнем с примера нахождения значения определенного интеграла

end

х =

0.5570

У =

и

Интегрирование функций


Первым шагом является создание функции, вычисляющей подынтегральное выражение, ее текст приведен в листинге 6.5.

j Листинг 6.5. Файл-функция, вычисляющая подынтегральное выражение{

function f - fint(x) f = exp(-x>.*sin(x);

Теперь для вычисления интеграла вызовите quad, задав первым аргументом ссылку на функцию fint, а вторым и третьим — нижний и верхний пределы интегрирования. В качестве выходного аргумента можно указать имя переменной, в которую следует записать найденное значение:

» format long

» I = guad(@fint, -1, 1)

I = -0.66349146765310

Примечание

Подынтегральная функция может быть задана именем, либо определена как inline-функция или анонимная так же, как и в случае fzero,

fminsearch,fminbnd. k

По умолчанию функция quad вычисляет приближенное значение интеграла с точностью 1(Н. Для изменения точности вычислений следует задать дополнительный четвертый аргумент:

» I = quad(@fint, -1, 1, 1.0е-07) I =

-0.66349366574399

Реализованный в quad рекурсивный алгоритм основан на квадратурной формуле Симпсона с автоматическим подбором шага интегрирования для достижения требуемой относительной погрешности. Сравнивая полученные результаты, можно сделать вывод, что относительная погрешностью-6 не дает ожидаемого количества верных знаков после десятичной точки. Проблема заключается в способе оценки погрешности вычислений в применяемом алгоритме, но этот вопрос из области вычислительной математики выходит за рамки излагаемого материала. При использовании средств пакета необходимо просто учитывать его особенности. Если пользователь знаком с теоретическими аспектами применяемого метода, то ему окажется полезной трассировка вычислений, которая выводится в командное окно при ненулевом значении пятого входного аргумента quad. Информация о ходе вычислений представлена в виде таблицы. В каждой ее строке приведены значе-


ния количества вычислений подынтегральной функции, начальная точка текущего промежутка интегрирования, его длина и значение интеграла:

» I = quad<@fint, -1, 1, 1.0е-07, 3)

9 11 13

15

-1.0000000000 -1.0000000000 -1.0000000000 -0.8642100000

5.43160000е-001 2.71580000е-001 1.35790000е-001 1.35790000е-001

-0.7696256630 -0.4927577867 -0.2772168074 -0.2155409801

37 39 41

0.4568400000 0.4568400000 0.7284200000

5.43160000е-001 2.71580000е-001 2.71580000е-001

0.1696814429 0.0830983395 0.0865830829

Проанализируйте количество точных знаков в зависимости от задаваемой точности вычислений в quadi для примера, разобранного выше.

Функции quad и quadl могут выводить следующие диагностические сообщения:

□Minimum step size reached — шаг интегрирования достиг минимального значения, но требуемая точность не получена. Возможно, функция имеет неинтегрируемую особенность;

□Maximum function count exceeded — достигнут предел максимального количества вычислений значений подынтегральной функции (более 10 000). Возможно, функция ведет себя как функция с неинтегрируемой особенностью;

□Infinite or Not-a-Number function value encountered—произошло переполнение при вычислении интегранда во внутренней точке интервала интегрирования.

Например, при интегрировании функции у-х мую особенность, по отрезку [0,1]

-0.9

, имеющей интегрируе-

» fun = inline(х."-0.9) ; » I = quad(fun, 0, 1, le-7)

Warning: Minimum step size reached; singularity possible. > In quad at 88 I =

9.8955

в командное окно выводится сообщение о достижении минимально возможного шага интегрирования, причем делается вывод о возможной осо-



0 ... 90 91 92 93 94 95 96 ... 365