Решите уравнения численно
S = vpasolve(eqn)
S = vpasolve(eqn,var)
S = vpasolve(eqn,var,init_guess)
Y = vpasolve(eqns)
Y = vpasolve(eqns,vars)
Y = vpasolve(eqns,vars,init_guess)
[y1,...,yN] = vpasolve(eqns)
[y1,...,yN] = vpasolve(eqns,vars)
[y1,...,yN] = vpasolve(eqns,vars,init_guess)
___ = vpasolve(___,'Random',true)
численно решает систему уравнений Y
= vpasolve(eqns
,vars
,init_guess
)eqns
для переменных vars
с помощью начальных значений или поисковой области значений init_guess
.
[
численно решает систему уравнений y1,...,yN
] = vpasolve(eqns
,vars
,init_guess
)eqns
для переменных, заданных vars
с помощью начальных значений или поисковой области значений init_guess
.
___ = vpasolve(___,
использует случайную отправную точку для нахождения решений. Используйте этот вход, чтобы не возвращать то же решение неоднократно для неполиномиальных уравнений. Если вы задаете отправные точки для всех переменных, установка 'Random'
,true)'Random'
к true
не имеет никакого эффекта.
Для полиномиальных уравнений vpasolve
возвращает все решения:
syms x vpasolve(4*x^4 + 3*x^3 + 2*x^2 + x + 5 == 0, x)
ans = - 0.88011377126068169817875190457835 + 0.76331583387715452512978468102263i - 0.88011377126068169817875190457835 - 0.76331583387715452512978468102263i 0.50511377126068169817875190457835 + 0.81598965068946312853227067890656i 0.50511377126068169817875190457835 - 0.81598965068946312853227067890656i
Если vpasolve
возвращает пустой объект, то никакое решение не было найдено.
eqns = [3*x+2, 3*x+1]; vpasolve(eqns, x)
ans = Empty sym: 0-by-1
Для неполиномиальных уравнений vpasolve
возвращает первое решение, которое он находит:
syms x vpasolve(sin(x^2) == 1/2, x)
ans = -226.94447241941511682716953887638
При решении системы уравнений используйте один выходной аргумент, чтобы возвратить решения в форме массива структур:
syms x y S = vpasolve([x^3 + 2*x == y, y^2 == x], [x, y])
S = struct with fields: x: [6×1 sym] y: [6×1 sym]
Отобразите решения путем доступа к элементам массива структур S
:
S.x
ans = 0.2365742942773341617614871521768 0 - 0.28124065338711968666197895499453 + 1.2348724236470142074859894531946i - 0.28124065338711968666197895499453 - 1.2348724236470142074859894531946i 0.16295350624845260578123537890613 - 1.6151544650555366917886585417926i 0.16295350624845260578123537890613 + 1.6151544650555366917886585417926i
S.y
ans = 0.48638903593454300001655725369801 0 0.70187356885586188630668751791218 + 0.87969719792982402287026727381769i 0.70187356885586188630668751791218 - 0.87969719792982402287026727381769i - 0.94506808682313338631496614476119 + 0.85451751443904587692179191887616i - 0.94506808682313338631496614476119 - 0.85451751443904587692179191887616i
При решении системы уравнений используйте несколько выходных аргументов, чтобы присвоить решения непосредственно выходных переменных. Чтобы гарантировать правильный порядок возвращенных решений, задайте переменные явным образом. Порядок, в котором вы задаете переменные, задает порядок, в котором решатель возвращает решения.
syms x y [sol_x, sol_y] = vpasolve([x*sin(10*x) == y^3, y^2 == exp(-2*x/3)], [x, y])
sol_x = 88.90707209659114864849280774681 sol_y = 0.00000000000013470479710676694388973703681918
Постройте две стороны уравнения, и затем используйте график задать исходные предположения для решений.
Постройте левые и правые стороны уравнения .
syms x eqnLeft = 200*sin(x); eqnRight = x^3 - 1; fplot([eqnLeft eqnRight]) title([texlabel(eqnLeft) ' = ' texlabel(eqnRight)])
Это уравнение имеет три решения. Если вы не задаете исходное предположение (нулевое приближение), vpasolve
возвращает первое решение, которое это находит:
vpasolve(200*sin(x) == x^3 - 1, x)
ans = -0.0050000214585835715725440675982988
Найдите одно из других решений путем определения начальной точки, которая является близко к тому решению:
vpasolve(200*sin(x) == x^3 - 1, x, -4)
ans = -3.0009954677086430679926572924945
vpasolve(200*sin(x) == x^3 - 1, x, 3)
ans = 3.0098746383859522384063444361906
Можно задать области значений для решений уравнения. Например, если вы хотите ограничить свой поиск только действительными решениями, вы не можете использовать предположения, потому что vpasolve
игнорирует предположения. Вместо этого задайте поисковый интервал. Для следующего уравнения, если вы не задаете области значений, числовой решатель возвращает все восемь решений уравнения:
syms x vpasolve(x^8 - x^2 == 3, x)
ans = -1.2052497163799060695888397264341 1.2052497163799060695888397264341 - 0.77061431370803029127495426747428 + 0.85915207603993818859321142757163i - 0.77061431370803029127495426747428 - 0.85915207603993818859321142757164i -1.0789046020338265308047436284205i 1.0789046020338265308047436284205i 0.77061431370803029127495426747428 + 0.85915207603993818859321142757164i 0.77061431370803029127495426747428 - 0.85915207603993818859321142757163i
Предположим, что вам нужны только действительные решения этого уравнения. Вы не можете использовать предположения на переменных, потому что vpasolve
игнорирует их.
assume(x, 'real') vpasolve(x^8 - x^2 == 3, x)
ans = -1.2052497163799060695888397264341 1.2052497163799060695888397264341 - 0.77061431370803029127495426747428 + 0.85915207603993818859321142757163i - 0.77061431370803029127495426747428 - 0.85915207603993818859321142757164i -1.0789046020338265308047436284205i 1.0789046020338265308047436284205i 0.77061431370803029127495426747428 + 0.85915207603993818859321142757164i 0.77061431370803029127495426747428 - 0.85915207603993818859321142757163i
Задайте поисковую область значений, чтобы ограничить возвращенные результаты конкретными областями значений. Например, чтобы возвратить только действительные решения этого уравнения, задайте поисковый интервал как [-Inf Inf]
:
vpasolve(x^8 - x^2 == 3, x, [-Inf Inf])
ans = -1.2052497163799060695888397264341 1.2052497163799060695888397264341
Возвратите только неотрицательные решения:
vpasolve(x^8 - x^2 == 3, x, [0 Inf])
ans = 1.2052497163799060695888397264341
Поисковая область значений может содержать комплексные числа. В этом случае vpasolve
использует прямоугольную область поиска в комплексной плоскости:
vpasolve(x^8 - x^2 == 3, x, [-1, 1 + i])
ans = - 0.77061431370803029127495426747428 + 0.85915207603993818859321142757164i 0.77061431370803029127495426747428 + 0.85915207603993818859321142757164i
По умолчанию vpasolve
возвращает то же решение на каждом вызове. Чтобы найти больше чем одно решение для неполиномиальных уравнений, установите 'Random'
на true
. Это заставляет vpasolve
использовать случайное начальное значение, которое может привести к различным решениям на последовательных вызовах.
Если Random
не задан, vpasolve
возвращает то же решение на каждом вызове.
syms x f = x-tan(x); for n = 1:3 vpasolve(f,x) end
ans = 0 ans = 0 ans = 0
Когда 'Random'
установлен в true
, vpasolve
возвращает отличное решение на каждом вызове.
syms x f = x-tan(x); for n = 1:3 vpasolve(f,x,'Random',true) end
ans = -227.76107684764829218924973598808 ans = 102.09196646490764333652956578441 ans = 61.244730260374400372753016364097
random
может использоваться в сочетании с поисковой областью значений:
vpasolve(f,x,[10 12],'Random',true)
ans = 10.904121659428899827148702790189
Если vpasolve
возвращает пустой объект, то никакое решение не было найдено.
vpasolve
возвращает все решения только для полиномиальных уравнений. Для неполиномиальных уравнений нет никакого общего метода нахождения всех решений. Когда вы ищете числовые решения неполиномиального уравнения или системы, которая имеет несколько решений, затем, по умолчанию, vpasolve
возвращает только одно решение, если таковые имеются. Чтобы найти больше, чем всего одно решение, установите 'Random'
на истину. Теперь, вызов vpasolve
неоднократно может возвращать несколько различных решений.
Когда вы решаете систему, где существует недостаточно уравнений, чтобы определить все переменные исключительно, поведение поведения vpasolve
зависит от того, является ли система полиномом или неполиномом. Если полином, vpasolve
возвращает все решения путем представления произвольного параметра. Если неполином, одно числовое решение возвращено, если это существует.
Когда вы решаете систему рациональных уравнений, тулбокс преобразовывает ее к полиномиальной системе путем умножения знаменателей. vpasolve
возвращает все решения получившейся полиномиальной системы, включая тех, которые являются также корнями этих знаменателей.
vpasolve
игнорирует набор предположений на переменных. Можно ограничить возвращенные результаты конкретными областями значений путем определения соответствующих поисковых областей значений с помощью аргумента init_guess
.
Если init_guess
задает поисковую область значений [a,b]
и значения, a,b
является комплексными числами, то vpasolve
ищет решения в прямоугольной области поиска в комплексной плоскости. Здесь, a
задает нижний левый угол прямоугольной области поиска, и b
задает верхний правый угол той области.
y1,...,yN
выходных переменных не задает переменные, для которых vpasolve
решает уравнения или системы. Если y1,...,yN
является переменными, которые появляются в eqns
, который не гарантирует, что vpasolve(eqns)
присвоит решения y1,...,yN
с помощью правильного порядка. Таким образом, для вызова [a,b] = vpasolve(eqns)
, вы можете получить решения для a
, присвоенного b
и наоборот.
Чтобы гарантировать порядок возвращенных решений, задайте переменные vars
. Например, вызов [b,a] = vpasolve(eqns,b,a)
присваивает решения для a
, присвоенного a
и решениям для b
, присвоенного b
.
Поместите уравнения и выражения слева от списка аргументов и переменные направо. проверки vpasolve
на переменные, запускающиеся справа, и при достижении первого уравнения или выражения, принимают, что все налево - уравнение или выражение.
Если возможно, решите уравнения символически с помощью solve
, и затем аппроксимируйте полученные символьные результаты численно с помощью vpa
. Используя этот подход, вы получаете числовые приближения всех решений, найденных символьным решателем. Используя символьный решатель и постобработку его результатов требует большего количества времени, чем использование числовых методов непосредственно. Это может значительно уменьшить производительность.
Когда вы устанавливаете 'Random'
на true
и задаете поисковую область значений для, переменные, случайные отправные точки в поисковой области значений выбраны с помощью внутреннего генератора случайных чисел. Распределение отправных точек в конечных поисковых областях значений универсально.
Когда вы устанавливаете random
на true
и не задаете поисковую область значений для, переменные, случайные отправные точки сгенерированы с помощью распределения Коши с полушириной 100
. Это означает, что отправные точки действительны оцененный и имеют большое распространение значений на повторных вызовах.