第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月前
|
监控 数据可视化 搜索推荐
商场智能导视系统:3D可视化技术逻辑拆解
本文解析3D可视化后台如何将用户行为数据转化为商场运营决策。通过数字孪生技术、用户画像与路径分析,、招商流程可视化协同,提升效率,推动商场从“经验决策”迈向“数据驱动”,实现智能高效运营。
182 0
|
机器学习/深度学习 搜索推荐 大数据
大数据与教育:学生表现分析的工具
【10月更文挑战第31天】在数字化时代,大数据成为改善教育质量的重要工具。本文探讨了大数据在学生表现分析中的应用,介绍学习管理系统、智能评估系统、情感分析技术和学习路径优化等工具,帮助教育者更好地理解学生需求,制定个性化教学策略,提升教学效果。尽管面临数据隐私等挑战,大数据仍为教育创新带来巨大机遇。
|
自然语言处理 算法 API
「AIGC」Python实现tokens算法
使用Python的`transformers`库,通过`AutoTokenizer`初始化BERT tokenizer,对文本进行分词统计,减少API调用。示例展示从开始到结束的时间,包括文本转换为tokens的数量和过程耗时。
586 0
「AIGC」Python实现tokens算法
|
机器学习/深度学习 前端开发 计算机视觉
【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 和国
4389 0
国密SSL技术背景介绍
|
存储 算法 搜索推荐
八大排序算法总结+例题练习(正在不断补充...)
八大排序算法总结+例题练习(正在不断补充...)
八大排序算法总结+例题练习(正在不断补充...)
|
小程序 UED Windows
零基础做个跳跃答题小游戏
嗨!大家好,我是小蚂蚁。 今天分享一篇零基础的答题小游戏制作教程,无需具备任何的开发经验或基础,使用一个游戏模版,跟随着详细的教程,任何人都能够定制一个自己的跳跃答题小游戏。 首先,我们来看一下跳跃答题小游戏的模版,长按识别下方的小程序码,即可体验。
338 0
|
前端开发 JavaScript
react-router的组件生命周期
react-router的组件生命周期
442 0
|
Java Linux 计算机视觉
全网首发:Linux自带opencv库的JAVA调用失败/java.lang.UnsatisfiedLinkError:libopencv_ml.so.405: 无法打开共享对象文件
全网首发:Linux自带opencv库的JAVA调用失败/java.lang.UnsatisfiedLinkError:libopencv_ml.so.405: 无法打开共享对象文件
797 0