主要内容

解代数方程组

本主题向您展示如何使用“符号数学工具箱”™符号化地解决方程组。这个工具箱提供了数值和符号方程求解器。有关数值解算器和符号解算器的比较,请参见选择数字或符号求解器

处理solve的输出

假设你有一个系统

X 2 y 2 = 0. X - y 2 = α

你想解决Xy.首先,创建必要的符号对象。

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 ^ 2u + v = 1A ^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选项真正的

考虑以下方程组:

X + 因为 y = 4. 5. X 因为 y = 1 10.

使用示例性可视化方程式fimplicit.设置X设在和y-轴的值π,获取轴柄使用一种.创建符号数组S.的值2 *π2 * pi.每隔π/ 2.把刻度设置为S., 使用XTickytick.的属性一种.要设置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'......“位置”“最佳”“自动更新”“关闭”

图中包含一个轴。具有等式系统的标题图的轴包含2个类型的ImplicicFunctionline。这些对象代表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解决方案XS.y解决方案yS.parameters获取解决方案中的参数,以及S.conditions对于溶液的条件。中相同索引的元素S.xS.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'))

在条件下解决方程系统

要解条件下的方程组,请在输入时指定条件解决

求解上述所考虑的方程组Xy在这一期间2 *π2 * pi..叠加在图上的解决方案万博 尤文图斯散射

SRange =求解(EQN1,EQN2,-2 * PI 'returnconditions',真正的);散射(Srange。x Srange.y“k”

图中包含一个轴。题目为方程组图的坐标轴包含隐函数线、散点三种类型的对象。这些对象代表SIN(x)+ cos(y)== 4/5,sin(x)* cos(y)== 1/10。

使用solve返回的万博 尤文图斯解决方案、参数和条件

您可以使用返回的解决方案,参数和万博 尤文图斯条件解决求解在一个区间内万博 尤文图斯或在附加条件下找到解本节的目标与前一节相同,即在搜索范围内求解方程组,但采用了不同的方法。而不是直接放置条件,它展示了如何使用参数和条件返回解决

对于完整的解决方案S.在方程组中,求值Xy在这一期间2 *π2 * pi.通过求解万博 尤文图斯S.xS.y参数的S.parameters在这个条件下S.conditions

在解决之前Xy在间隔中,假设条件S.conditions使用认为因此返回的解满足条件。万博 尤文图斯假设第一个解决方案的条件。

假设(S.conditions (1))

查找参数S.xS.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))

解决第二个解决方案Xy参数的paramxparamy

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)]

第一排paramxparamy形成方程组的第一个解,第二行形成第二个解。

求值Xy对于这些价值paramxparamy,使用subs替代paramxparamyS.xS.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我还这两套解决方案是什么万博 尤文图斯Xy.方程组的完整解集是由中值的所有可能万博 尤文图斯组合所构成的两组点solx我还

散射.将它们叠加在方程的曲线上。如预期的那样,解决方案出现在两个方万博 尤文图斯程的曲线图中。

为了i = 1:长度(solx (1,:))为了j = 1:长度(我还(1:))散射(solx(我)还(j),“k”)散射(solx(我)还(j),“k”结束结束

图中包含一个轴。题目为方程组图的坐标轴包含35个隐函数线、散点类型的对象。这些对象代表SIN(x)+ cos(y)== 4/5,sin(x)* cos(y)== 1/10。

将符号结果转换为数字值

符号计算提供精确的精度,而数值计算是近似值。尽管丢失了精度,但您可能需要将符号结果转换为数值近似,以便在数值计算中使用。对于高精度转换,使用由提供的变精度算法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]

简化复杂的结果并提高性能

如果结果看起来很复杂,解决被卡住,或者如果您想提高性能,请参阅解决解决功能的等式解决方案故障万博 尤文图斯