Как взять интеграл в матлабе
Перейти к содержимому

Как взять интеграл в матлабе

  • автор:

Документация

попытки найти другое символьное выражение, F , так, чтобы diff(F) = f . Таким образом, int(f) возвращает неопределенный интеграл или антипроизводную f (если каждый существует в закрытой форме). Подобно дифференцированию,

int(f,v)

использует символьный объект v когда переменная интегрирования, а не переменная определяется symvar . Смотрите как int работает путем рассмотрения этой таблицы.

int(x^n) или int(x^n,x)

∫ 0 π / 2 sin ( 2 x ) d x = 1

int(sin(2*x), 0, pi/2) или int(sin(2*x), x, 0, pi/2)

∫ g ( t ) d t = sin ( a t + b ) / a

g = cos(a*t + b) int(g) или int(g, t)

∫ J 1 ( z ) d z = − J 0 ( z )

int(besselj(1, z)) или int(besselj(1, z), z)

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

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

Тем не менее, во многих случаях, MATLAB может выполнить символьное интегрирование успешно. Например, создайте символьные переменные

syms a b theta x y n u z

Следующая таблица иллюстрирует интегрирование выражений, содержащих те переменные.

syms x n f = x^n;
int(f)
ans = piecewise(n == -1, log(x), n ~= -1. x^(n + 1)/(n + 1))
syms y f = y^(-1);
int(f)
ans = log(y)
syms x n f = n^x;
int(f)
ans = n^x/log(n)
syms a b theta f = sin(a*theta+b);
int(f)
ans = -cos(b + a*theta)/a
syms u f = 1/(1+u^2);
int(f)
ans = atan(u)
syms x f = exp(-x^2);
int(f)
ans = (pi^(1/2)*erf(x))/2

В последнем примере, exp(-x^2) , нет никакой формулы для интеграла включающих стандартных выражений исчисления, таких как тригонометрические и показательные функции. В этом случае MATLAB дает ответ в терминах функции ошибок erf .

Если MATLAB не может найти ответ на интеграл функционального f , это только возвращает int(f) .

Определенное интегрирование также возможно.

Вот некоторые дополнительные примеры.

syms x f = x^7;
a = 0; b = 1;
int(f, a, b)
ans = 1/8
syms x f = 1/x;
a = 1; b = 2;
int(f, a, b)
ans = log(2)
syms x f = log(x)*sqrt(x);
a = 0; b = 1;
int(f, a, b)
ans = -4/9
syms x f = exp(-x^2);
a = 0; b = inf;
int(f, a, b)
ans = pi^(1/2)/2
syms z f = besselj(1,z)^2;
a = 0; b = 1;
int(f, a, b)
ans = hypergeom([3/2, 3/2]. [2, 5/2, 3], -1)/12

Для Функции Бесселя ( besselj ) пример, возможно вычислить числовое приближение к значению интеграла, с помощью double функция. Команды

syms z a = int(besselj(1,z)^2,0,1)
a = hypergeom([3/2, 3/2], [2, 5/2, 3], -1)/12
a = double(a)
a = 0.0717

Интеграция с действительными параметрами

Одна из тонкости, вовлеченной в символьное интегрирование, является “значением” различных параметров. Например, если a является каким-либо положительным вещественным числом, выражением

положительная, кривая, имеющая форму звонка, которая стремится к 0, как x стремится к ± ∞ . Можно создать пример этой кривой для a = 1/2 .

syms x a = sym(1/2); f = exp(-a*x^2); fplot(f)

Figure contains an axes object. The axes object contains an object of type functionline.

Однако, при попытке вычислить интеграл

не присваивая значение a, MATLAB принимает, что a представляет комплексное число, и поэтому дает кусочный ответ, который зависит от аргумента a. Если вы только интересуетесь случаем, когда a является положительным вещественным числом, используйте assume установить предположение на a :

syms a assume(a > 0)

Теперь можно вычислить предыдущий интеграл с помощью команд

syms x f = exp(-a*x^2); int(f, x, -inf, inf)
ans = pi^(1/2)/a^(1/2)

Интеграция с комплексными параметрами

для комплексных чисел a , войти

syms a x f = 1/(a^2 + x^2); F = int(f, x, -inf, inf)

Используйте syms очистить все предположения на переменных. Для получения дополнительной информации о символьных переменных и предположениях на них, смотрите, Удаляют Символьные Объекты и Их Предположения.

Предыдущие команды производят комплексный выход

F = (pi*signIm(1i/a))/a

Функция signIm задан как:

Оценивать F в a = 1 + i , войти

g = subs(F, 1 + i)
g = pi*(1/2 - 1i/2)
double(g)
ans = 1.5708 - 1.5708i

Численное интегрирование высокой точности Используя арифметику Переменной Точности

Численное интегрирование высокой точности реализовано в vpaintegral функция Symbolic Math Toolbox™. vpaintegral арифметика переменной точности использования в отличие от MATLAB integral функция, которая использует арифметику с двойной точностью.

Интегрируйте besseli(5,25*u).*exp(-u*25) при помощи обоих integral и vpaintegral . integral функция возвращает NaN и выдает предупреждение в то время как vpaintegral возвращает правильный результат.

syms u f = besseli(5,25*x).*exp(-x*25); fun = @(u)besseli(5,25*u).*exp(-u*25); usingIntegral = integral(fun, 0, 30) usingVpaintegral = vpaintegral(f, 0, 30)
Warning: Infinite or Not-a-Number value encountered. usingIntegral = NaN usingVpaintegral = 0.688424

Для получения дополнительной информации смотрите vpaintegral .

Документация Symbolic Math Toolbox

Поддержка

  • MATLAB Answers
  • Помощь в установке
  • Отчеты об ошибках
  • Требования к продукту
  • Загрузка программного обеспечения

© 1994-2021 The MathWorks, Inc.

  • Условия использования
  • Патенты
  • Торговые марки
  • Список благодарностей

Для просмотра документации необходимо авторизоваться на сайте
Войти
Памятка переводчика

1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.

2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.

3. Сохраняйте структуру оригинального текста — например, не разбивайте одно предложение на два.

4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.

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

интеграл

q = integral( fun , xmin , xmax ) численно интегрирует функциональный fun от xmin до xmax с помощью глобальной адаптивной квадратуры и ошибочных допусков по умолчанию.

q = integral( fun , xmin , xmax , Name,Value ) задает дополнительные опции с одним или несколькими аргументами пары Name,Value . Например, задайте ‘WayPoints’ , сопровождаемый вектором вещественных или комплексных чисел, чтобы указать на отдельные моменты для интегратора, чтобы использовать.

Примеры

Несобственный интеграл

Создайте функцию f ( x ) = e — x 2 ( ln x ) 2 .

fun = @(x) exp(-x.^2).*log(x).^2;

Оцените интеграл от x=0 до x=Inf .

q = integral(fun,0,Inf)
q = 1.9475

Параметризованная функция

Создайте функцию f ( x ) = 1 / ( x 3 — 2 x — c ) с одним параметром, c .

fun = @(x,c) 1./(x.^3-2*x-c);

Оцените интеграл от x=0 до x=2 в c=5 .

q = integral(@(x)fun(x,5),0,2)
q = -0.4605

Особенность в нижнем пределе

Создайте функцию f ( x ) = ln ( x ) .

fun = @(x)log(x);

Оцените интеграл от x=0 до x=1 с ошибочными допусками по умолчанию.

format long q1 = integral(fun,0,1)
q1 = -1.000000010959678

Оцените интеграл снова, на этот раз с 12 десятичными разрядами точности. Обнулите RelTol так, чтобы integral только попытался удовлетворить допуск абсолютной погрешности.

q2 = integral(fun,0,1,'RelTol',0,'AbsTol',1e-12)
q2 = -1.000000000000010

Комплексное контурное интегрирование Используя Waypoints

Создайте функцию f ( z ) = 1 / ( 2 z — 1 ) .

fun = @(z) 1./(2*z-1);

Объединяйтесь в комплексной плоскости по треугольному пути от 0 до 1+1i к 1-1i к 0 путем определения waypoints.

q = integral(fun,0,0,'Waypoints',[1+1i,1-1i])
q = 0.0000 - 3.1416i

Функция с векторным знаком

Создайте функцию с векторным знаком f ( x ) = [ sin x , sin 2 x , sin 3 x , sin 4 x , sin 5 x ] и объединяйтесь от x=0 до x=1 . Задайте ‘ArrayValued’,true , чтобы оценить интеграл функции с векторным знаком или со знаком массива.

fun = @(x)sin((1:5)*x); q = integral(fun,0,1,'ArrayValued',true)
q = 1×5 0.4597 0.7081 0.6633 0.4134 0.1433

Несобственный интеграл колебательной функции

Создайте функцию f ( x ) = x 5 e — x sin x .

fun = @(x)x.^5.*exp(-x).*sin(x);

Оцените интеграл от x=0 до x=Inf , настроив абсолютные и относительные допуски.

format long q = integral(fun,0,Inf,'RelTol',1e-8,'AbsTol',1e-13)
q = -14.999999999998364

Входные параметры

fun — Подынтегральное выражение
указатель на функцию

Подынтегральное выражение, заданное как указатель на функцию, который задает функцию, которая будет интегрирована от xmin до xmax .

Для проблем со скалярным знаком функциональный y = fun(x) должен принять аргумент вектора, x , и возвратить векторный результат, y . Это обычно означает, что fun должен использовать операторы массивов вместо матричных операторов. Например, используйте .* (времена), а не * (mtimes). Если вы устанавливаете опцию ‘ArrayValued’ на true , то fun должен принять скаляр и возвратить массив фиксированного размера.

xmin Нижний предел x
вещественное число | комплексное число

Нижний предел x, заданного как действительное (конечный или бесконечный) скалярное значение или комплексное (конечное) скалярное значение. Если или xmin или xmax являются комплексными, то integral аппроксимирует интеграл по траектории от xmin до xmax по пути к прямой линии.

Типы данных: double | single
Поддержка комплексного числа: Да

xmax Верхний предел x
вещественное число | комплексное число

Верхний предел x, заданного как вещественное число (конечный или бесконечный) или (конечное) комплексное число. Если или xmin или xmax являются комплексными, integral аппроксимирует интеграл по траектории от xmin до xmax по пути к прямой линии.

Типы данных: double | single
Поддержка комплексного числа: Да

Аргументы в виде пар имя-значение

Укажите необязательные аргументы в виде пар «»имя, значение»», разделенных запятыми. Имя (Name) — это имя аргумента, а значение (Value) — соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, . NameN, ValueN.

Пример: ‘AbsTol’,1e-12 устанавливает допуск абсолютной погрешности приблизительно на 12 десятичных разрядов точности.

‘AbsTol’ Допуск абсолютной погрешности
неотрицательное вещественное число

Допуск абсолютной погрешности, заданный как пара, разделенная запятой, состоящая из ‘AbsTol’ и неотрицательного вещественного числа. integral использует допуск абсолютной погрешности, чтобы ограничить оценку абсолютной погрешности, |qQ |, где q является вычисленным значением интеграла, и Q является (неизвестным) точным значением. integral может обеспечить больше десятичных разрядов точности, если вы уменьшаете допуск абсолютной погрешности. Значением по умолчанию является 1e-10 .

Примечание

AbsTol и RelTol работают совместно. integral может удовлетворить допуск абсолютной погрешности или допуск относительной погрешности, но не обязательно обоих. Для получения дополнительной информации об использовании этих допусков смотрите раздел Tips.

Пример: ‘AbsTol’,1e-12 устанавливает допуск абсолютной погрешности приблизительно на 12 десятичных разрядов точности.

Типы данных: single | double

‘RelTol’ Допуск относительной погрешности
неотрицательное вещественное число

Допуск относительной погрешности, заданный как пара, разделенная запятой, состоящая из ‘RelTol’ и неотрицательного вещественного числа. integral использует допуск относительной погрешности, чтобы ограничить оценку относительной погрешности, |qQ | / | Q |, где q является вычисленным значением интеграла, и Q является (неизвестным) точным значением. integral может обеспечить более значительные цифры точности, если вы уменьшаете допуск относительной погрешности. Значением по умолчанию является 1e-6 .

Примечание

RelTol и AbsTol работают совместно. integral может удовлетворить допуск относительной погрешности или допуск абсолютной погрешности, но не обязательно обоих. Для получения дополнительной информации об использовании этих допусков смотрите раздел Tips.

Пример: ‘RelTol’,1e-9 устанавливает допуск относительной погрешности приблизительно на 9 значительных цифр.

Типы данных: single | double

‘ArrayValued’ Функциональный флаг со знаком массива
false или 0 (значение по умолчанию) | true или 1

Функциональный флаг со знаком массива, заданный как пара, разделенная запятой, состоящая из ‘ArrayValued’ и числового или логического 1 ( true ) или 0 ( false ). Установите этот флаг на true или 1 указывать, что fun является функцией, которая принимает скалярный вход и возвращает вектор, матрицу или массив N-D вывод.

Значение по умолчанию false указывает, что fun является функцией, которая принимает векторный вход и возвращает векторный выходной параметр.

Пример: ‘ArrayValued’,true указывает, что подынтегральное выражение является функцией со знаком массива.

‘Waypoints’ Интегрирование waypoints
вектор

Интегрирование waypoints, заданный как пара, разделенная запятой, состоящая из ‘Waypoints’ и вектор вещественных или комплексных чисел. Используйте waypoints, чтобы указать на точки в интервале интегрирования, что вы хотели бы, чтобы интегратор использовал в начальной mesh:

  • Добавьте больше точек оценки около интересных функций функции, такой как локальные экстремальные значения.
  • Объединяйтесь эффективно через разрывы подынтегрального выражения путем определения местоположений разрывов.
  • Выполните комплексные контурные интегрирования путем определения комплексных чисел как waypoints. Если xmin , xmax или какая-либо запись waypoints вектора являются комплексными, то интегрирование выполняется по последовательности путей к прямой линии в комплексной плоскости. В этом случае все пределы интегрирования и waypoints должны быть конечными.

Не используйте waypoints, чтобы задать особенности. Вместо этого разделите интервал и добавьте, что результаты разделяют интеграции с особенностями в конечных точках.

Пример: ‘Waypoints’,[1+1i,1-1i] задает два комплекса waypoints вдоль интервала интегрирования.

Типы данных: single | double
Поддержка комплексного числа: Да

Советы

  • Функция integral пытается удовлетворить:
abs(q - Q) 

Ссылки

[1] Л.Ф. Шемпин “Векторизовал Адаптивную Квадратуру в MATLAB ® ”, Журнал Вычислительной и Прикладной математики, 211, 2008, pp.131–140.

Смотрите также

Темы

  • Интегрирование числовых данных
  • Интегрирование, чтобы найти длину дуги
  • Комплексные линейные интегралы
  • Создания указателя на функцию
  • Параметризация функций
Представленный в R2012a
Документация MATLAB
Поддержка
  • MATLAB Answers
  • Помощь в установке
  • Отчеты об ошибках
  • Требования к продукту
  • Загрузка программного обеспечения

© 1994-2019 The MathWorks, Inc.

  • Условия использования
  • Патенты
  • Торговые марки
  • Список благодарностей
Для просмотра документации необходимо авторизоваться на сайте
Войти Памятка переводчика

1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.

2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.

3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.

4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.

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

Вычисление интегралов различными методами

Вычисление интегралов в MATLAB

Интеграл

Доброго времени суток! Сегодня я хочу вам показать, как вычислять интегралы различными методами. Сразу скажу, что пакет Matlab уже имеет набор стандартных решений интегралов, их количество достаточно для реализации разных задач, но иногда (актуально для учебных заведений) требуется реализовать метод, написав программу. На самом деле такая реализация методов нерациональна, так как теряется смысл использования Matlab. Но не мне осуждать, мне — решать. Алгоритм реализации того или иного метода есть в интернете в свободном доступе, и сложности могут возникнуть только с синтаксисом языка в Matlab. Разберём типовую задачу решения интеграла: Вычислить, разбив на количество отрезков n=100

Следующими методами: • прямоугольники вперёд (правыми прямоугольниками);
• прямоугольники назад (левыми прямоугольниками);
• трапеций;
• трапеций MATLAB;
• Симпсона MATLAB;
Как вы наверняка догадались, MATLAB — означает, что будем реализовывать через стандартную функцию.
Для начала объявим необходимые переменные:

clear all %очищаем рабочее пространство n = 100; a1 = 0.4; %Начало определённого интеграла b1 = 0.5; %Конец определённого интеграла h = (b1-a1) / n; %Находим шаг x=a1:h:b1; %задаем шаг 

• Метод правых прямоугольников:

s=0; for i=2:n s=s+ (1./(1 + sin(x(i))+x(i))); end; s=s*h

Вывод:
s =
0.0526

• Метод левых прямоугольников:

for i=1:n-1 s=s+ (1./(1 + sin(x(i))+x(i))); end; s=s*h

Вывод:
s =
0.0526

• Метод трапеций:

Тут легче уже объявить функцию у.

y=(1./(1 + sin(x)+x)); F = 0; m = 2; while m = n F = F + (x(m)-x(m-1))*0.5*(y(m)+ y(m-1)); m = m +1; end F

Вывод:
F =
0.0526

• Метод трапеций MATLAB:

y=(1 ./(1 + sin(x)+ x)); trapz(x,y) 

Просто, не так ли?
Вывод:
ans =
0.0531

Как видите, уже заметно, что у всех методов свои погрешности.

• Метод Симпсона MATLAB:

quad('1./(1 + sin(x)+x)',a1,b1,h)%метод Симпсона 

Совсем просто, не так ли? =)
Вывод:
ans =
0.0531
Как видите, ничего страшного.
Давайте для закрепления материала, разберём ещё одну задачку: Интегрировать с шагом 0.001

Следующими методами: • прямоугольники вперёд (правыми прямоугольниками);
• прямоугольники назад (левыми прямоугольниками);
• трапеций;
• трапеций MATLAB;
• Симпсона MATLAB;

clear all a1 = 0.4; %Начало определённого интеграла b1 = 0.6; %Конец определённого интеграла h = 0.001; %Находим шаг x=a1:h:b1; %задаем шаг n = (b1- a1)/h; 

• Метод правых прямоугольников:

s=0; for i=2:n s=s+ (sqrt(x(i)) .* cos( x(i).*x(i) )); end; s=s*h

Вывод:
s =
0.1349

• Метод левых прямоугольников:

s=0; for i=1:n-1 s=s+ (sqrt(x(i)) .* cos( x(i).*x(i) )); end; s=s*h

Вывод:
s =
0.1348

• Метод трапеций:

y=(sqrt(x) .* cos( x.*x )); F = 0; m = 2; while m = n F = F + (x(m)-x(m-1))*0.5*(y(m)+ y(m-1)); m = m +1; end F

Вывод:
F =
0.1349

• Метод трапеций MATLAB:

trapz(x,y) 

Вывод:
ans =
0.1363

• Метод Симпсона MATLAB:

quad('sqrt(x) .* cos( x.*x )',a1,b1,h) 

Вывод:
ans =
0.1363
Надеюсь, теперь у вас не возникнет проблем с вычислением интегралов в Matlab.
Если у вас остались вопросы, то задавайте их в комментариях. Исходники:
Скачать исходники задачи — 1
Скачать исходники задачи — 2

Поделиться ссылкой:

Интегрирование в Matlab

Интегрирование в Matlab

Доброго времени суток! Мы продолжаем говорить о численных методах. И сегодня мы поговорим о реализации численных методов интегрирования в среде Matlab.

Численное интегрирование в Matlab

Геометрический смысл интегрирования

Геометрический смысл интегрирования — это нахождение площади, которая находится под интегрируемой функцией. На рисунке показана площадь для определённого интеграла, ограниченного a и b. Численное интегрирование не только в Matlab, но и в других средах, строится именно на нахождении площади. Для начала мы разберем простые методы:

Методы прямоугольников

  • метод правых прямоугольников
  • метод левых прямоугольников
  • метод средних прямоугольников

Методы левых/правых/средних прямоугольников

Суть их в построение под кривой прямоугольников одинаковый ширины и нахождение их суммарной площади.Как видите, они различаются только точкой соприкосновения с кривой. Методы достаточны простые в реализации. Однако, погрешности данных методов весьма высоки. Точнее говоря, методы прямоугольников имеют первый порядок точности. Это означает, что ошибка пропорциональна шагу и накапливается со временем. Соответственно, чем меньше шаг, тем меньшую ошибку мы получим.

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

Необходимо посчитать интеграл функции f(x) = xe sin(x) x с шагом разбиения h = 0.02 на интервале от 0 до 1.

f=inline('x.*exp((sin(x)).^x)'); a=0; b=1; h=0.02; N=((b-a)/h)+1; i=1:N; %количество шагов x=a:h:b; %вычисление координат узлов сетки y=feval(f,x); %вычисление значений функции в узлах сетки m=2:N; y1(m-1)=y(m); Fr=sum(h*y1) 
Fr = 1.0825 

Функция feval (родственник функции eval) — интерпретирует и вычисляет текстовую строку, которая может содержать либо арифметическое выражение, либо инструкцию, либо обращение к функции, однако, в отличии от eval, интерпретирует и вычисляет текстовую строку, которая может содержать либо арифметическое выражение, либо инструкцию, либо обращение к функции.

Метод трапеций

Метод трапеций

Ещё одни популярный и в тоже время простой метод — метод трапеций. Аналогично методу прямоугольников строятся трапеции под кривой и находится их суммарная площадь. Данный метод имеет второй порядок точности (ошибка пропорциональна шагу в квадрате).

В Matlab метод трапеций реализован двумя функциями:

Первую функцию обычно используют при работе с табличными данными или векторами. Откликом функции является n-интегралов, где n — число элементов вектора или элементов в каждом столбце матрицы. Следующие примеры отображают работу этой функции.

Пусть функция y(x) имеет значения, представленные в виде следующего вектора: y = [1,2,3,4,5,6,7,8,9,10] . Необходимо вычислить:

При этом a = 1; b = 1, 2, 3, 4 …,10.
Пишем в Matlab:

y=[1,2,3,4,5,6,7,8,9,10]; cumtrapz(y) 
ans = 0 1.5000 4.0000 7.5000 12.0000 17.5000 24.0000 31.5000 40.0000 49.5000 
  • Пример 3

Теперь рассмотрим вариант работы с вектором и матрицей:
Функция y(x) задана в виде матрицы y(x) = [1 3 5; 3 5 7; 4 6 8; 4 7 9; 5 7 10] . При этом аргумент представляет собой вектор: x = [1,3,7,9,10].

y = [1 3 5; 3 5 7; 4 6 8; 4 7 9; 5 7 10]; x = [1,3,7,9,10]; cumtrapz(x,y) 
ans = 0 0 0 4.0000 8.0000 12.0000 18.0000 30.0000 42.0000 26.0000 43.0000 59.0000 30.5000 50.0000 68.5000 

Вторая функция для интегрирования, работающая по методу трапеций Matlab — trapz(). Наиболее используемая студентами, так как позволяет работать не только с векторами и матрицами, но и с аналитической формой подынтегральной функции. Выглядит это примерно так:

Необходимо вычислить определённый интеграл в диапазоне от 1 до 10 с шагом 0.5 для заданной функции:

x = 1:0.5:10; y = x.*exp(x) + log(x) +1; trapz(y) 
ans = 4.0657e+005 

Как видите, ничего сложного. А иногда даже удобнее некоторых онлайн сервисов для расчёта интегралов.

Метод Симпсона

Метод Симпсона

Преимущество этого метода в том, что точки, взятые на каждом шаге на кривой, интерполируются полиномом второй степени. Проще говоря, соединяются параболой. Это даёт методу четвёртый порядок точности.

На рисунке красная кривая (1) - функция, зелёная(2) - полином.

В Matlab интегрирование с помощью метода Симпсона производит функция quad. Сразу разберем пример.

Вычислить определённый интеграл с точностью 10 -4 методом Симпсона.

%стандартным оператором quad('x.*exp(-x)+log(x)+1',0.001,10,1e-4) %зададим погрешность 10*-4 ans = 24.0323 

Точность вычислений задается 4 параметром функции quad. Также, следует отметить, что в задании нижним пределом является 0, а мы использовали число 0.001. Это связано с тем, что при подстановке 0 функция не определена, а точнее, натуральный логарифм не существует.

% не стандартным оператором F = @(x) x*exp(-x)+log(x)+1; %функция a=0.01; %пределы интегрирования b=10; n=100; %количество частей деления h=(b-a)/n; %определяем шаг integ = F(a); for i=1:1:((n/2)-1) %сам алгоритм Симпсона x=a+2*h*i; integ=integ+2*F(x)+4*F(x+h); end integ=h*integ/3; 24.091 

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

Символьное интегрирование в Matlab

Часто нам необходимо найти интеграл от какой либо функции, не зная пределов интегрирования. Тогда нам нужно взять интеграл в общем или символьном виде. В Matlab за символьное интегрирование отвечает функция int. Она принимает как минимум 2 параметра: 1 — функция, 2 — имя переменной по которой берется интеграл. int(fun, var). Рассмотрим короткий пример:

Вычислить неопределённый интеграл:

syms x %Определение переменной f=sym('a^x*e^(-x)'); %Определение функции int(f,x) %Вычисление неопределенного интеграла ans = 1/(log(a)-log(e))*a^x*e^(-x) 

Следует отметить, что функция int также может считать и определенные интегралы, для этого нужно задать пределы интегрирования в 3 и 4 параметры функции соответственно.

Заключение

На этом я хочу закончить сегодняшнюю тему «Интегрирование в Matlab». Не забывайте, что Matlab позволяет программировать сложные алгоритмы, а не только использовать встроенный функционал. Любой численный метод можно реализовать и вызывать как функцию. Если у вас остались вопросы, то задавайте их в комментариях.

В этот раз без исходников, примеры небольшие.

Поделиться ссылкой:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *