第7章 符号计算——7.4 符号表达式替换

简介: 第7章 符号计算——7.4 符号表达式替换

7.4  符号表达式替换


在处理一些结构较为复杂、变量较多的数学模型时,引入一些新的变量进行代换,以简化其结构,从而达到解决问题的目的,这种方法叫作变量代换法。


例如,求不定积分74ae37d87ac7a473ee04f97b762e856d_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png,设8401e30e03e929dd163f9248ab4f15d1_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png,则

21e3d52020f45a0a7fc6059a882403ac_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

变量代换法是一种非常有效的解题方法,尤其是在处理一些复杂的不等式问题时,效果明显。合理代换往往能简化题目的信息,凸显隐含条件,沟通量与量之间的关系,对发现解题思路、优化解题过程有着重要的作用。

MATLAB提供了subs函数和subexpr函数进行变量代换,或者叫作符号表达式的替换。subs函数利用符号变量或符号表达式替换目标符号表达式中的符号变量(包括符号常量);subexpr函数利用符号变量替换目标符号表达式中的某个子符号表达式。


7.4.1  subs替换函数


函数subs可以用指定符号替换符号表达式中的某一特定符号,其调用格式如下。

● R=subs(S):用工作区中的变量值替代符号表达式S中的所有符号变量。如果没有指定某符号变量的值,则返回值中该符号变量不被替换。

● R=subs(S,New):用新符号变量New替代原来符号表达式S中的默认变量。确定默认变量的规则与函数findsym的规则相同。

● R=subs(S,Old,New):用新符号变量New替代原来符号表达式S中的变量Old。当New是数值形式的符号时,实际上用数值代替原来的符号来计算表达式的值,只是所得结果仍然是字符串形式。


7-21subs替换函数示例。

在命令行窗口中输入:

syms x y t;
f = sym(x^2 + x * y + y^2)
x = 2;
subs(f)

输出结果:

f =
x^2 + x*y + y^2
ans =
y^2 + 2*y + 4


在命令行窗口中输入:

y = 2;
subs(f)

输出结果:

ans =
12


在命令行窗口中输入:

subs(f, t^2)

输出结果:

ans =
t^4 + t^2*y + y^2


在命令行窗口中输入:

subs(f, {'x', 'y'}, {3, 4})

输出结果:

ans =
37



7.4.2  subexpr替换函数


函数subexpr将表达式中重复出现的字符串用变量代替,其调用格式如下。

● [Y,SIGMA]=subexpr(S,SIGMA):指定用变量SIGMA的值(必须为符号对象)来代替符号表达式(可以是矩阵)中重复出现的字符串。替换后的结果由Y返回,被替换的字符串由SIGMA 返回。

● [Y,SIGMA]=subexpr(S,'SIGMA'):这种形式和上一种形式的不同之处在于,第二个输入参数是字符或字符串,它用来替换符号表达式中重复出现的字符串。其他参数与上面的形式相同。


7-22subexpr替换函数示例。

在命令行窗口中输入:

syms  a b c d x
solutions = solve(a * x^3 + b * x^2 + c * x + d == 0, x, 'MaxDegree', 3)

输出结果:

solutions =
                                                                                                                                                                                                                                                                                                                        (((d/(2*a) + b^3/(27*a^3) - (b*c)/(6*a^2))^2 + (- b^2/(9*a^2) + c/(3*a))^3)^(1/2) - b^3/(27*a^3) - d/(2*a) + (b*c)/(6*a^2))^(1/3) - b/(3*a) - (- b^2/(9*a^2) + c/(3*a))/(((d/(2*a) + b^3/(27*a^3) - (b*c)/(6*a^2))^2 + (c/(3*a) - b^2/(9*a^2))^3)^(1/2) - b^3/(27*a^3) - d/(2*a) + (b*c)/(6*a^2))^(1/3)
 (- b^2/(9*a^2) + c/(3*a))/(2*(((d/(2*a) + b^3/(27*a^3) - (b*c)/(6*a^2))^2 + (c/(3*a) - b^2/(9*a^2))^3)^(1/2) - b^3/(27*a^3) - d/(2*a) + (b*c)/(6*a^2))^(1/3)) - (3^(1/2)*((- b^2/(9*a^2) + c/(3*a))/(((d/(2*a) + b^3/(27*a^3) - (b*c)/(6*a^2))^2 + (c/(3*a) - b^2/(9*a^2))^3)^(1/2) - b^3/(27*a^3) - d/(2*a) + (b*c)/(6*a^2))^(1/3) + (((d/(2*a) + b^3/(27*a^3) - (b*c)/(6*a^2))^2 + (- b^2/(9*a^2) + c/(3*a))^3)^(1/2) - b^3/(27*a^3) - d/(2*a) + (b*c)/(6*a^2))^(1/3))*1i)/2 - b/(3*a) - (((d/(2*a) + b^3/(27*a^3) - (b*c)/(6*a^2))^2 + (- b^2/(9*a^2) + c/(3*a))^3)^(1/2) - b^3/(27*a^3) - d/(2*a) + (b*c)/(6*a^2))^(1/3)/2
 (- b^2/(9*a^2) + c/(3*a))/(2*(((d/(2*a) + b^3/(27*a^3) - (b*c)/(6*a^2))^2 + (c/(3*a) - b^2/(9*a^2))^3)^(1/2) - b^3/(27*a^3) - d/(2*a) + (b*c)/(6*a^2))^(1/3)) + (3^(1/2)*((- b^2/(9*a^2) + c/(3*a))/(((d/(2*a) + b^3/(27*a^3) - (b*c)/(6*a^2))^2 + (c/(3*a) - b^2/(9*a^2))^3)^(1/2) - b^3/(27*a^3) - d/(2*a) + (b*c)/(6*a^2))^(1/3) + (((d/(2*a) + b^3/(27*a^3) - (b*c)/(6*a^2))^2 + (- b^2/(9*a^2) + c/(3*a))^3)^(1/2) - b^3/(27*a^3) - d/(2*a) + (b*c)/(6*a^2))^(1/3))*1i)/2 - b/(3*a) - (((d/(2*a) + b^3/(27*a^3) - (b*c)/(6*a^2))^2 + (- b^2/(9*a^2) + c/(3*a))^3)^(1/2) - b^3/(27*a^3) - d/(2*a) + (b*c)/(6*a^2))^(1/3)/2


继续输入:

[r, sigma] = subexpr(solutions)

输出结果:

r =
                                                                  sigma - b/(3*a) - (- b^2/(9*a^2) + c/(3*a))/sigma
 (- b^2/(9*a^2) + c/(3*a))/(2*sigma) - b/(3*a) - (3^(1/2)*(sigma + (- b^2/(9*a^2) + c/(3*a))/sigma)*1i)/2 - sigma/2
 (- b^2/(9*a^2) + c/(3*a))/(2*sigma) - b/(3*a) + (3^(1/2)*(sigma + (- b^2/(9*a^2) + c/(3*a))/sigma)*1i)/2 - sigma/2
sigma =
(((d/(2*a) + b^3/(27*a^3) - (b*c)/(6*a^2))^2 + (- b^2/(9*a^2) + c/(3*a))^3)^(1/2) - b^3/(27*a^3) - d/(2*a) + (b*c)/(6*a^2))^(1/3)

相关文章
|
存储 网络协议 Shell
【Shell 命令集合 网络通讯 】Linux 网络配置 netconf命令 使用指南
【Shell 命令集合 网络通讯 】Linux 网络配置 netconf命令 使用指南
286 1
excel 百分位函数 学习
excel 百分位函数 学习
593 1
|
10月前
|
XML 存储 大数据
Harmony os next~HarmonyOS Ability与页面跳转开发详解
HarmonyOS采用分布式架构,其Ability体系包括Page、Service、Data和Form四大类型Ability。Page Ability支持多页面跳转与数据传递,Service Ability用于后台任务,Data Ability提供数据共享接口,Form Ability实现轻量化卡片服务。本文详细解析了各Ability的开发方法、生命周期管理、跨Ability通信及最佳实践,帮助开发者掌握HarmonyOS应用开发的核心技能。
822 0
|
缓存 NoSQL Java
谷粒商城笔记+踩坑(12)——缓存与分布式锁,Redisson+缓存数据一致性
缓存与分布式锁、Redisson分布式锁、缓存数据一致性【必须满足最终一致性】
821 16
谷粒商城笔记+踩坑(12)——缓存与分布式锁,Redisson+缓存数据一致性
|
存储 运维 监控
自动化运维:使用Python脚本进行服务器监控
【8月更文挑战第31天】在数字化时代,服务器的稳定运行对于企业至关重要。本文将介绍如何使用Python编写一个简单的服务器监控脚本,帮助运维人员及时发现并解决潜在问题。我们将从基础的服务器资源监控开始,逐步深入到日志分析与报警机制的实现。通过实际代码示例和操作步骤,使读者能够快速掌握自动化监控的技能,提升工作效率。
|
机器学习/深度学习 算法 Python
CatBoost中级教程:超参数调优与模型选择
CatBoost中级教程:超参数调优与模型选择【2月更文挑战第12天】
1636 2
|
SQL 前端开发 Java
java为什么要分为service层,dao层,controller层和Entity层等?
java为什么要分为service层,dao层,controller层和Entity层等?
1444 0
|
SQL Java 关系型数据库
Mybatis保姆级丝滑教程(一文搞懂系列)(1)
Mybatis保姆级丝滑教程(一文搞懂系列)
1334 0