числовой::
Ищите числовой корень системы уравнений
Блокноты 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
, который определяет числовую рабочую точность.
Мы вычисляем корни синусоидальной функции:
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
, если действительная конечная поисковая область значений задана.