vpasolve

解决方程数值

描述

例子

年代= vpasolve (eqn,VAR)用数值方法解出方程eqn为变量VAR。如果没有指定VAR,vpasolve所确定的默认变量的解symvar。例如,vpasolve(x + 1 == 2, x)用数值方法解出方程x+ 1 = 2x

例子

年代= vpasolve (eqn,VAR,init_param)用数值方法解出方程eqn为变量VAR使用初始的猜测或搜索范围init_param

例子

Y= vpasolve (数学式,var)用数值方法解方程组数学式为变量var。此语法返回结构阵列Y它包含解。万博 尤文图斯结构数组中的字段对应于所指定的变量var。如果没有指定var,vpasolve解决了所确定的默认变量symvar

Y= vpasolve (数学式,var,init_param)用数值方法解方程组数学式为变量var使用初始的猜测或搜索范围init_param

例子

(Y1,...,YN] = vpasolve(数学式,var)用数值方法解方程组数学式为变量var。此语法将解决方案分配给变量万博 尤文图斯Y1,...,YN。如果没有指定var,vpasolve解决了所确定的默认变量symvar

例子

(Y1,...,YN] = vpasolve(数学式,var,init_param)用数值方法解方程组数学式为变量var使用初始的猜测或搜索范围init_param

例子

___= vpasolve (___,“随机”,真正的)使用随机的初始猜测来寻找解决方案。万博 尤文图斯使用此输入可避免对非多项式方程重复返回相同的解。如果您为所有变量指定初始猜测,请设置“随机”真正的没有效果。

例子

全部折叠

解一个多项式方程。对多项式方程,vpasolve返回所有的解决方案。万博 尤文图斯

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

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

解一个非多项式方程。nonpolynomial方程,vpasolve返回它找到的第一个解决方案。

S = vpasolve(的sin(x)== 1/2,x)的
S =
                      
                       
                        
                         
                          0.52359877559829887307710723054658
                        
                        
                         vpa (“0.52359877559829887307710723054658”)
                       
                      

求方程的多种解决方案万博 尤文图斯 2 0 0 ( x ) = x 3. - 1 通过指定初始猜测时使用vpasolve

画出方程的左右两边。

SYMSxeqnLeft = 200 *的sin(x);eqnRight = X ^ 3  -  1;fplot([eqnLeft eqnRight])标题([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.0098746383859522384063444361906
                        
                        
                         vpa (“3.0098746383859522384063444361906”)
                       
                      

解一个方程组。使用一个输出参数以结构数组的形式返回解决方案。万博 尤文图斯

SYMSuvY = vpasolve([V ^ 3 + 2 * U == V,V'^ 2 == U],[U,V])
Y =结构体字段:u: [3x1 sym] v: [3x1 sym]

通过访问结构阵列的字段显万博 尤文图斯示的解Y

USOL = Y.u
uSol =

( 0 5.8284271247461900976033774484194 0.1715728752538099023966225515806 ) [符号(0);VPA( '5.8284271247461900976033774484194');VPA( '0.1715728752538099023966225515806')]

vSol = Y.v
vSol =

( 0 - 2.4142135623730950488016887242097 0.4142135623730950488016887242097 ) [符号(0);-vpa( '2.4142135623730950488016887242097');VPA( '0.4142135623730950488016887242097')]

如果vpasolve找不到解决方案,它返回一个空对象。

SYMSxeqns = [3*x+ 2,3 *x+1];Y = vpasolve(方程式,x)
Y = Empty sym: 0×1

在求解一个方程组时,使用多个输出参数将解直接分配给输出变量。万博 尤文图斯求解器返回解的顺序与指定变量的顺序相同。万博 尤文图斯

SYMSxy[sol_x, sol_y] = vpasolve ([x * sin (10 * x) = = y ^ 3, y ^ 2 = = exp (2 * x / 3)], [x, y])
sol_x =
                      
                       
                        
                         
                          88.90707209659114864849280774681
                        
                        
                         vpa (“88.90707209659114864849280774681”)
                       
                      
sol_y =
                      
                       
                        
                         
                          0.00000000000013470479710676694388973703681918
                        
                        
                         vpa (“0.00000000000013470479710676694388973703681918”)
                       
                      

你可以指定一个方程的解的范围。万博 尤文图斯例如,如果你想把你的搜索限制在真实的解决方案上,你不能使用假设,因为万博 尤文图斯vpasolve忽略了假设。相反,指定一个搜索间隔。对于下面的方程,如果不指定范围,则数值求解程序将返回该方程的所有六个解。万博 尤文图斯

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

( - 1.2929423350084724369196550436382 1.2929423350084724369196550436382 - 0.50188125716943915856832436499602 - 1.0429452224956770037495194222175 - 0.50188125716943915856832436499602 + 1.0429452224956770037495194222175 0.50188125716943915856832436499602 - 1.0429452224956770037495194222175 0.50188125716943915856832436499602 + 1.0429452224956770037495194222175 ) (vpa (1.2929423350084724369196550436382);vpa (1.2929423350084724369196550436382);- vpa('0.50188125716943915856832436499602') - vpa('1.0429452224956770037495194222175i');- vpa('0.50188125716943915856832436499602') + vpa('1.0429452224956770037495194222175i');vpa (0.50188125716943915856832436499602) - vpa(“1.0429452224956770037495194222175我”);vpa (0.50188125716943915856832436499602) + vpa(1.0429452224956770037495194222175我)]

假设你需要这个方程的唯一真正的解决方案。万博 尤文图斯你不能在变量中使用的假设,因为vpasolve忽略了它们。

假设(x,'真实') S = vpasolve(x^6 - x^2 == 3, x)
S =

( - 1.2929423350084724369196550436382 1.2929423350084724369196550436382 - 0.50188125716943915856832436499602 - 1.0429452224956770037495194222175 - 0.50188125716943915856832436499602 + 1.0429452224956770037495194222175 0.50188125716943915856832436499602 - 1.0429452224956770037495194222175 0.50188125716943915856832436499602 + 1.0429452224956770037495194222175 ) (vpa (1.2929423350084724369196550436382);vpa (1.2929423350084724369196550436382);- vpa('0.50188125716943915856832436499602') - vpa('1.0429452224956770037495194222175i');- vpa('0.50188125716943915856832436499602') + vpa('1.0429452224956770037495194222175i');vpa (0.50188125716943915856832436499602) - vpa(“1.0429452224956770037495194222175我”);vpa (0.50188125716943915856832436499602) + vpa(1.0429452224956770037495194222175我)]

指定搜索范围,将返回的结果限制为特定范围。例如,为了只返回该方程的实解,将搜索区间指定为万博 尤文图斯[-Inf Inf文件]

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

( - 1.2929423350084724369196550436382 1.2929423350084724369196550436382 ) (vpa (1.2929423350084724369196550436382);vpa (1.2929423350084724369196550436382)]

若要返回非负解,请将搜索间隔指定为万博 尤文图斯[0 Inf文件]

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

搜索范围还可以包含复数,比如[-1,1 + 2i]中。在本例中,vpasolve在复平面中使用矩形搜索区域1指定搜索区域的左下角和1 + 2我指定该区域的右上角。

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

( - 0.50188125716943915856832436499602 + 1.0429452224956770037495194222175 0.50188125716943915856832436499602 + 1.0429452224956770037495194222175 ) [- vpa('0.50188125716943915856832436499602') + vpa('1.0429452224956770037495194222175i');vpa (0.50188125716943915856832436499602) + vpa(1.0429452224956770037495194222175我)]

求下列方程组的解。

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

e - x 2 - y 2 x - 4 - e - x 2 2 - y 2 2 x - 2 = 0 exp ((- 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) *(4元)= = 0
eqn2 =

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

找出变量的解xy不指定初始猜测。vpasolve无法找到一个解决方案,它返回一个空的对象。

[solX,SOLY] = vpasolve([eqn1式2],[X Y])
solX =空sym: 0×1 solY =空sym: 0×1

现在指定最初的猜测x = 2y = 4vpasolve返回接近初始猜测的解决方万博 尤文图斯案。

[solX,SOLY] = vpasolve([eqn1式2],[X Y],[2; 4])
solX =
                      
                       
                        
                         
                          1.9999092125057125429174334656647
                        
                        
                         vpa (“1.9999092125057125429174334656647”)
                       
                      
我还=
                      
                       
                        
                         
                          4.0000907874942874570825665343353
                        
                        
                         VPA( '4.0000907874942874570825665343353')
                       
                      

默认情况下,vpasolve每次调用都返回相同的解决方案。为了找到非多项式方程的一个以上的解,集合“随机”真正的。这使得vpasolve使用一个随机的初始猜测,它可以导致连续调用的不同解决方案。万博 尤文图斯

如果“随机”未指定,则vpasolve在每次调用时返回相同的解决方案。

SYMSxf = x) * tan (x);n = 1:3 S = vpasolve(f,x)结束
S =
                      
                       
                        
                         
                          0
                        
                        
                         信谊(0)
                       
                      
S =
                      
                       
                        
                         
                          0
                        
                        
                         信谊(0)
                       
                      
S =
                      
                       
                        
                         
                          0
                        
                        
                         信谊(0)
                       
                      

什么时候“随机”设置为true时,vpasolve在每次调用时返回一个不同的解决方案。

n = 1:3 S = vpasolve(f,x,“随机”,真正的)结束
S =
                      
                       
                        
                         
                          
                           -
                          
                           227.76107684764829218924973598808
                         
                        
                        
                         vpa (“227.76107684764829218924973598808”)
                       
                      
S =
                      
                       
                        
                         
                          102.09196646490764333652956578441
                        
                        
                         vpa (“102.09196646490764333652956578441”)
                       
                      
S =
                      
                       
                        
                         
                          61.244730260374400372753016364097
                        
                        
                         vpa (“61.244730260374400372753016364097”)
                       
                      

“随机”选项可以与搜索范围一起使用。

S = vpasolve(f,x,[10 12],“随机”,真正的)
S =
                      
                       
                        
                         
                          10.904121659428899827148702790189
                        
                        
                         vpa (“10.904121659428899827148702790189”)
                       
                      

输入参数

全部折叠

要解的方程,指定为符号方程或符号表达式。符号方程是由关系算符定义的==。如果eqn是一个符号表达式(没有右边),求解者假设右边为0,然后解出方程eqn = = 0

变量为解方程,指定为符号变量。如果VAR没有指定,symvar决定的变量。

等式或表达式的系统要解决的,指定为一个符号向量,矩阵,或公式或表达式的阵列。这些方程或表达式也可以用逗号分开。如果方程是符号表达式(不右侧),解算器假定方程式的右侧为0。

为求解方程组的变量,指定为符号向量。这些变量被指定为向量或逗号分隔的列表。如果var没有指定,symvar决定的变量。

解决方案的初始猜测或搜索范围,指定为数值、向量或具有两列的矩阵。

如果init_param是一个数字,或者在多元方程的情况下,是一个数字向量,那么数值求解器将其用作初始猜测。如果init_param被指定为一个标量,而方程系统是多变量,则数字解算器使用的标量值作为所有变量的初始猜测。例如,参见通过指定初始猜测找到多个解决万博 尤文图斯方案

如果init_param是一个具有两列的矩阵,则行中的两个元素指定相应变量的初始猜测的边界。若要在搜索范围矩阵中指定初始猜测,请将这两列指定为初始猜测值。

如果您指定init_param作为搜索范围[b]和值a、b是复数吗vpasolve搜索在复平面矩形搜索区域的解决方案万博 尤文图斯。这里,一个指定矩形搜索区域的左下角,和b指定该区域的右上角。例如,参见指定解决方案的范围万博 尤文图斯

若要省略变量的搜索范围,请将该变量的搜索范围设置为[NaN时,为NaN]init_param。所有其他用途init_param将错误。

输出参数

全部折叠

万博 尤文图斯一元方程的解,以符号值或符号数组形式返回。符号数组的大小与解的数目相对应。万博 尤文图斯

万博 尤文图斯方程系统的解,返回为结构阵列。要解决在结构阵列对应于变量的数目的字段的数量。

被分配给方程组解的变量,以数字或符号变量数组的形式返回。万博 尤文图斯输出变量或符号数组的数量必须等于要求解的变量的数量。如果你显式地指定独立变量var,那么解算器使用相同的命令返回的解决方案。万博 尤文图斯如果没有指定var,工具箱字母顺序排列的独立变量,然后分配这些变量的输出变量或符号阵列的解决方案。万博 尤文图斯

提示

  • 如果vpasolve找不到解决方案,它返回一个空对象。提供初步的猜测,以帮助解决方案找到一个解决方案。例如,参见提供初始猜测找到解决办法万博 尤文图斯

  • 对多项式方程,vpasolve返回所有的解决方案。万博 尤文图斯对于非多项式方程,没有找到所有解的一般方法万博 尤文图斯vpasolve默认情况下只返回一个解决方案。为了找到非多项式的几个不同的解,你可以设置万博 尤文图斯“随机”真实地使用vpasolve反复。

  • 当你解决方程的系统具有非唯一解决方案,行为万博 尤文图斯vpasolve取决于系统是多项式还是非多项式。如果多项式,vpasolve返回通过引入任意参数的所万博 尤文图斯有解决方案。如果非多项式,单一数值解返回,如果它存在。

  • 当你解决合理方程的系统,vpasolve由分母乘以出变换理性方程多项式。vpasolve返回结果多项式系统的所有万博 尤文图斯解,其中还包括分母的根。

  • vpasolve忽略对变量的假设。通过使用参数指定适当的搜索范围,可以将返回的结果限制在特定的范围内init_param

  • 输出变量Y1,...,YN不指定哪些变量vpasolve解决方程或系统。如果Y1,...,YN出现的变量数学式,但这并不能保证vpasolve(命令)将解决方案分配给万博 尤文图斯Y1,...,YN使用正确的顺序。因此,对于调用[a, b] = vpasolve(命令),你可能会得到它的解万博 尤文图斯一个分配给b反之亦然。

    要确保返回的解决方案的顺序,请指定变量万博 尤文图斯var。例如,电话并[b,A] = vpasolve(数学式,并[b,A])对于分配解决方案万博 尤文图斯一个分配给一个以及解决方案万博 尤文图斯b分配给b

  • 您可以使用符号求解方程解决,然后用数值近似的结果vpa。使用这种方法,你会得到由符号求解器发现的所有解决方案的数字近似。万博 尤文图斯然而,这可以减少计算速度,因为象征性地解决和后处理的结果需要更多的时间比直接使用数字求解vpasolve

算法

  • 当您设置“随机”真正的并为变量指定一个搜索范围,使用内部随机数生成器(均匀分布)选择搜索范围内的随机初始值。

  • 当您设置“随机”真正的不要指定变量的搜索范围,随机初始猜测是使用半宽度为的柯西分布生成的One hundred.。这意味着最初的猜测是实值和有价值观对重复调用大量传播。

介绍了R2012b