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

相关文章
|
7月前
|
监控 数据可视化 搜索推荐
商场智能导视系统:3D可视化技术逻辑拆解
本文解析3D可视化后台如何将用户行为数据转化为商场运营决策。通过数字孪生技术、用户画像与路径分析,、招商流程可视化协同,提升效率,推动商场从“经验决策”迈向“数据驱动”,实现智能高效运营。
211 0
|
机器学习/深度学习 前端开发 计算机视觉
【YOLOv10改进-特征融合篇】EVC(Explicit Visual Center): 中心化特征金字塔模块 | 小目标
YOLO目标检测专栏探讨了对YOLO框架的创新改进,如中心化特征金字塔(CFP)。CFP引入了空间显式视觉中心方案和全局集中特征规范,通过轻量级MLP与并行视觉中心机制强化特征表示,尤其利于小目标检测。在YOLOv5和YOLOX基础上,CFP实现性能提升。相关代码示例展示了EVCBlock的结构,整合了LVCBlock和LightMLPBlock。更多详情和配置参见[YOLO基础解析+创新改进+实战案例](https://blog.csdn.net/shangyanaf/category_12303415.html)。
|
存储 算法 安全
国密SSL技术背景介绍
随着越来越多的国际通用密码算法屡屡被传出被破解、被攻击的传闻,存在较高的安全风险。此外,当前我国金融系统大多采用国外制定的加密算法,存在着大量的不可控因素,一旦被不法分子利用攻击,所产生的损失将不可估量。所以国密改造提上日程。国密SSL通信依据的协议是中国人民共和国密码行业标准《SSL VPN技术规范GM/T 0024--2014》协议(链接)。其协议流程和传统的使用RSA证书的TLS协议流程基本一致,但是过程中使用的核心算法已经全部切换到国密相关的算法实现上,为了保证通信的安全监管机构开始推动国内金融行业进行国密改造。我们和客户一起进行了多个国密项目的改造之后,这里整理了国密HTTPS 和国
4436 0
国密SSL技术背景介绍
|
存储 算法 搜索推荐
八大排序算法总结+例题练习(正在不断补充...)
八大排序算法总结+例题练习(正在不断补充...)
八大排序算法总结+例题练习(正在不断补充...)
|
Java Linux 计算机视觉
全网首发:Linux自带opencv库的JAVA调用失败/java.lang.UnsatisfiedLinkError:libopencv_ml.so.405: 无法打开共享对象文件
全网首发:Linux自带opencv库的JAVA调用失败/java.lang.UnsatisfiedLinkError:libopencv_ml.so.405: 无法打开共享对象文件
803 0
|
JSON 前端开发 关系型数据库
|
网络架构
|
Linux Unix
linux网络配置相关命令、虚拟网络接口eth0:0
网络接口(interface)是网络硬件设备在操作系统中的表示方法,比如网卡在Linux操作系统中用ethX,是由0开始的正整数,比如eth0、eth1...... ethX。而普通猫和ADSL的接口是 pppX,比如ppp0等; 机器中所有可用网卡、名字、配置文件:  dmesg | grep...
2342 0