vpasolve

Решите уравнения численно

Описание

пример

S = vpasolve(eqn,var) численно решает уравнение eqn для переменной var. Если вы не задаете var, vpasolve решает для переменной по умолчанию, определенной symvar. Например, vpasolve(x + 1 == 2, x) численно решает уравнение x + 1 = 2 для x.

пример

S = vpasolve(eqn,var,init_param) численно решает уравнение eqn для переменной var использование исходного предположения или поиска располагается init_param.

пример

Y = vpasolve(eqns,vars) численно решает систему уравнений eqns для переменных vars. Этот синтаксис возвращает массив структур Y это содержит решения. Поля в массиве структур соответствуют переменным, заданным vars. Если вы не задаете vars, vpasolve решает для переменных по умолчанию, определенных symvar.

Y = vpasolve(eqns,vars,init_param) численно решает систему уравнений eqns для переменных vars использование исходного предположения или поиска располагается init_param.

пример

[y1,...,yN] = vpasolve(eqns,vars) численно решает систему уравнений eqns для переменных vars. Этот синтаксис присваивает решения переменных y1,...,yN. Если вы не задаете vars, vpasolve решает для переменных по умолчанию, определенных symvar.

пример

[y1,...,yN] = vpasolve(eqns,vars,init_param) численно решает систему уравнений eqns для переменных vars использование исходного предположения или поиска располагается init_param.

пример

___ = vpasolve(___,'Random',true) использует случайное исходное предположение для нахождения решений. Используйте этот вход, чтобы не возвращать то же решение неоднократно для неполиномиальных уравнений. Если вы задаете исходные предположения для всех переменных, установки 'Random' к true не оказывает влияния.

Примеры

свернуть все

Решите полиномиальное уравнение. Для полиномиальных уравнений, vpasolve возвращает все решения.

syms x
S = vpasolve(2*x^4 + 3*x^3 - 4*x^2 - 3*x + 2 == 0, x)
S = 

(-2.0-1.00.51.0)[-vpa ('2.0');-vpa ('1.0'); vpa ('0.5'); vpa ('1.0')]

Решите неполиномиальное уравнение. Для неполиномиальных уравнений, vpasolve возвращает первое решение, которое это находит.

S = vpasolve(sin(x) == 1/2, x)
S = 0.52359877559829887307710723054658vpa ('0.52359877559829887307710723054658')

Найдите несколько решений уравнения 200sin(x)=x3-1 путем определения исходных предположений при использовании vpasolve.

Постройте левые и правые стороны уравнения.

syms x
eqnLeft = 200*sin(x);
eqnRight = x^3 - 1;
fplot([eqnLeft eqnRight])
title([texlabel(eqnLeft) ' = ' texlabel(eqnRight)])

График показывает, что уравнение имеет три решения. Если вы не задаете исходное предположение, vpasolve возвращает первое решение, которое это находит.

S1 = vpasolve(eqnLeft == eqnRight, x)
S1 = -0.0050000214585835715725440675982988- vpa ('0.0050000214585835715725440675982988')

Найдите одно из других решений путем определения исходного предположения, которое является близко к тому решению.

S2 = vpasolve(eqnLeft == eqnRight, x, -3)
S2 = -3.0009954677086430679926572924945- vpa ('3.0009954677086430679926572924945')
S3 = vpasolve(eqnLeft == eqnRight, x, 4)
S3 = 3.0098746383859522384063444361906vpa ('3.0098746383859522384063444361906')

Решите систему уравнений. Используйте один выходной аргумент, чтобы возвратить решения в форме массива структур.

syms u v
Y = vpasolve([v^3 + 2*u == v, v^2 == u], [u,v])
Y = struct with fields:
    u: [3x1 sym]
    v: [3x1 sym]

Отобразите решения путем доступа к полям массива структур Y.

uSol = Y.u
uSol = 

(05.82842712474619009760337744841940.1715728752538099023966225515806)[sym (0); vpa ('5.8284271247461900976033774484194'); vpa ('0.1715728752538099023966225515806')]

vSol = Y.v
vSol = 

(0-2.41421356237309504880168872420970.4142135623730950488016887242097)[sym (0);-vpa ('2.4142135623730950488016887242097'); vpa ('0.4142135623730950488016887242097')]

Если vpasolve не может найти решение, оно возвращает пустой объект.

syms x
eqns = [3*x+2, 3*x+1];
Y = vpasolve(eqns,x)
 
Y =
 
Empty sym: 0-by-1
 

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

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.90707209659114864849280774681vpa ('88.90707209659114864849280774681')
sol_y = 0.00000000000013470479710676694388973703681918vpa ('0.00000000000013470479710676694388973703681918')

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

syms x
S = vpasolve(x^6 - x^2 == 3, x)
S = 

(-1.29294233500847243691965504363821.2929423350084724369196550436382-0.50188125716943915856832436499602-1.0429452224956770037495194222175i-0.50188125716943915856832436499602+1.0429452224956770037495194222175i0.50188125716943915856832436499602-1.0429452224956770037495194222175i0.50188125716943915856832436499602+1.0429452224956770037495194222175i)[-vpa ('1.2929423350084724369196550436382'); vpa ('1.2929423350084724369196550436382'); - vpa ('0.50188125716943915856832436499602') - vpa ('1.0429452224956770037495194222175i'); - vpa ('0.50188125716943915856832436499602') + vpa ('1.0429452224956770037495194222175i'); vpa ('0.50188125716943915856832436499602') - vpa ('1.0429452224956770037495194222175i'); vpa ('0.50188125716943915856832436499602') + vpa ('1.0429452224956770037495194222175i')]

Предположим, что вам нужны только действительные решения этого уравнения. Вы не можете использовать предположения на переменных потому что vpasolve игнорирует их.

assume(x,'real')
S = vpasolve(x^6 - x^2 == 3, x)
S = 

(-1.29294233500847243691965504363821.2929423350084724369196550436382-0.50188125716943915856832436499602-1.0429452224956770037495194222175i-0.50188125716943915856832436499602+1.0429452224956770037495194222175i0.50188125716943915856832436499602-1.0429452224956770037495194222175i0.50188125716943915856832436499602+1.0429452224956770037495194222175i)[-vpa ('1.2929423350084724369196550436382'); vpa ('1.2929423350084724369196550436382'); - vpa ('0.50188125716943915856832436499602') - vpa ('1.0429452224956770037495194222175i'); - vpa ('0.50188125716943915856832436499602') + vpa ('1.0429452224956770037495194222175i'); vpa ('0.50188125716943915856832436499602') - vpa ('1.0429452224956770037495194222175i'); vpa ('0.50188125716943915856832436499602') + vpa ('1.0429452224956770037495194222175i')]

Укажите поисковый диапазон, чтобы ограничить возвращенные результаты конкретными областями значений. Например, чтобы возвратить только действительные решения этого уравнения, задайте поисковый интервал как [-Inf Inf].

S = vpasolve(x^6 - x^2 == 3, x, [-Inf Inf])
S = 

(-1.29294233500847243691965504363821.2929423350084724369196550436382)[-vpa ('1.2929423350084724369196550436382'); vpa ('1.2929423350084724369196550436382')]

Чтобы возвратить неотрицательные решения, задайте поисковый интервал как [0 Inf].

S = vpasolve(x^6 - x^2 == 3, x, [0 Inf])
S = 1.2929423350084724369196550436382vpa ('1.2929423350084724369196550436382')

Поисковая область значений может также содержать комплексные числа, такие как [-1, 1+2i]. В этом случае vpasolve использует прямоугольную область поиска в комплексной плоскости где -1 задает нижний левый угол области поиска и 1+2i задает верхний правый угол той области.

S = vpasolve(x^6 - x^2 == 3, x, [-1 1+2i])
S = 

(-0.50188125716943915856832436499602+1.0429452224956770037495194222175i0.50188125716943915856832436499602+1.0429452224956770037495194222175i)[-vpa ('0.50188125716943915856832436499602') + vpa ('1.0429452224956770037495194222175i'); vpa ('0.50188125716943915856832436499602') + vpa ('1.0429452224956770037495194222175i')]

Найдите решение для следующей системы уравнений.

syms x y
eqn1 = exp(-x^2-y^2)*(x-4) - exp((-x^2-y^2)/2)*(x-2) == 0
eqn1 = 

e-x2-y2x-4-e-x22-y22x-2=0exp ((-x^2 - y^2)) * (x - 4) - exp ((-x^2/2 - y^2/2)) * (x - 2) == 0

eqn2 = exp(-x^2-y^2)*(y-2) - exp((-x^2-y^2)/2)*(y-4) == 0
eqn2 = 

e-x2-y2y-2-e-x22-y22y-4=0exp ((-x^2 - y^2)) * (y - 2) - exp ((-x^2/2 - y^2/2)) * (y - 4) == 0

Найдите решение для переменных x и y не задавая исходное предположение. vpasolve не может найти решение, и оно возвращает пустой объект.

[solX, solY] = vpasolve([eqn1 eqn2],[x y])
 
solX =
 
Empty sym: 0-by-1
 
 
solY =
 
Empty sym: 0-by-1
 

Теперь задайте исходные предположения x = 2 и y = 4. vpasolve возвращает решения, которые являются близко к исходным предположениям.

[solX, solY] = vpasolve([eqn1 eqn2],[x y],[2; 4])
solX = 1.9999092125057125429174334656647vpa ('1.9999092125057125429174334656647')
solY = 4.0000907874942874570825665343353vpa ('4.0000907874942874570825665343353')

По умолчанию, vpasolve возвращает то же решение на каждом вызове. Чтобы найти больше чем одно решение для неполиномиальных уравнений, установите 'Random' к true. Это делает vpasolve используйте случайное исходное предположение, которое может привести к различным решениям на последовательных вызовах.

Если 'Random' не задан, vpasolve возвращает то же решение на каждом вызове.

syms x
f = x-tan(x);
for n = 1:3
    S = vpasolve(f,x)
end
S = 0sym (0)
S = 0sym (0)
S = 0sym (0)

Когда 'Random' установлен в истину, vpasolve возвращает отличное решение на каждом вызове.

for n = 1:3
    S = vpasolve(f,x,'Random',true)
end
S = -227.76107684764829218924973598808- vpa ('227.76107684764829218924973598808')
S = 102.09196646490764333652956578441vpa ('102.09196646490764333652956578441')
S = 61.244730260374400372753016364097vpa ('61.244730260374400372753016364097')

'Random' опция может использоваться в сочетании с поисковой областью значений.

S = vpasolve(f,x,[10 12],'Random',true)
S = 10.904121659428899827148702790189vpa ('10.904121659428899827148702790189')

Входные параметры

свернуть все

Уравнение, чтобы решить в виде символьного уравнения или символьного выражения. Символьное уравнение определено оператором отношения ==. Если eqn символьное выражение (без правой стороны), решатель принимает, что правая сторона 0 и решает уравнение eqn == 0.

Переменная, чтобы решить уравнение для в виде символьной переменной. Если var не задан, symvar определяет переменные.

Система уравнений или выражения, чтобы быть решают в виде символьного вектора, матрицы или массива уравнений или выражений. Эти уравнения или выражения могут также быть разделены запятыми. Если уравнение является символьным выражением (без правой стороны), решатель принимает, что правая сторона уравнения 0.

Переменные, чтобы решить систему уравнений для в виде символьного вектора. Эти переменные заданы как векторный или список, разделенный запятыми. Если vars не задан, symvar определяет переменные.

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

Если init_param номер или, в случае многомерных уравнений, вектора из чисел, затем числовой решатель использует его в качестве исходного предположения. Если init_param задан как скаляр, в то время как система уравнений многомерна, затем числовой решатель использует скалярное значение в качестве исходного предположения для всех переменных. Для примера смотрите, Находят Несколько Решений путем Определения Исходных предположений.

Если init_param матрица с двумя столбцами, затем две записи строк задают границы исходного предположения для соответствующих переменных. Чтобы задать исходное предположение в матрице поисковых областей значений, задайте оба столбца как значение исходного предположения.

Если вы задаете init_param как поисковая область значений [a b] и значения a,b комплексные числа, затем vpasolve поиски решений в прямоугольной области поиска в комплексной плоскости. Здесь, a задает нижний левый угол прямоугольной области поиска и b задает верхний правый угол той области. Для примера смотрите, Указывают Диапазоны Решений.

Чтобы не использовать поисковую область значений для переменной, установите поисковую область значений для той переменной к [NaN, NaN] в init_param. Все другое использование NaN в init_param будет ошибка.

Выходные аргументы

свернуть все

Решения одномерного уравнения, возвращенного как символьное значение или символьный массив. Размер символьного массива соответствует количеству решений.

Решения системы уравнений, возвращенной как массив структур. Количество полей в массиве структур соответствует количеству переменных, которые будут решены для.

Переменные, которые являются присвоенными решениями системы уравнений, возвратились как массив числовых или символьных переменных. Количество выходных переменных или символьных массивов должно равняться количеству переменных, которые будут решены для. Если вы явным образом задаете независимые переменные vars, затем решатель использует тот же порядок возвратить решения. Если вы не задаете vars, независимые переменные видов тулбокса в алфавитном порядке, и затем присваивают решения для этих переменных к выходным переменным или символьным массивам.

Советы

  • Если vpasolve не может найти решение, оно возвращает пустой объект. Обеспечьте исходное предположение, чтобы помочь решателю, находящему решение. Для примера смотрите, Обеспечивают Исходное предположение, чтобы Найти Решения.

  • Для полиномиальных уравнений, vpasolve возвращает все решения. Для неполиномиальных уравнений нет никакого общего метода нахождения всех решений и vpasolve возвращает только одно решение по умолчанию. Чтобы найти несколько различных решений для неполинома, можно установить 'Random' к истинному и использованию vpasolve неоднократно.

  • Когда вы решаете систему уравнений с групповыми решениями, поведением vpasolve зависит от того, является ли система полиномом или неполиномом. Если полином, vpasolve возвращает все решения путем представления произвольного параметра. Если неполином, одно числовое решение возвращено, если это существует.

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

  • vpasolve игнорирует набор предположений на переменных. Можно ограничить возвращенные результаты конкретными областями значений путем указывания соответствующих поисковых диапазонов с помощью аргумента init_param.

  • Выходные переменные 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.

  • Можно решить уравнения символически с помощью solve, и затем численно аппроксимируйте результаты с помощью vpa. Используя этот подход, вы получаете числовые приближения всех решений, найденных символьным решателем. Однако это может уменьшить вычислительную скорость начиная с решения символически, и постобработка результатов занимают больше времени, чем прямое использование числового решателя vpasolve.

Алгоритмы

  • Когда вы устанавливаете 'Random' к true и укажите поисковый диапазон для, переменные, случайные исходные предположения в поисковой области значений выбраны с помощью внутреннего генератора случайных чисел (с равномерным распределением).

  • Когда вы устанавливаете 'Random' к true и не указывайте поисковый диапазон для, переменные, случайные исходные предположения сгенерированы с помощью распределения Коши с полушириной 100. Это означает, что исходные предположения действительны оцененный и имеют большое распространение значений на повторных вызовах.

Смотрите также

| | | | | |

Представленный в R2012b
Для просмотра документации необходимо авторизоваться на сайте