主要内容

解代数方程组

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

的输出解决

假设你有这个系统

x 2 y 2 0 x - y 2 α

你想解的是 x 而且 y .首先,创建必要的符号对象。

信谊xy一个

的输出有几种方法解决.一种方法是使用双输出调用。调用返回以下内容。

[solx,soly] = solve(x^2*y^2 == 0, x-y/2 == a)
solx =

一个 0

我还=

0 - 2 一个

将第一个方程修改为 x 2 y 2 1 .新系统有更多的解决方案。万博 尤文图斯产生了四种不同的解。万博 尤文图斯

[solx,soly] = solve(x^2*y^2 == 1, x-y/2 == a)
solx =

一个 2 - 一个 2 - 2 2 一个 2 - 一个 2 + 2 2 一个 2 + 一个 2 - 2 2 一个 2 + 一个 2 + 2 2

我还=

- 一个 - 一个 2 - 2 - 一个 - 一个 2 + 2 一个 2 - 2 - 一个 一个 2 + 2 - 一个

因为你没有指定因变量,解决使用symvar来确定变量。

分配输出的方法解决对于“小型”系统非常成功。例如,如果您有一个10乘10的方程组,输入以下内容既笨拙又耗时。

[x1,x2,x3,x4,x5,x6,x7,x8,x9,x10] = solve(...

为了克服这个困难,解决可以返回字段为解的结构。万博 尤文图斯例如,解方程组U²- v²= a²U + v = 1A ^2 - 2* A = 3.求解器返回包含在结构中的结果。

信谊uv一个S =解决(u v ^ ^ 2 - 2 = = ^ 2, u + v = = 1 ^ 2 - 2 * 3 = =)
S =带字段的结构:A: [2x1 sym] u: [2x1 sym] v: [2x1 sym]

的解决方万博 尤文图斯案一个居住在"一个场”,年代

s.a.
ans =

- 1 3.

类似的注释适用于的解决方案万博 尤文图斯u而且v.结构年代现在可以由字段和索引操作以访问解决方案的特定部分。例如,要检查第二个解决方案,可以使用下面的语句提取每个字段的第二个组件。

s2 = [S.a(2),S.u(2),S.v(2)]
s2 =
                  
                   
                    
                     
                     
                      
                       
                        
                         
                          3.
                        
                       
                       
                        
                         
                          5
                        
                       
                       
                        
                         
                          
                           
                            -
                           
                            4
                          
                         
                        
                       
                      
                     
                     
                    
                   
                  

下面的语句创建解矩阵它的行组成了系统的不同解。万博 尤文图斯

M = [S.a,S.u,S.v]
M =

- 1 1 0 3. 5 - 4

清晰的solx而且我还供进一步使用。

清晰的solx我还

解一个线性方程组

线性方程组也可以用矩阵除法求解。例如,解这个方程组。

清晰的uvxy信谊uvxy= [x + 2*y == u, 4*x + 5*y == v];S = solve(eqns);sol = [S.x;S.y]
索尔=

2 v 3. - 5 u 3. 4 u 3. - v 3.

[A,b] = equationsToMatrix(eqns,x,y);z = A\b
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轴的值设置为π,得到轴处理使用一个.创建符号数组年代价值观2 *π2 *π每隔π/ 2.将刻度设置为年代,使用XTick而且YTick的属性一个.要设置x轴和y轴的标签,请进行转换年代到字符向量。使用arrayfun应用字符到每一个元素年代返回T.设置XTickLabel而且YTickLabel的属性一个T

信谊xyEqn1 = sin(x)+cos(y) = 4/5;Eqn2 = sin(x)*cos(y) = 1/10;A =坐标轴;fimplicit (eqn1(2 * 2π*π)“b”);持有网格fimplicit (eqn2(2 * 2π*π)“米”);L = sym(-2*pi:pi/2:2*pi);a.XTick = double(L);a.YTick = double(L);M = arrayfun(@char, L,“UniformOutput”、假);a.XTickLabel = M;a.YTickLabel = M;标题(“方程组图”)传说(sin(x)+cos(y) = 4/5'sin(x)*cos(y) = 1/10...“位置”“最佳”“自动更新”“关闭”

图中包含一个轴对象。标题为Plot of System of Equations的坐标轴对象包含2个隐式函数线类型的对象。这些对象表示sin(x)+cos(y) == 4/5, sin(x)*cos(y) == 1/10。

解在两个万博 尤文图斯图的交点处。这表明系统有重复的周期解。万博 尤文图斯要求解这个方程组的全解集,请使用解决并设置ReturnConditions选项真正的

S = solve(eqn1,eqn2,“ReturnConditions”,真正的)
S =带字段的结构:X: [2x1 sym] y: [2x1 sym] parameters: [z z1] conditions: [2x1 sym]

解决返回一个结构年代在田野里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.x
ans =

z 1 z 1

S.y
ans =

z z

S.parameters
ans =
                  
                   
                    
                     
                     
                      
                       
                        
                         
                          z
                        
                       
                       
                        
                         
                          
                           
                            z
                          
                          
                           
                            1
                          
                         
                        
                       
                      
                     
                     
                    
                   
                  
S.conditions
ans =

z + 这些“可信赖医疗组织” σ 3. 2 π Z z - 这些“可信赖医疗组织” σ 3. 2 π Z - π - z 1 + σ 1 2 π Z z 1 + σ 1 2 π Z z 1 - π + 印度历的7月 σ 3. 2 π Z z 1 - 印度历的7月 σ 3. 2 π Z z + σ 2 2 π Z z - σ 2 2 π Z 在哪里 σ 1 印度历的7月 6 10 - 2 5 σ 2 这些“可信赖医疗组织” 2 5 - 6 10 σ 3. 6 10 + 2 5

在一定条件下解方程组

要在条件下解方程组,在输入中指定条件到解决

解上面考虑的方程组x而且y在这段时间2 *π2 *π.将解叠加在图上使用万博 尤文图斯散射

Srange = solve(eqn1, eqn2, -2* < x, x < 2*, -2* < y, y < 2*,“ReturnConditions”,真正的);散射(Srange.x Srange.y,“k”

图中包含一个轴对象。标题为Plot of System of Equations的坐标轴对象包含3个类型为隐式函数线、散点的对象。这些对象表示sin(x)+cos(y) == 4/5, sin(x)*cos(y) == 1/10。

处理返回的解决方案、万博 尤文图斯参数和条件解决

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

对于完整解年代求方程组的值x而且y在这段时间2 *π2 *π通过解题万博 尤文图斯S.x而且S.y对于参数S.parameters在这个区间内S.conditions

在解x而且y在区间中,假设条件为S.conditions使用假设使返回的解满足条件。万博 尤文图斯假设第一个解的条件。

假设(S.conditions (1))

S.x而且S.y

paramx = intersect(symvar(S.x),S.parameters)
paramx =
                  
                   
                    
                     
                      
                       z
                     
                     
                      
                       1
                     
                    
                   
                  
paramy = intersect(symvar(S.y), s.s parameters)
paramy =
                  
                   
                    
                     z
                   
                  

求解第一个解x对于参数paramx

solparamx(1) =解决(S.x(1) > 2π,S.x(1) < 2 *π,paramx)
solparamx =

π + 印度历的7月 6 10 - 2 5 印度历的7月 6 10 - 2 5 - π - 印度历的7月 6 10 - 2 5 - 2 π - 印度历的7月 6 10 - 2 5

类似地,求解的第一个解yparamy

solparamy(1) =解决(S.y(1) > 2π,S.y(1) < 2 *π,paramy)
solparamy =

这些“可信赖医疗组织” 6 10 + 2 5 这些“可信赖医疗组织” 6 10 + 2 5 - 2 π - 这些“可信赖医疗组织” 6 10 + 2 5 2 π - 这些“可信赖医疗组织” 6 10 + 2 5

清除由设置的假设S.conditions (1)使用假设.调用asumptions检查假设是否正确。

假设(S.parameters“清楚”)假设
ans =空sym: 1乘0

假设第二个解的条件。

假设(S.conditions (2))

解第二个解x而且y对于参数paramx而且paramy

solparamx(2) =解决(S.x(2) > 2 *π,S.x(2) < 2 *π,paramx)
solparamx =

π + σ 1 σ 1 - π - σ 1 - 2 π - σ 1 σ 2 π - σ 2 σ 2 - 2 π - π - σ 2 在哪里 σ 1 印度历的7月 6 10 - 2 5 σ 2 印度历的7月 6 10 + 2 5

solparamy(2) =解决(S.y(2) > 2 *π,S.y(2) < 2 *π,paramy)
solparamy =

σ 2 σ 2 - 2 π - σ 2 2 π - σ 2 σ 1 σ 1 - 2 π - σ 1 2 π - σ 1 在哪里 σ 1 这些“可信赖医疗组织” 2 5 - 6 10 σ 2 这些“可信赖医疗组织” 6 10 + 2 5

第一行paramx而且paramy形成方程组的第一个解,第二行形成第二个解。

求的值x而且y对于这些值paramx而且paramy,使用潜艇代替paramx而且paramyS.x而且S.y

solx(1) =潜艇(S.x (1) paramx, solparamx (1:));solx(2,:) = subs(S.x(2), paramx, solparamx(2,:)))
solx =

π + σ 1 σ 1 - π - σ 1 - 2 π - σ 1 σ 2 π - σ 2 σ 2 - 2 π - π - σ 2 在哪里 σ 1 印度历的7月 6 10 - 2 5 σ 2 印度历的7月 6 10 + 2 5

还(1)=潜艇(S.y (1) paramy, solparamy (1:));soly(2,:) = subs(S.y(2), paramy, solparamy(2,:)))
我还=

σ 2 σ 2 - 2 π - σ 2 2 π - σ 2 σ 1 σ 1 - 2 π - σ 1 2 π - σ 1 在哪里 σ 1 这些“可信赖医疗组织” 2 5 - 6 10 σ 2 这些“可信赖医疗组织” 6 10 + 2 5

请注意,solx而且我还这两组解是万博 尤文图斯xy.方程组的完整解是由中值的所有可能组万博 尤文图斯合所形成的两组点solx而且我还

散射.把它们覆盖在方程的图形上。正如预期的那样,解出现在两个方程的万博 尤文图斯图的交点处。

I = 1:length(solx(1,:))j = 1:长度(我还(1:))散射(solx(我)还(j),“k”solx(2,i), soly(2,j),“k”结束结束

图中包含一个轴对象。标题为Plot of System of Equations的坐标轴对象包含35个隐式函数线、散点类型的对象。这些对象表示sin(x)+cos(y) == 4/5, sin(x)*cos(y) == 1/10。

将符号结果转换为数值

符号计算提供精确的精度,而数值计算是近似值。尽管会损失精度,但您可能需要将符号结果转换为数值近似值,以便在数值计算中使用。方法提供的变精度算法可用于高精度转换vpa函数。为了标准精度和更好的性能,转换为双精度使用

使用vpa转换符号解万博 尤文图斯solx而且我还变成数字形式。

vpa (solx)
ans =

2.9859135500977407388300518406219 - 3.2972717570818457380952349259371 0.15567910349205249963259154265761 - 6.1275062036875339772926952239014 0.70095651347102524787213653614929 2.4406361401187679905905068471302 - 5.5822287937085612290531502304097 - 3.8425491670608184863347799194288

vpa(还)
ans =

0.86983981332387137135918515549046 - 5.4133454938557151055661016110685 - 0.86983981332387137135918515549046 5.4133454938557151055661016110685 1.4151172233028441195987301489821 - 4.8680680838767423573265566175769 - 1.4151172233028441195987301489821 4.8680680838767423573265566175769

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

如果结果看起来很复杂,解决卡住了,或者如果你想提高性能,从solve函数解决方程问题万博 尤文图斯