- •2. Matlab.
- •2.8. Решение уравнений в Matlab.
- •2.8.1. Решение систем линейных уравнений [3, с.35, 125].
- •2.8.2. Поиск не комплексных корней уравнений (нахождение нулей функций) [1, с. 246; 3, с. 133].
- •2.8.2.1. Задание в функции fzero второго параметра в виде вектора.
- •2.8.2.2. Создание встраиваемой функции.
- •Inline function:
- •Inline function:
- •2.8.2.4. Использование указателя @ при обращении к исследуемой м-функции.
- •2.8.2.5. Обращение к fzero с двумя выходными аргументами.
- •2.8.2.3. Использование анонимной функции.
- •2.8.2.6. Обращение к fzero с тремя выходными аргументами.
- •2.8.3. Вычисление комплексных корней полиномов.
- •2.8.4. Нахождение экстремумов функций.
- •2.8.4.1. Минимизация функции одной переменной.
- •2.8.4.2.Минимизация функции нескольких переменных.
- •1.5000 0.5000 % Координаты искомой точки минимума
- •2.8.5.Обращение к файлам функций при решении и оптимизации уравнений [1, с. 243].
- •2.8.6. Решение систем нелинейных уравнений [1, с. 733].
2.8.2.1. Задание в функции fzero второго параметра в виде вектора.
Вместо начального приближения вторым параметром fzero можно задать интервал, на котором следует найти корень:
» х2 = fzero('myf ', [-3 -1])
x2 =
-1.85392745969615
На границах указываемого интервала функция должна принимать значения разных знаков, иначе выведется сообщение об ошибке!
В качестве исследуемой функции при задании интервала поиска можно также использовать и встроенную математическую функцию, например
» fzero('sin', [2 4])
ans =
3.14159265358979
2.8.2.2. Создание встраиваемой функции.
При решении уравнений с помощью fzero может использоваться так называемая “встраиваемая функция”, записываемая при помощи функции inline. Формат создания функции с именем “Имя_функции” выглядит следующим образом:
Имя_функции = inline('формула', список_аргументов)
Список аргументов не обязателен, а ' формула' является текстовой строкой и задает выражение для вычисления значения функции.
Следующий пример демонстрирует создание в рабочей среде встраиваемой функции fun :
» fun = inline('sin(x) - х.^2.*cos(x)')
fun =
Inline function:
fun(x) = sin(x) - x.^2.*cos(x)
Inline-фунция fun может быть использована как любая другая функция MATLAB, например:
» у = fun(0.5)
y =
0.2600
Если функция зависит от нескольких переменных, то все они являются аргументами введенной inline-функции и располагаются в алфавитном порядке:
» funl = inline('sin(a*x) - х.^2.*cos(b*х)')
funl =
Inline function:
funl(a,b,x) = sin(a*x) - x."2. *cos(b*x)
Для изменения порядка следования аргументов их следует перечислить через запятые в списке после выражения, определяющего вид функции:
» fun2 = inline('sin(a*x) - х.^2.*соs(b*х)', 'х', 'а', 'b' )
fun2 =
Inline function:
fun2(x, a, b) = sin(a*x) - x. ^2.*cos(b*x)
Если в списке случайно пропущен хотя бы один из аргументов, то inline-функцией воспользоваться не удастся:
» fun3 = inline('sin(a*x) - х.^2.*cos(b*x)', 'x' 'b')
fun3 =
Inline function:
fun3(x, b) = sin(a*x) - x.^2.*cos(b*x)
Даже при наличии переменной “а” в рабочей среде вызов функции fun3 приведет к сообщению о том, что аргумент а не задан:
» а = 1 ;
» fun3(5, 0)
??? Error using ==> inlineeval
Error in inline expression ==> sin(a*x) - x. ^2 .*cos(b*x)
??? Error using ==> eval
Undefined function or variable 'a',
Error in ==> inline.subsref at 25
INLINE_OUT_ = inlineeval(INLINE_INPUTS_, INLINE_OBJ_.inputExpr, INLINE_OBJ_.expr);
Этот пример демонстрирует, что при вычислении значения встраиваемой функции переменные рабочей среды недоступны. Все аргументы функции inline должны быть символьными строками, заключенными в апострофы, или строковыми переменными. В противном случае получается недопустимая конструкция.
Пример создания М-функции с помощью функции inline при определении корней уравнения с помощью функции fzero :
» fun = inline( 'sin(x) - x.^2 .*cos (x) ')
fun =
Inline function:
fun(x) = sin(x) – x .^ 2 .* cos(x)
» xl = fzero(fun, -5)
xl =
-4.7566
» fun(xl)
ans =
2.6645e-015
