主要内容

解决方程数值

符号数学工具箱™提供了数字和符号方程求解器。有关数字和符号求解器的比较,请参见选择数字或符号求解器.一个方程或方程组可以有多个解。金宝搏官方网站要用数值方法找到这些解,可以金宝搏官方网站使用这个函数vpasolve.对多项式方程,vpasolve返回所有的解决方案。金宝搏官方网站nonpolynomial方程,vpasolve返回它找到的第一个解决方案。这些例子向您展示了如何使用vpasolve求多项式和非多项金宝搏官方网站式方程的解,以及如何求任意精度的解。

求多项式函数的所有根

使用vpasolve求函数的所有解金宝搏官方网站 f x 6 x 7 - 2 x 6 + 3. x 3. - 8

信谊f (x)f (x) = 6 * x x ^ ^ 7 - 2 * 6 + 3 * x ^ 3 - 8;索尔= vpasolve (f)
索尔=

1.0240240759053702941448316563337 - 0.88080620051762149639205672298326 + 0.50434058840127584376331806592405 - 0.88080620051762149639205672298326 - 0.50434058840127584376331806592405 - 0.22974795226118163963098570610724 + 0.96774615576744031073999010695171 - 0.22974795226118163963098570610724 - 0.96774615576744031073999010695171 0.7652087814927846556172932675903 + 0.83187331431049713218367239317121 0.7652087814927846556172932675903 - 0.83187331431049713218367239317121

vpasolve如预期的那样,返回函数的7个根,因为函数是7次多项式。

使用搜索范围和起点查找非多项式函数的零点

函数的图 f x e x / 7 因为 2 x 显示周期零点,在零点处斜率递增为 x 增加。

信谊xH = fplot(exp(x/7)*cos(2*x),[-2 25]);网格

图中包含一个轴对象。axis对象包含一个functionline类型的对象。

使用vpasolve求函数的零点f.请注意,vpasolve即使存在多个解,也只返回非多项式方程的一个解。金宝搏官方网站在重复调用,vpasolve返回相同的结果。

f = exp (x / 7) * cos (2 * x);K = 1:3 vpasolve(f,x)结束
ans =
                 
                  
                   
                    
                     
                      -
                     
                      7.0685834705770347865409476123789
                    
                   
                  
                 
ans =
                 
                  
                   
                    
                     
                      -
                     
                      7.0685834705770347865409476123789
                    
                   
                  
                 
ans =
                 
                  
                   
                    
                     
                      -
                     
                      7.0685834705770347865409476123789
                    
                   
                  
                 

要找到多个解决方案,请设置选项金宝搏官方网站“随机”真正的.这使得vpasolve随机选择起点。有关选择随机起点的算法的信息,请参见算法vpasolve页面。

K = 1:3 vpasolve(f,x,“随机”,真正的)结束
ans =
                 
                  
                   
                    
                     
                      -
                     
                      226.98006922186256147892598444194
                    
                   
                  
                 
ans =
                 
                  
                   
                    98.174770424681038701957605727484
                  
                 
ans =
                 
                  
                   
                    52.621676947629036744249276669932
                  
                 

求一个接近于 x 1 0 ,设置起点为10

vpasolve (f, x, 10)
ans =
                 
                  
                   
                    10.210176124166828025003590995658
                  
                 

求一个接近于 x 1 0 0 0 ,设置起点为1000

vpasolve (f, x, 1000)
ans =
                 
                  
                   
                    999.8118620049516981407362567287
                  
                 

在这个范围内找一个零 1 5 x 2 5 ,设置查询范围为25 [15]

vpasolve (f, x,[15] 25日)
ans =
                 
                  
                   
                    21.205750411731104359622842837137
                  
                 

在范围内找到多个025 [15],你不能打电话vpasolve因为它在每次调用时返回相同的结果,如上所示。相反,设置搜索范围并设置“随机”真正的

K = 1:3 vpasolve(f,x,[15 25],“随机”,真正的)结束
ans =
                 
                  
                   
                    21.205750411731104359622842837137
                  
                 
ans =
                 
                  
                   
                    21.205750411731104359622842837137
                  
                 
ans =
                 
                  
                   
                    16.493361431346414501928877762217
                  
                 

因为“随机”随机选择起始点,在连续的调用中可能会找到相同的解决方案。

在指定的搜索范围内查找全部零

创建一个函数findzeros系统地找出所有的零f在给定的搜索范围内,在指定的容错范围内。该函数从输入搜索范围和调用开始vpasolve求一个零。然后,它围绕0值将搜索范围分成两个,并递归地调用自己,将新的搜索范围作为输入,以找到更多的零。

这里一节一节地解释这个函数。

使用三个输入和一个输出声明函数。第一个输入是函数,第二个输入是范围,可选的第三个输入允许您指定0和由此产生的上下边界之间的错误。

函数索尔= findzeros (f,范围,犯错)

如果你没有为容错指定可选参数,findzeros犯错0.001

如果Nargin < 2 err = 1e-3;结束

使用。在搜索范围中找到一个零vpasolve

索尔= vpasolve (f,范围);

如果vpasolve未找到零,退出。

如果(isempty (sol))返回

如果vpasolve查找零,将搜索范围分割为零之上和零之下的两个搜索范围。

其他的lowLimit = sol-err;highLimit =溶胶+犯错;

调用findzeros搜索范围较小。如果findzeros返回零,将值复制到解决方案数组并对其排序。

temp = findzeros(f,[range(1) lowLimit],1);如果~isempty(temp) sol = sort([sol temp]);结束

调用findzeros搜索范围更大。如果findzeros返回零,将值复制到解决方案数组并对其排序。

temp = findzeros(f,[highLimit range(2)],1);如果~isempty(temp) sol = sort([sol temp]);结束返回结束结束

整个函数findzeros如下。将此函数保存为findzeros.m在当前文件夹中。

函数索尔= findzeros (f,范围,犯错)如果Nargin < 3 err = 1e-3;结束索尔= vpasolve (f,范围);如果(isempty (sol))返回其他的lowLimit = sol-err;highLimit =溶胶+犯错;temp = findzeros(f,[range(1) lowLimit],1);如果~isempty(temp) sol = sort([sol temp]);结束temp = findzeros(f,[highLimit range(2)],1);如果~isempty(temp) sol = sort([sol temp]);结束返回结束结束

调用findzeros与搜索范围25 [15]在这个范围内找到所有的零f (x) = exp (x / 7) * cos (2 * x),在默认容错范围内。

信谊f (x)f (x) = exp (x / 7) * cos (2 * x);(f,[15 25])'
索尔=

16.493361431346414501928877762217 18.064157758141311121160199453857 19.634954084936207740391521145497 21.205750411731104359622842837137 22.776546738526000978854164528776 24.347343065320897598085486220416

获得任意精度的金宝搏官方网站解

使用数字设置返回的解的精度金宝搏官方网站vpasolve.默认情况下,vpasolve返回精度为32个金宝搏官方网站有效数字的解。

f = exp (x / 7) * cos (2 * x);vpasolve (f)
ans =
                 
                  
                   
                    
                     
                      -
                     
                      7.0685834705770347865409476123789
                    
                   
                  
                 

使用数字将精度提高到64个有效数字。当修改数字,确保您保存了它的当前值,以便可以恢复它。

digitsOld =数字;数字(64)vpasolve (f)
ans =
                 
                  
                   
                    
                     
                      -
                     
                      7.068583470577034786540947612378881489443631148593988097193625333
                    
                   
                  
                 

接下来,将解的精度改为16个有效数字。金宝搏官方网站

数字(16)

使用搜索范围求解多元方程

考虑下面的方程组。

z 10 因为 x + 因为 y z x + y 2 - 0 1 x 2 y x + y - 2 7 0

方程的图 0 x 2 5 0 x 2 5 说明了三个面相交于两点。为了更好地形象化情节,使用视图.要缩放颜色图值,请使用caxis

信谊xyzEqn1 = z == 10*(cosx + cosy);x+y^2-0.1*x^2*y;Eqn3 = x+y = 0;式= [eqn1 eqn2 eqn3];Fimplicit3 (equation) axis([0 2.5 0 2.5 -20 10]) title(“多元方程组”)视图(69,28)出租车([-15 10])

图中包含一个轴对象。以多元方程组为标题的轴对象包含3个隐函数曲面类型的对象。

使用vpasolve求两个曲面的交点。这个函数vpasolve返回一个结构。访问x-,y- - - - - -,z-值的解,索引到结构中。

索尔= vpasolve(方程);[sol.x sol.y sol.z]
ans =
                 
                  
                   
                    
                    
                     
                      
                       
                        
                         2.369747722454798
                       
                      
                      
                       
                        
                         0.3302522775452021
                       
                      
                      
                       
                        
                         2.293354376823228
                       
                      
                     
                    
                    
                   
                  
                 

要搜索解空间的一个区域,指定变量的搜索范围。如果指定范围 0 x 1 5 1 5 y 2 5 ,然后vpasolve函数搜索所示的有界区域。

使用vpasolve找出这个搜索范围的解。省略…的搜索范围 z ,将第三个搜索范围设置为(南南)

变量= [x y z];范围= [0 1.5;1.5 - 2.5;南南);Sol = vpasolve(方程式,变量,范围);[sol.x sol.y sol.z]
ans =
                 
                  
                   
                    
                    
                     
                      
                       
                        
                         0.9106266172563336
                       
                      
                      
                       
                        
                         1.789373382743666
                       
                      
                      
                       
                        
                         3.964101572135625
                       
                      
                     
                    
                    
                   
                  
                 

要找到多个解,设置金宝搏官方网站“随机”选项真正的.这使得vpasolve连续运行时使用随机起点。的“随机”选项可与搜索范围相结合使用vpasolve在搜索范围内使用随机起点。因为“随机”随机选择起始点,在连续的调用中可能会找到相同的解决方案。调用vpasolve重复,以确保你找到两个解决方案。金宝搏官方网站

清晰的索尔范围= [0 3;0 3;南南);K = 1:5温度= vpasolve(方程式,变量,范围,“随机”,真正的);索尔(k, 1) = temp.x;索尔(k, 2) = temp.y;索尔(k, 3) = temp.z;结束索尔
索尔=

2.369747722454798 0.3302522775452021 2.293354376823228 2.369747722454798 0.3302522775452021 2.293354376823228 2.369747722454798 0.330252277545202 2.293354376823228 0.9106266172563336 1.789373382743666 3.964101572135625 0.9106266172563336 1.789373382743666 3.964101572135625

绘制方程。将解决方案叠加为黄色点的散点图金宝搏官方网站X标记使用scatter3.为了更好地形象化情节,使两个表面透明使用α.使用缩放颜色地图到plot值caxis,并使用更改透视图视图

vpasolve求由所示方程金宝搏官方网站构成的曲面的交点处的解。

CLF ax =轴;h = fimplicit3(方程);h(2)。FaceAlpha = 0;h(3)。FaceAlpha = 0;轴([0 2.5 0 2.5 -20 10])保持scatter3 (sol(: 1)溶胶(:,2),索尔(:,3),600年,“黄色”“X”“线宽”2)标题(“在指定搜索范围内随机找到解决方金宝搏官方网站案”) cz = x. children;驾驶室([0 20])视图(69,28)等待

图中包含一个轴对象。标题为“在指定搜索范围内随机找到解决方案”的轴对象包含4个类型为隐式函数面、散点的对金宝搏官方网站象。

最后,恢复旧的价值数字进行进一步的计算。

数字(digitsOld)