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

相关文章
第7章 符号计算——7.5 符号函数的操作
第7章 符号计算——7.5 符号函数的操作
|
6月前
|
编译器 Linux C语言
预处理详解(#和##运算符、命名约定、#undef​​、命令行定义​、条件编译、头文件的包含​)
预处理详解(#和##运算符、命名约定、#undef​​、命令行定义​、条件编译、头文件的包含​)
全局变量,局部变量 ,内置函数,全集
全局变量,局部变量 ,内置函数,全集
|
4月前
|
开发者 Python
Python函数参数定义中的这两个分隔符,还有人不知道吗?
python 函数的参数定义想必大家应该是非常熟悉的,有两种: • 位置参数(positional argument):根据函数在参数列表中的位置传递给函数的参数。 • 关键词参数(keyword argument):通过指定参数名称及其对应值传参的参数。
|
5月前
|
C语言
C语言函数大全--c开头的函数之复数篇
【6月更文挑战第3天】本篇介绍 C语言中 c开头的函数之复数篇【C语言函数大全】
59 5
C语言函数大全--c开头的函数之复数篇
第7章 符号计算——7.3 符号表达式操作
第7章 符号计算——7.3 符号表达式操作
第7章 符号计算——7.2 符号对象和符号表达式(2)
第7章 符号计算——7.2 符号对象和符号表达式(2)
第7章 符号计算——7.2 符号对象和符号表达式(1)
第7章 符号计算——7.2 符号对象和符号表达式(1)
|
机器学习/深度学习 Cloud Native Go
779. 第K个语法符号:简单模拟
这是 力扣上的 779. 第K个语法符号,难度为 中等。
|
C语言 C++
C++ 链接库顺序导致的符号未定义问题
C++ 链接库顺序导致的符号未定义问题
121 0