符号数学工具箱™提供了数字和符号方程求解器。有关数字和符号求解器的比较,请参见选择数字或符号求解器.一个方程或方程组可以有多个解。金宝搏官方网站要用数值方法找到这些解,可以金宝搏官方网站使用这个函数vpasolve
.对多项式方程,vpasolve
返回所有的解决方案。金宝搏官方网站nonpolynomial方程,vpasolve
返回它找到的第一个解决方案。这些例子向您展示了如何使用vpasolve
求多项式和非多项金宝搏官方网站式方程的解,以及如何求任意精度的解。
使用vpasolve
求函数的所有解金宝搏官方网站
.
信谊f (x)f (x) = 6 * x x ^ ^ 7 - 2 * 6 + 3 * x ^ 3 - 8;索尔= vpasolve (f)
索尔=
vpasolve
如预期的那样,返回函数的7个根,因为函数是7次多项式。
函数的图 显示周期零点,在零点处斜率递增为 增加。
信谊xH = fplot(exp(x/7)*cos(2*x),[-2 25]);网格在
使用vpasolve
求函数的零点f
.请注意,vpasolve
即使存在多个解,也只返回非多项式方程的一个解。金宝搏官方网站在重复调用,vpasolve
返回相同的结果。
f = exp (x / 7) * cos (2 * x);为K = 1:3 vpasolve(f,x)结束
ans =
ans =
ans =
要找到多个解决方案,请设置选项金宝搏官方网站“随机”
来真正的
.这使得vpasolve
随机选择起点。有关选择随机起点的算法的信息,请参见算法在vpasolve
页面。
为K = 1:3 vpasolve(f,x,“随机”,真正的)结束
ans =
ans =
ans =
求一个接近于
,设置起点为10
.
vpasolve (f, x, 10)
ans =
求一个接近于
,设置起点为1000
.
vpasolve (f, x, 1000)
ans =
在这个范围内找一个零
,设置查询范围为25 [15]
.
vpasolve (f, x,[15] 25日)
ans =
在范围内找到多个025 [15]
,你不能打电话vpasolve
因为它在每次调用时返回相同的结果,如上所示。相反,设置搜索范围并设置“随机”
来真正的
.
为K = 1:3 vpasolve(f,x,[15 25],“随机”,真正的)结束
ans =
ans =
ans =
因为“随机”
随机选择起始点,在连续的调用中可能会找到相同的解决方案。
创建一个函数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])'
索尔=
使用数字
设置返回的解的精度金宝搏官方网站vpasolve
.默认情况下,vpasolve
返回精度为32个金宝搏官方网站有效数字的解。
f = exp (x / 7) * cos (2 * x);vpasolve (f)
ans =
使用数字
将精度提高到64个有效数字。当修改数字
,确保您保存了它的当前值,以便可以恢复它。
digitsOld =数字;数字(64)vpasolve (f)
ans =
接下来,将解的精度改为16个有效数字。金宝搏官方网站
数字(16)
考虑下面的方程组。
方程的图
和
说明了三个面相交于两点。为了更好地形象化情节,使用视图
.要缩放颜色图值,请使用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])
使用vpasolve
求两个曲面的交点。这个函数vpasolve
返回一个结构。访问x
-,y
- - - - - -,z
-值的解,索引到结构中。
索尔= vpasolve(方程);[sol.x sol.y sol.z]
ans =
要搜索解空间的一个区域,指定变量的搜索范围。如果指定范围
和
,然后vpasolve
函数搜索所示的有界区域。
使用vpasolve
找出这个搜索范围的解。省略…的搜索范围
,将第三个搜索范围设置为(南南)
.
变量= [x y z];范围= [0 1.5;1.5 - 2.5;南南);Sol = vpasolve(方程式,变量,范围);[sol.x sol.y sol.z]
ans =
要找到多个解,设置金宝搏官方网站“随机”
选项真正的
.这使得vpasolve
连续运行时使用随机起点。的“随机”
选项可与搜索范围相结合使用vpasolve
在搜索范围内使用随机起点。因为“随机”
随机选择起始点,在连续的调用中可能会找到相同的解决方案。调用vpasolve
重复,以确保你找到两个解决方案。金宝搏官方网站
清晰的索尔范围= [0 3;0 3;南南);为K = 1:5温度= vpasolve(方程式,变量,范围,“随机”,真正的);索尔(k, 1) = temp.x;索尔(k, 2) = temp.y;索尔(k, 3) = temp.z;结束索尔
索尔=
绘制方程。将解决方案叠加为黄色点的散点图金宝搏官方网站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)等待从
最后,恢复旧的价值数字
进行进一步的计算。
数字(digitsOld)