第7章 符号计算——7.8 符号代数方程求解

简介: 第7章 符号计算——7.8 符号代数方程求解

7.8  符号代数方程求解


从学习代数开始,我们就一直在探索关于方程的求解理论,从最初的代入消元法和加减消元法,到数值计算中的牛顿迭代法、高斯消元法,一直到微分方程的求解理论,方程在数学中的重要性就包含在这漫长的探索、深化过程中。

由于代数方程只涉及符号对象的代数运算,相对比较简单,它还可以细分为线性方程和非线性方程两类。前者往往可以很容易地求得所有解,但是对于后者来说,却经常容易丢掉一些解,这时就必须借助函数绘制图形,通过图形来判断方程解的个数。

这里所讲的一般代数方程包括线性、非线性和超越方程等,求解指令是solve。当方程组不存在符号解,又无其他自由参数时,solve指令将给出数值解。该指令的调用方式包括以下几种。

● g=solve(eq):其中eq可以是符号表达式或不带符号的字符串,该函数用于求解方程eq=0,其自变量采用默认变量,可以通过函数findsym来确定。

● g=solve(eq,var):求解方程eq=0,其自变量由参数var指定。其中eq和上一种调用方式相同。返回值g是由方程的所有解构成的列向量。

● g=solve(eq1,eq2,…,eqn):求解由符号表达式或不带符号的字符串eq1,eq2,…,eqn组成的方程组。其中的自变量为整个方程组的默认变量,即将函数findsym作用于整个方程组时返回的变量。

● g=solve(eq1,eq2,…,eqn,var1,var2,…,varn):求解由符号表达式或不带等号的字符串eq1,eq2,…,eqn组成的方程组。其自变量由输入参数var1,var2,…,varn指定。


对于上面的4种调用方式,输出的解有以下3种情况:

对于单个方程单个输出参数的情况,将返回由多个解构成的列向量。

对于有和方程数目相同的输出参数的情况,方程组的解将分别赋给每个输出参数,并按照字母表的顺序进行排列。

对于只有一个输出参数的方程组,方程组的解将以结构矩阵的形式赋给输出参数。


7-33:符号代数方程求解示例。

在命令行窗口中输入:

clear
syms a b c x;
f = sym(a * x + b * x^-1 + c)
solve(f)

输出结果:

f =
c + a*x + b/x
ans =
 -(c + (c^2 - 4*a*b)^(1/2))/(2*a)
 -(c - (c^2 - 4*a*b)^(1/2))/(2*a)


在命令行窗口中输入:

clear
syms a b c x;
f = sym(a * x^2 + b * x + c)
solve(f, x)

输出结果:

f =
a*x^2 + b*x + c
ans =
 -(b + (b^2 - 4*a*c)^(1/2))/(2*a)
 -(b - (b^2 - 4*a*c)^(1/2))/(2*a)

在命令行窗口中输入:

solve(f, a)

输出结果:

ans =
-(c + b*x)/x^2


在命令行窗口中输入:

clear
syms x y;
f1 = sym(x^2 + y^2 == 25)
f2 = sym(x * y == 12)
[x, y] = solve(f1, f2)

输出结果:

f1 =
x^2 + y^2 == 25
f2 =
x*y == 12
x =
 -3
 -4
  4
  3
y =
 -4
 -3
  3
  4


在命令行窗口中输入:

clear
syms x y a b;
f1 = sym(x^2 + y^2 == a^2)
f2 = sym(x * y == b)
S = solve(f1, f2, x, y)

输出结果:

f1 =
x^2 + y^2 == a^2
f2 =
x*y == b
S =
  包含以下字段的 struct:
    x: [4×1 sym]
    y: [4×1 sym]


在命令行窗口中输入:

S.x

输出结果:

ans =
 -((a^2/2 - (-(- a^2 + 2*b)*(a^2 + 2*b))^(1/2)/2)^(3/2) - a^2*(a^2/2 - (-(- a^2 + 2*b)*(a^2 + 2*b))^(1/2)/2)^(1/2))/b
 -((a^2/2 + (-(- a^2 + 2*b)*(a^2 + 2*b))^(1/2)/2)^(3/2) - a^2*(a^2/2 + (-(- a^2 + 2*b)*(a^2 + 2*b))^(1/2)/2)^(1/2))/b
  ((a^2/2 - (-(- a^2 + 2*b)*(a^2 + 2*b))^(1/2)/2)^(3/2) - a^2*(a^2/2 - (-(- a^2 + 2*b)*(a^2 + 2*b))^(1/2)/2)^(1/2))/b
  ((a^2/2 + (-(- a^2 + 2*b)*(a^2 + 2*b))^(1/2)/2)^(3/2) - a^2*(a^2/2 + (-(- a^2 + 2*b)*(a^2 + 2*b))^(1/2)/2)^(1/2))/b


在命令行窗口中输入:

S.y

输出结果:

ans =
  (a^2/2 - (-(- a^2 + 2*b)*(a^2 + 2*b))^(1/2)/2)^(1/2)
  (a^2/2 + (-(- a^2 + 2*b)*(a^2 + 2*b))^(1/2)/2)^(1/2)
 -(a^2/2 - (-(- a^2 + 2*b)*(a^2 + 2*b))^(1/2)/2)^(1/2)
 -(a^2/2 + (-(- a^2 + 2*b)*(a^2 + 2*b))^(1/2)/2)^(1/2)

相关文章
|
6月前
|
算法 前端开发
代码求解方程
代码求解方程
55 0
第7章 符号计算——7.5 符号函数的操作
第7章 符号计算——7.5 符号函数的操作
|
机器学习/深度学习 算法
专题六数值微积分与方程求解-2
专题六数值微积分与方程求解
101 0
|
6月前
|
安全 编译器 程序员
【C++ 编译时有理算术】理解 C++编译时有理数运算:原理、实践与应用
【C++ 编译时有理算术】理解 C++编译时有理数运算:原理、实践与应用
107 1
|
11月前
|
机器学习/深度学习 算法
算法分析 | 第三套(渐近符号)
算法分析 | 第三套(渐近符号)
96 0
|
11月前
|
机器学习/深度学习 算法
算法分析 | 小 o 和小欧米茄符号
算法分析 | 小 o 和小欧米茄符号
187 0
|
算法 Serverless
专题六数值微积分与方程求解-1
专题六数值微积分与方程求解
113 0
数学问题-反射定律&折射定律的向量形式推导
数学问题-反射定律&折射定律的向量形式推导
206 0
第7章 符号计算——7.9 符号微分方程求解
第7章 符号计算——7.9 符号微分方程求解