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
, который определяет числовую рабочую точность.
Мы вычисляем корни синусоидальной функции:
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:
Мы демонстрируем использование поисковых областей значений. Следующая система имеет решения с положительным и отрицательным 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])
Несколько корней могут только быть вычислены с ограниченной точностью:
numeric::fsolve(expand((x - 1/3)^5), x = 0.3)
Следующая система уравнений является вырожденной и имеет семейство решений с 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])
Следующее уравнение не имеет никакого действительного решения. Следовательно, числовой поиск с действительными сбоями начальных значений:
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)
Начальные значения и поисковые интервалы могут быть смешаны:
numeric::fsolve([x^2 + y^2 = 1, y^2 + z^2 = 1, x^2 + z^2 = 1], [x = 1, y = 0 .. 10, z])
С 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:
Обычно, наиболее часто потрачен, внутренне ища некоторые (грубые) приближения корня. Если корни высокой точности требуются, рекомендуется вычислить первые приближения с умеренными значениями DIGITS
и используйте их в качестве начальных значений для усовершенствованного поиска:
eq := exp(-x) = x: DIGITS := 10: firstApprox := numeric::fsolve(eq, x)
Этот выход подходит, как введено определение начального значения для x:
DIGITS := 1000: numeric::fsolve(eq, firstApprox)
delete eq, firstApprox, DIGITS:
Определение начальных значений для 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:
|
Арифметическое выражение или уравнение в одном неопределенном |
|
Список, набор, |
|
Идентификаторы или индексированные идентификаторы, которые будут решены для. |
|
Действительный или объединяют числовые начальные значения для внутреннего поиска. Как правило, грубые приближения решения. |
|
Области значений численных значений, задающих поисковые интервалы для числового корня. |
|
Делает Если корень с компонентами (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)). Если корень не в поисковой области значений, поиск продолжен. Обратите внимание на то, что решения вне поисковой области значений могут быть найдены внутренне. К ним можно получить доступ с опцией |
|
Позволяет Эта опция выключает поисковую стратегию |
|
Делает Эта опция только оказывает влияние, когда используется с поисковой стратегией по умолчанию |
|
При использовании этой опции, несколькими вызовами При использовании этой опции случайные начальные значения выбраны для внутреннего поиска. Следовательно, вызов |
Один числовой корень возвращен как список уравнений [x = value]
или [x1 = value1, x2 = value2, …]
, соответственно. FAIL
возвращен, если никакое решение не найдено. С опцией MultiSolutions
, последовательности решений могут быть возвращены.
Внутренне система уравнений f (x) = 0 решена модифицированной итерацией Ньютона с некоторым адаптивно выбранным размером шага t. Для вырожденных или плохо обусловленных Якобианов реализована стратегия минимизации. Для скалярных действительных уравнений, numeric::realroot
используется, если действительный конечный поисковый диапазон указан.