числовой::

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

Блокноты 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. И т.д. приняты символьные объекты, такие как π или. То же самое сохраняется для начальных значений и поисковых областей значений. Поисковые области значений могут содержать. Cf. Пример 2.

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

Примечание

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

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

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

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

Начальные значения и поисковые области значений могут быть смешаны. Cf. Пример 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 любое решение внутри или снаружи поисковой области значений принято и возвращено. Cf. Пример 7.

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

Примечание

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

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

Примечание

Определяемые пользователем предположения, такие как assume(x > 0) не учтены в числовом поиске! Предоставьте поисковые спектры вместо этого! Cf. Пример 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 x1, x2... Выражения интерпретированы как однородные уравнения.

x, x1, 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. Возвращена последовательность всех корней, найденных во внутреннем поиске. Cf. Пример 7.

Random

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

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

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

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

Алгоритмы

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