numeric::fsolve

Ищите числовой корень системы уравнений

Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.

Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразуют Notebook MuPAD в Live скрипты MATLAB.

Синтаксис

numeric::fsolve(eq, x, options)
numeric::fsolve(eq, x = a, options)
numeric::fsolve(eq, x = a .. b, options)
numeric::fsolve(eqs, [x1, x2, …], options)
numeric::fsolve(eqs, {x1, x2, …}, options)
numeric::fsolve(eqs, [x1 = a1, x2 = a2, …], options)
numeric::fsolve(eqs, {x1 = a1, x2 = a2, …}, options)
numeric::fsolve(eqs, [x1 = a1 .. b1, x2 = a2 .. b2, …], options)
numeric::fsolve(eqs, {x1 = a1 .. b1, x2 = a2 .. b2, …}, options)

Описание

numeric::fsolve(eqs, ...) возвращает числовое приближение решения системы уравнений eqs.

Это - MuPAD® числовой решатель для нелинейных систем уравнений.

Примечание

По умолчанию эта стандартная программа возвращает только одно числовое решение!

Уравнения не должны содержать символьные объекты кроме неизвестных, которые не могут быть преобразованы в численные значения через float. И т.д. приняты символьные объекты, такие как π или. То же самое сохраняется для начальных значений и поисковых областей значений. Поисковые области значений могут содержать. См. Пример 2.

numeric::fsolve реализует чисто числовой корневой поиск типа Ньютона с рабочей точностью, установленной переменной окружения DIGITS. Хорошо разделенные простые корни должны быть точными в этой точности. Однако несколько корней или плохо разделенных корней могут быть вычислены с ограниченной точностью. См. Пример 3.

Примечание

Для систем уравнений выражения, определяющие уравнения, должны иметь символьную производную!

Сверхрешительные системы (т.е. больше уравнений, чем indeterminates) не приняты. Однако может быть больше indeterminates, чем уравнения. См. Пример 4.

Определение indeterminates [x1, x2, …] без начальных значений или поисковых областей значений эквивалентно поисковым областям значений [x_1 = -infinity .. infinity, x_2 = -infinity .. infinity, dots]. Обратите внимание, однако, что пользователь должен помочь numeric::fsolve путем предоставления определенных поисковых спектров каждый раз, когда возможный! Если комплексная начальная точка или поисковая область значений, включающая комплексное число, заданы для по крайней мере одних из неизвестных, поиск расширен к целой комплексной плоскости для всех переменных, для которых не дан никакой явный поисковый интервал.

Для действительных уравнений и действительных начальных точек или поисковых областей значений, внутренняя итерация Ньютона будет обычно производить действительные значения, т.е. numeric::fsolve поиски действительных корней только (если квадратные корни, логарифмы и т.д., оказывается, не производят комплексные числа из действительного входа). Используйте комплексные начальные точки или поисковые области значений, чтобы искать комплексные корни действительных уравнений. См. Пример 5.

Начальные значения и поисковые области значений могут быть смешаны. См. Пример 6.

Поисковые спектры должны только быть предоставлены, если решение, как известно, существует в поисковой области значений. В противном случае поиск может занять время перед numeric::fsolve сдается.

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

С поисковой стратегией по умолчанию RestrictedSearch, только решения из поисковой области значений приняты, даже если решения вне поисковой области значений найдены внутренне. А именно, если поиск располагается, такие как x = a .. b задан для переменной x, затем решения, удовлетворяющие min(ℜ(a), ℜ(b)) ≤ ℜ(x) ≤ max(ℜ(a), ℜ(b)) и min(ℑ(a), ℑ(b)) ≤ ℑ(x) ≤ max(ℑ(a), ℑ(b)) разыскиваются. Таким образом, значения a, b задайте левый нижний и правый верхний угол прямоугольной области поиска в комплексной плоскости когда RestrictedSearch стратегия используется.

С поисковой стратегией UnrestrictedSearch, любое решение внутри или снаружи поисковой области значений принято и возвращено. См. Пример 7.

Если начальные значения для всего indeterminates введены, то одна итерация Ньютона с этими исходными данными запускается. Это или приводит к решению или numeric::fsolve сдается и возвращает FAIL. То же самое сохраняется, если поиск располагается x = a .. a или [x_1 = a_1 .. a_1, x_2 = a_2 .. a_2, dots] из нулевой длины заданы.

Примечание

Риск отказа высок при введении плохих начальных значений! Начальные значения являются соответствующими, только если известно достаточно хорошее приближение решения! С другой стороны, введение хороших начальных значений является самым быстрым путем к решению. См. Пример 8.

Если по крайней мере один из indeterminates имеет нетривиальную поисковую область значений, то numeric::fsolve итерации использования нескольких Ньютонов с различными начальными значениями из поисковой области значений. См. Пример 9. Поисковые области значений в сочетании с опцией UnrestrictedSearch обеспечьте более высокий шанс обнаружения корней, чем (плохие) начальные значения!

Примечание

Определяемые пользователем предположения, такие как assume(x > 0) не учтены в числовом поиске! Предоставьте поисковые спектры вместо этого! См. Пример 2.

Примечание

Сходимость может быть медленной для нескольких корней! Кроме того, numeric::fsolve может не обнаружить такие корни!

Используйте linsolve или numeric::linsolve для систем линейных уравнений.

Используйте numeric::realroots, если все действительные корни одного неполиномиального действительного уравнения в конечной области значений желаемы.

Используйте polylib::realroots, если все действительные корни действительного одномерного полинома желаемы.

Используйте numeric::polyroots, если все действительные и комплексные корни одномерного полинома желаемы.

Используйте numeric::solve, если все корни многомерной полиномиальной системы желаемы.

Стандартный numeric::solve обеспечивает общий интерфейс ко всем этим числовым решателям.

Взаимодействия среды

Функция чувствительна к переменной окружения DIGITS, который определяет числовую рабочую точность.

Примеры

Пример 1

Мы вычисляем корни синусоидальной функции:

numeric::fsolve(sin(x) = 0, x)

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

numeric::fsolve(sin(x), x, Random)

numeric::fsolve(sin(x), x, Random)

Конкретные решения могут быть выбраны соответствующей начальной точкой близко к требуемому решению, или поисковым интервалом:

numeric::fsolve(sin(x), x = 3), 
numeric::fsolve(sin(x), x = -4 .. -3)

Решения найдены numeric::fsolve может использоваться в subs и assign заменять или присваивать indeterminates:

eqs := [x^2 = sin(y), y^2 = cos(x)]:
solution := numeric::fsolve(eqs, [x, y])

eval(subs(eqs, solution))

assign(solution): x, y

delete eqs, solution, x, y:

Пример 2

Мы демонстрируем использование поисковых областей значений. Следующая система имеет решения с положительным и отрицательным x. Решение с x ≥ 0 получено с поисковым интервалом x = 0 .. infinity:

numeric::fsolve([x^2 = exp(x*y), x^2 = y^2], [x = 0 .. infinity, y])

Мы ищем решение с x ≤ 0:

numeric::fsolve([x^2 = exp(x*y), x^2 = y^2], [x = -infinity .. 0, y])

Пример 3

Несколько корней могут только быть вычислены с ограниченной точностью:

numeric::fsolve(expand((x - 1/3)^5), x = 0.3)

Пример 4

Следующая система уравнений является вырожденной и имеет семейство решений с 1 параметром. Каждый вызов numeric::fsolve выбирает одно случайное решение:

numeric::fsolve([x^2 - y^2, x^2 - y^2], [x, y], Random) $ i = 1 .. 3

Уравнение может также быть задано как недоопределенная система:

numeric::fsolve([x^2 - y^2], [x, y])

Пример 5

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

numeric::fsolve(sin(x) + cos(x)^2 = 3, x)

С комплексным начальным значением найдено решение:

numeric::fsolve(sin(x) + cos(x)^2 = 3, x = I)

Также комплексные поисковые диапазоны могут быть указаны. В следующем внутренняя начальная точка является случайным значением на линии от 2 + I к 3 + 2*I. Решения приняты, если они лежат в комплексном прямоугольнике с левым нижним углом 2 + I и правый верхний угол 3 + 2*I:

numeric::fsolve(sin(x) + cos(x)^2 = 3, x = 2 + I .. 3 + 2*I)

Пример 6

Начальные значения и поисковые интервалы могут быть смешаны:

numeric::fsolve([x^2 + y^2 = 1, y^2 + z^2 = 1, x^2 + z^2 = 1],
                [x = 1, y = 0 .. 10, z])

Пример 7

С UnrestrictedSearch, поисковые интервалы только используются в выборе начальных значений для внутреннего поиска Ньютона. Числовая итерация может дрейфовать к решению вне поисковой области значений:

eqs := [x*sin(10*x) = y^3, y^2 = exp(-2*x/3)]: 
numeric::fsolve(eqs, [x = 0 .. 1, y = -1 .. 0], UnrestrictedSearch)

Со стратегией по умолчанию RestrictedSearch, только решения в поисковой области значений приняты:

numeric::fsolve(eqs, [x = 0 .. 1, y = -1 .. 0])

В последнем поиске также было найдено предыдущее решение вне поисковой области значений. С опцией MultiSolutions, numeric::fsolve возвращает последовательность всех решений, которые были найдены во внутреннем поиске:

numeric::fsolve(eqs, [x = 0 .. 1, y = -1 .. 0], MultiSolutions)

delete eqs:

Пример 8

Обычно, наиболее часто потрачен, внутренне ища некоторые (грубые) приближения корня. Если корни высокой точности требуются, рекомендуется вычислить первые приближения с умеренными значениями DIGITS и используйте их в качестве начальных значений для усовершенствованного поиска:

eq := exp(-x) = x:
DIGITS := 10: 
firstApprox := numeric::fsolve(eq, x)

Этот выход подходит, как введено определение начального значения для x:

DIGITS := 1000: numeric::fsolve(eq, firstApprox)

delete eq, firstApprox, DIGITS:

Пример 9

Определение начальных значений для indeterminates запускает одну итерацию Ньютона. Это может перестать работать, если начальные значения не достаточно близко к решению:

eq := [x*y = x + y - 4, x/y = x - y + 4]:
numeric::fsolve(eq, [x = 1, y = 1])

Если поисковый диапазон указан для по крайней мере одних из неизвестных, то итерации на Несколько ньютонов со случайными начальными значениями в поисковой области значений используются, пока решение не найдено или до numeric::fsolve сдается:

numeric::fsolve(eq, [x = 1, y = 0 .. 10])

delete eq:

Параметры

eq

Арифметическое выражение или уравнение в одном неопределенном x. Выражение eq интерпретирован как уравнение eq = 0.

eqs

Список, набор, array, или matrix (Cat::Matrix) из выражений или уравнений в нескольких indeterminates x1x2 ... Выражения интерпретированы как однородные уравнения.

xx1, x2 …

Идентификаторы или индексированные идентификаторы, которые будут решены для.

a, a1, a2, …

Действительный или объединяют числовые начальные значения для внутреннего поиска. Как правило, грубые приближения решения.

a .. b, a1 .. b1, a2 .. b2, …

Области значений численных значений, задающих поисковые интервалы для числового корня.

Опции

RestrictedSearch

Делает numeric::fsolve возвратите только числовые корни в пользовательской поисковой области значений x = a .. b и [x_1 = a_1 .. b_1, x_2 = a_2 .. b_2, Symbol::hellip], соответственно. Это - поисковая стратегия по умолчанию, если поисковый диапазон указан для по крайней мере одних из неизвестных.

Если корень с компонентами (r 1, r 2, …) найден, это проверяется, удовлетворяют ли min ( (a i), (b i)) ≤ (r i) ≤ max ( (a i), (b i)) и min ( (a i), (b i)) ≤ (r i) ≤ max ( (a i), (b i)). Если корень не в поисковой области значений, поиск продолжен. Обратите внимание на то, что решения вне поисковой области значений могут быть найдены внутренне. К ним можно получить доступ с опцией MultiSolutions. Смотрите пример 7.

UnrestrictedSearch

Позволяет numeric::fsolve найти и возвратить решения вне указанного поискового диапазона. При использовании этой опции поисковая область значений только используется, чтобы выбрать случайные начальные точки для внутреннего числового поиска.

Эта опция выключает поисковую стратегию RestrictedSearch. С UnrestrictedSearch, numeric::fsolve останавливает его внутренний поиск каждый раз, когда корень найден, даже если корень не в указанном поисковом диапазоне. Начальные точки для внутреннего поиска Ньютона взяты из поисковой области значений.

MultiSolutions

Делает numeric::fsolve возвратите все решения, найденные во внутреннем поиске

Эта опция только оказывает влияние, когда используется с поисковой стратегией по умолчанию RestrictedSearch. Возвращена последовательность всех корней, найденных во внутреннем поиске. См. Пример 7.

Random

При использовании этой опции, несколькими вызовами numeric::fsolve с тем же входом параметры может произвести различные корни.

При использовании этой опции случайные начальные значения выбраны для внутреннего поиска. Следовательно, вызов numeric::fsolve несколько раз теми же параметрами может привести к различным решениям. Это может быть полезно, когда несколько корней одного и того же уравнения или системы уравнений желаемы.

Возвращаемые значения

Один числовой корень возвращен как список уравнений [x = value] или [x1 = value1, x2 = value2, …], соответственно. FAIL возвращен, если никакое решение не найдено. С опцией MultiSolutions, последовательности решений могут быть возвращены.

Алгоритмы

Внутренне система уравнений f (x) = 0 решена модифицированной итерацией Ньютона с некоторым адаптивно выбранным размером шага t. Для вырожденных или плохо обусловленных Якобианов реализована стратегия минимизации. Для скалярных действительных уравнений, numeric::realroot используется, если действительный конечный поисковый диапазон указан.