本主题向您展示如何使用“符号数学工具箱”™符号化地解决方程组。这个工具箱提供了数值和符号方程求解器。有关数值解算器和符号解算器的比较,请参见选择数字或符号求解器.
假设你有一个系统
你想解决X和y.首先,创建必要的符号对象。
Syms x y a
有几种方法可以解决输出解决
.一种方法是使用双输出调用。
解(x^2*y^2 = 0, x-y/2 = a)
调用返回以下内容。
Solx = 0 a soly = -2*a 0
将第一个方程修改为X2y2= 1.新系统有更多的解决方案。万博 尤文图斯
解(x^2*y^2 = 1, x-y/2 = a)
产生四种不同的解决方案。万博 尤文图斯
solx = a / 2 - (a ^ 2 - 2)^(1/2)/ 2 a / 2 - (a ^ 2 + 2)^(1/2)/ 2 a / 2 +(a ^ 2 - 2)^(1/2)/2 a/2 + (a^2 + 2)^(1/2)/2 soly = - a - (a^2 - 2)^(1/2) - a - (a^2 + 2)^(1/2) (a^2 - 2)^(1/2) - a (a^2 + 2)^(1/2) - a
由于您没有指定依赖变量,因此解决
使用Symvar.
确定变量。
的输出赋值的方法解决
对于“小型”系统是相当成功的。例如,如果您有一个10 × 10的方程组,那么输入以下内容既笨拙又耗时。
[x1,x2,x3,x4,x5,x6,x7,x8,x9,x10] =求解(......)
为了克服这个困难,解决
可以返回其字段为解决方案的结构。万博 尤文图斯例如,解方程组U ^ 2 - v ^ 2 = a ^ 2
那u + v = 1
那A ^2 - 2* A = 3
.
解(u^2 - v^2 = a^2, u + v = 1, a^2 - 2*a = 3)
求解器返回其在该结构中括起来的结果。
a: [2×1 sym] u: [2×1 sym] v: [2×1 sym]
的解决方万博 尤文图斯案一种
居住在"一种
场”,S.
.
s.a.
ans = -1 3
类似的评论适用于解决方案万博 尤文图斯你
和V.
.结构S.
现在可以通过字段和索引进行操作,以访问解决方案的特定部分。例如,要检查第二个解决方案,可以使用下面的语句提取每个字段的第二个组件。
s2 = [S.a(2), S.u(2), S.v(2)]
S2 = [3,5,-4]
下面的语句创建了解矩阵m
谁的行包括系统的不同解决方案。万博 尤文图斯
M = [S。一种那S.。你那S.。V.]
m = [-1,1,0] [3,5,-4]
清晰的solx
和我还
为了进一步使用。
清除SOLX SOLY.
线性方程组也可以用矩阵除法求解。例如,解这个方程组。
Clear u v x y syms u v x y eqns = [x + 2*y == u, 4*x + 5*y == v];S =解决(命令);索尔= [S.x;[A,b] = equationsToMatrix(eqns,x,y);z = \ b
索尔= (2 * v) / 3 - (5 * u) / 3 (4 * u) / 3 - v / 3 z = (2 * v) / 3 - (5 * u) / 3 (4 * u) / 3 - v / 3
因此,索尔
和Z.
产生相同的解决方案,尽管结果被分配给不同的变量。
解决
不会自动返回一个方程的所有解。万博 尤文图斯若要返回所有解决方案以及解决万博 尤文图斯方案中的参数和解决方案上的条件,请设置ReturnConditions
选项真正的
.
考虑以下方程组:
使用示例性可视化方程式fimplicit
.设置X设在和y-轴的值π
,获取轴柄使用轴
在一种
.创建符号数组S.
的值2 *π
至2 * pi.
每隔π/ 2
.把刻度设置为S.
, 使用XTick
和ytick.
的属性一种
.要设置x轴和y轴的标签,请进行转换S.
特征向量。使用Arrayfun.
应用字符
对每个元素S.
返回T.
.设定XTicklabel.
和YTickLabel
的属性一种
至T.
.
Syms.Xyqn1 = sinx + cosy = 4/5;= sin(x)*cos(y) = 1/10;一个=轴;fimplicit (eqn1(2 * 2π*π)'B');持有在网格在fimplicit (eqn2(2 * 2π*π)“米”);L =符号(2 * pi:π/ 2:2 *π);a.XTick =双(左);a.YTick =双(左);M = arrayfun(@char, L,'统一输出', 错误的);a.xticklabel = m;a.yticklabel = m;标题(方程组图) 传奇('sin(x)+ cos(y)== 4/5'那'SIN(x)* cos(y)== 1/10'那......“位置”那“最佳”那“自动更新”那“关闭”)
解在两条万博 尤文图斯曲线的交点上。这表明系统有重复的周期解。万博 尤文图斯要解此方程组的完整解集,请使用解决
并设置ReturnConditions
选项真正的
.
S = solve(eqn1, eqn2, 'ReturnConditions', true)
S = struct with fields: x: [2×1 sym] y: [2×1 sym] parameters: [1×2 sym] conditions: [2×1 sym]
解决
返回一个结构S.
与田野S.x
解决方案X
那S.y
解决方案y
那S.parameters
获取解决方案中的参数,以及S.conditions
对于溶液的条件。中相同索引的元素S.x
那S.y
,S.conditions
形成一个解决方案。因此,S.x (1)
那S.y (1)
,S.conditions (1)
形成一个方程组的解。的参数S.parameters
可以出现在所有的解决方案中。万博 尤文图斯
索引进入S.
返回解决方案、参数和条件。万博 尤文图斯
S.X S.Y S.Parameters S.contitions
一种ns = z1 z1 ans = z z ans = [ z, z1] ans = (in((z - acos(6^(1/2)/10 + 2/5))/(2*pi), 'integer') |... in((z + acos(6^(1/2)/10 + 2/5))/(2*pi), 'integer')) &... (in(-(pi - z1 + asin(6^(1/2)/10 - 2/5))/(2*pi), 'integer') |... in((z1 + asin(6^(1/2)/10 - 2/5))/(2*pi), 'integer')) (in((z1 - asin(6^(1/2)/10 + 2/5))/(2*pi), 'integer') |... in((z1 - pi + asin(6^(1/2)/10 + 2/5))/(2*pi), 'integer')) &... (in((z - acos(2/5 - 6^(1/2)/10))/(2*pi), 'integer') |... in((z + acos(2/5 - 6^(1/2)/10))/(2*pi), 'integer'))
要解条件下的方程组,请在输入时指定条件解决
.
求解上述所考虑的方程组X
和y
在这一期间2 *π
至2 * pi.
.叠加在图上的解决方案万博 尤文图斯散射
.
SRange =求解(EQN1,EQN2,-2 * PI'returnconditions',真正的);散射(Srange。x Srange.y“k”)
您可以使用返回的解决方案,参数和万博 尤文图斯条件解决
求解在一个区间内万博 尤文图斯或在附加条件下找到解本节的目标与前一节相同,即在搜索范围内求解方程组,但采用了不同的方法。而不是直接放置条件,它展示了如何使用参数和条件返回解决
.
对于完整的解决方案S.
在方程组中,求值X
和y
在这一期间2 *π
至2 * pi.
通过求解万博 尤文图斯S.x
和S.y
参数的S.parameters
在这个条件下S.conditions
.
在解决之前X
和y
在间隔中,假设条件S.conditions
使用认为
因此返回的解满足条件。万博 尤文图斯假设第一个解决方案的条件。
假设(S.conditions (1))
查找参数S.x
和S.y
.
(symvar(S.x), S.parameters))
Paramx = z1 paramy = z
解第一个解X
为参数paramx
.
solparamx(1) =解决(S.x(1) > 2π,S.x(1) < 2 *π,paramx)
solparamx = [pi + asin(6 ^(1/2)/ 10 - 2/5),Asin(6 ^(1/2)/ 10 - 2/5) - pi,-asin(6 ^(1/2)/ 10 - 2/5), - 2 * Pi - Asin(6 ^(1/2)/ 10 - 2/5)]
同样,解决第一个解决方案y
为了paramy
.
solparamy(1) =解决(S.y(1) > 2π,S.y(1) < 2 *π,paramy)
Solparamy = [ACOS(6 ^(1/2)/ 10 + 2/5),ACOS(6 ^(1/2)/ 10 + 2/5) - 2 * pi,-acos(6 ^(1/2)/ 10 + 2/5),2 * pi - ACOS(6 ^(1/2)/ 10 + 2/5)]
清除设定的假设S.conditions (1)
使用认为
.调用asuptions.
检查假设是否被清除。
假设(S.Parameters,'Clear')假设
ans =空的sym:1-by-0
假设第二个解决方案的条件。
假设(S.conditions (2))
解决第二个解决方案X
和y
参数的paramx
和paramy
.
solparamx(2) =解决(S.x(2) > 2 *π,S.x(2) < 2 *π,paramx) solparamy(2:) =解决(S.y(2) > 2 *π,S.y(2) < 2 *π,paramy)
solparamx = [pi + asin(6 ^(1/2)/ 10 - 2/5),Asin(6 ^(1/2)/ 10 - 2/5) - pi,-asin(6 ^(1/2)/ 10 - 2/5), - 2 * pi - asin(6 ^(1/2)/ 10 - 2/5)] [asin(6 ^(1/2)/ 10 + 2/5),pi- Asin(6 ^(1/2)/ 10 + 2/5),Asin(6 ^(1/2)/ 10 + 2/5) - 2 * pi, - pi - asin(6 ^(1/2)/10 + 2/5)] solparamy = [ acos(6^(1/2)/10 + 2/5), acos(6^(1/2)/10 + 2/5) - 2*pi, -acos(6^(1/2)/10 + 2/5), 2*pi - acos(6^(1/2)/10 + 2/5)] [ acos(2/5 - 6^(1/2)/10), acos(2/5 - 6^(1/2)/10) - 2*pi, -acos(2/5 - 6^(1/2)/10), 2*pi - acos(2/5 - 6^(1/2)/10)]
第一排paramx
和paramy
形成方程组的第一个解,第二行形成第二个解。
求值X
和y
对于这些价值paramx
和paramy
,使用subs
替代paramx
和paramy
在S.x
和S.y
.
solx(1,:)=潜艇(s.x(1),paramx,solparamx(1,:));solx(2,:)=潜艇(s.x(2),paramx,solparamx(2,:))soly(1,:) =潜艇(s.y(1),paramy,solparamy(1,:));SOLY(2,:)=潜艇(S.Y(2),PARAMY,SOLPARAMY(2,:))
solx = [pi +最佳翻译(6 ^(1/2)/ 10 - 2/5),印度历的7月(6 ^(1/2)/ 10 - 2/5)-π,正如(6 ^(1/2)/ 10 - 2/5),- 2 *π最佳翻译(6 ^(1/2)/ 10 - 2/5)][最佳翻译(6 ^(1/2)/ 10 + 2/5),π-印度历的7月(6 ^(1/2)/ 10 + 2/5),印度历的7月(6 ^(1/2)/ 10 + 2/5)- 2 *π-π-印度历的7月(6 ^(1/2)/ 10 + 2/5)]我还=[治疗(6 ^(1/2)/ 10 + 2/5),这些“可信赖医疗组织”(6 ^(1/2)/ 10 + 2/5)- 2 *π,这些“可信赖医疗组织”(6 ^ (1/2)/ 10 + 2/5),2 *π- - -这些“可信赖医疗组织”(6 ^(1/2)/ 10 + 2/5)][这些“可信赖医疗组织”(2/5 - 6 ^(1/2)/ 10),这些“可信赖医疗组织”(2/5 - 6 ^(1/2)/ 10)- 2 *π,这些“可信赖医疗组织”(2/5 - 6 ^(1/2)/ 10),2 *π-治疗状况(2/5 - 6 ^ (1/2)/ 10))
注意solx
和我还
这两套解决方案是什么万博 尤文图斯X
并y
.方程组的完整解集是由中值的所有可能万博 尤文图斯组合所构成的两组点solx
和我还
.
用散射
.将它们叠加在方程的曲线上。如预期的那样,解决方案出现在两个方万博 尤文图斯程的曲线图中。
为了i = 1:长度(solx (1,:))为了j = 1:长度(我还(1:))散射(solx(我)还(j),“k”)散射(solx(我)还(j),“k”)结束结束
符号计算提供精确的精度,而数值计算是近似值。尽管丢失了精度,但您可能需要将符号结果转换为数值近似,以便在数值计算中使用。对于高精度转换,使用由提供的变精度算法vpa
功能。对于标准精度和更好的性能,使用双重精度使用双
.
使用vpa
转换符号解万博 尤文图斯solx
和我还
数字表格。
vpa (solx) vpa(还)
Ans =[2.9859135500977407388300518406219,…-3.2972717570818457380952349259371,……0.15567910349205249963259154265761,……-6.1275062036875339772926952239014)……[0.70095651347102524787213653614929,……2.4406361401187679905905068471302,……-5.5822287937085612290531502304097,……-3.8425491670608184863347799194288] ans =[0.86983981332387137135918515549046,…-5.4133454938557151055661016110685,……-0.86983981332387137135918515549046,…… 5.4133454938557151055661016110685] ... [ 1.4151172233028441195987301489821,... -4.8680680838767423573265566175769,... -1.4151172233028441195987301489821,... 4.8680680838767423573265566175769]
如果结果看起来很复杂,解决
被卡住,或者如果您想提高性能,请参阅解决解决功能的等式解决方案故障万博 尤文图斯.