MATLAB 符号表达式与运算全面详细讲解 您所在的位置:网站首页 一次函数的函数表达式怎么求 MATLAB 符号表达式与运算全面详细讲解

MATLAB 符号表达式与运算全面详细讲解

2024-06-29 17:23| 来源: 网络整理| 查看: 265

文章目录 1. 符号定义1.1 sym函数介绍1.1.1 定义单个符号1.1.2 定义多个符号1.1.3 保留真实数据 1.2 syms函数介绍1.2.1 定义不同变量1.2.2 定义多行符号 2. 代换符号2.1 代换表达式中的符号2.2 控制替换后的精度 3. 其他函数3.1 因式分解3.2 展开表达式3.3 合并同类项3.4 化简3.5 通分3.6 嵌套分解3.7 求反函数3.8 复合函数

1. 符号定义 1.1 sym函数介绍 1.1.1 定义单个符号

sym 函数能够定义单个的符号变量,如下所示:

a = sym('a')

运行后的显示为:

a = a

1.1.2 定义多个符号

当需要定义多个变量时,则可以在后面写上需要变量的行数与列数,其可以生成多行多列的变量矩阵。

A = sym('a',[2 4])

打印出的结果如下

A = [ a1_1, a1_2, a1_3, a1_4] [ a2_1, a2_2, a2_3, a2_4]

当想调用对应的符号时用矩阵元素的索引即可

f = A(1,3) * 8

f = 8*a1_3

sym 还支持自定义生成的变量的形式,

A = sym('a_%d_%d',[2 4])

生成的符号就是a_1_1 的形式。

1.1.3 保留真实数据

使用sym 函数能够将数据的值进行精确的保留,不必要担心计算机计算的误差等问题。 例如,当计算 1 123467 ∗ 3 4 \frac{1}{123467} * \frac{3}{4} 1234671​∗43​ 时,我们想要的是准确的分数形式,但是直接输入的话会导致答案成为浮点形式,这时使用 sym函数就能避免这种情况。 直接输入如下:

answer = 1 / 1234567 * (3 / 4)

输出为

answer = 6.0750e-07

使用sym函数转换后:

answer2 = 1 / sym(1234567) * (3 / 4)

输出为

answer2 = 3/4938268

该答案为分式形式的准确解。 注意:在使用sym函数进行精度保留时,不能将其写为sym(1/1234567) ,写成这种形式时会优先计算1/1234567再将其转为分式,精度已经得到了损失。

1.2 syms函数介绍 1.2.1 定义不同变量

syms函数能够很快的定义多个不同的变量,变量之间只需要使用空格隔开就行,形式如下:

syms a b c d

使用whos命令查看所有变量为

Name     Size     Bytes Class     Attributes a             1x1            8  sym b             1x1            8  sym c             1x1            8  sym d             1x1            8  sym

1.2.2 定义多行符号

syms 同样可以定义多行多列的数据类型,形式如下

syms a [4 3]

以上代码定义了一个4*3的符号,等价于a=sym('a', [4 3]),符号全部存储在a当中,需要使用时只需要使用诸如a(1,3)的索引即可。

2. 代换符号

使用符号定义了一个符号函数后,往往需要将符号函数中的一些符号代换成其他符号或者数值类型,这种情况下一般使用 subs 函数。

2.1 代换表达式中的符号

subs 函数的一般形式如下

subs(S, old, new)

其参数的含义是在符号表达式 S 中,利用 new 中的符号或数值替换 old 中的符号。 其示例如下

syms a b c x y f = a * x^2 + b * y + c;%原表达式 syms m f1 = subs(f, [x y], [sin(x) log(y)]) %符号替换符号 f2 = subs(f, [a b], [2 3]) %数值替换符号 f3 = subs(f, a, 1: 4) %多数值替换符号

输出如下:

f1 = a*sin(x)^2 + c + b*log(y) f2 = 2*x^2 + c + 3*y f3 = [ x^2 + c + b*y, 2*x^2 + c + b*y, 3*x^2 + c + b*y, 4*x^2 + c + b*y]

2.2 控制替换后的精度

使用数值对表达式进行了替换后,往往需要对精度做一定的控制与保证,这个时候就需要使用vpa 函数了。 控制精度的方法有两种,一是用 digits 函数+ vpa 函数,一种是直接用 vpa 函数。

方式一: digits+vpa digits函数规定了精度的保留位数 ,默认是32位,vpa函数对数值进行计算。如digits(10)代表精度保留为有效数字10位,digits函数使用后必须要配合vpa函数使用。

例 计算 π ∗ e 2 \pi * e^2 π∗e2 的值,保留50位有效数字。

digits(50); %保留50位精度 y = str2sym('pi * exp(2)'); %将字符串转为sym形式 vpa(y)

输出如下:

ans = 23.213404357363387236150345896006882480062932649056

有效数字位数为50位。

方式二: vpa vpa 函数有还有一种格式如下

vpa(E, D)

其中 E 为传入的要计算的值, D 为要保留的精度。

例 计算 f ( x ) = c o s 1 + s i n 1 f(x) = cos1+sin1 f(x)=cos1+sin1 的值,保留50位有效数字。

syms x f(x) = cos(x) + sin(x); y = vpa(f(1), 50)

上述代码计算 f ( 1 ) f(1) f(1) 的值,设定精度为50,结果为

y = 1.3817732906760362240534389290732756033548734814163

3. 其他函数 3.1 因式分解

符号表达式中使用 factor函数对符号表达式进行因式分解,调用格式如下

factor(E)

其中 E 为符号表达式.

例 化简 f = x 3 + x 2 − x − 1 f=x^3+x^2 - x - 1 f=x3+x2−x−1

syms x f = x^3 + x^2 - x - 1; f1 = factor(f)

输出为

f1 = [ x - 1, x + 1, x + 1]

3.2 展开表达式

使用 expand函数对符号表达式进行展开,调用格式如下

expand(E)

其中 E 为符号表达式.

例 展开函数 f = ( x + y ) 4 f=(x + y)^4 f=(x+y)4

syms x y f= (x + y)^4; f1 = expand(f)

输出为

f1 = x^4 + 4*x^3*y + 6*x^2*y^2 + 4*x*y^3 + y^4

3.3 合并同类项

使用 collect函数对符号表达式进行展开,其调用格式有两种

collect(E)

将符号表达式 E 中各sym变量前的系数进行合并。

collect(E, v)

将符号表达式 E 中的 v 的同幂项系数进行合并。

例 将函数 f = − a x e − c x + b e − c x f=-axe^{-cx} + be^{-cx} f=−axe−cx+be−cx的同类项进行合并。 注意,该题下如果不指定合并的项数,那么其将不会进行合并,因为没有除了数值外相同的sym 项,比如下面的代码

syms a b c x f = -a * x * exp(-c * x) + b * exp(-c * x) f1 = collect(f)

输出为

f1 = (-a*exp(-c*x))*x + b*exp(-c*x)

不能说没有变化,只能说变了不如没变。

该题要想合并必须指定合并的项,

syms a b c x f = -a * x * exp(-c * x) + b * exp(-c * x) f1 = collect(f,exp(-c*x))

输出为

f1 = (b - a*x)*exp(-c*x)

3.4 化简

使用 simplify函数对符号表达式进行化简,调用格式如下

simplify(E)

其中 E 为符号表达式.

例 化简函数 e 1 = c o s 2 x + s i n 2 x e_1= cos^2x + sin^2x e1​=cos2x+sin2x 和 e 2 = e c ∗ l n ( a + b ) e_2= e^{c * ln(a + b)} e2​=ec∗ln(a+b)

syms x a b c; e10 = sin(x)^2 + cos(x) ^2; e1 = simplify(e10); e20 = exp(c * log(a+ b)); e2 = simplify(e20);

输出为

e1 = 1 e2 = (a + b)^c

除此之外,也可用simple 函数进行化简,simple会对符号表达式进行不同的尝试,并返回长度最短的形式。其调用格式如下:

[R,HOW] = simple(E)

其中 E 为符号表达式, R为化简结果,HOW为化简方法。

3.5 通分

使用 numden函数对符号表达式进行通分,调用格式如下

[N,D] = numden(E)

其中 E 为符号表达式, N为通分后的分子,D为通分后的分母。

例 对函数 f = x k y + y p x f = \frac{x}{ky} + \frac{y}{px} f=kyx​+pxy​ 进行通分。

syms k p x y f = x / ( k * y) + y / ( p * x); [n, d] = numden(f); f1 = n / d;

输出为

f1 = (p*x^2 + k*y^2)/(k*p*x*y)

3.6 嵌套分解

使用 horner函数对符号表达式进行嵌套类型的分解,调用格式如下

horner(E)

其中 E 为符号表达式。

例 将 f = − a x 4 + b x 3 − c x 2 + x + d f = -ax^4+bx^3-cx^2+x+d f=−ax4+bx3−cx2+x+d 转为嵌套形式的表达式。

syms a b c d x f = -a * x^4 + b * x^3 - c * x^2 + x + d; f1 = horner(f)

输出为

f1 = d - x*(x*(c - x*(b - a*x)) - 1)

3.7 求反函数

使用 finverse函数对符号表达式进行嵌套类型的分解,调用格式如下

g = finverse(E, v)

其中 E 为符号表达式, v 为指定的自变量,单变量为 x 时 v 可以省略。

例 求函数 f = a x + b f = ax+b f=ax+b 的反函数。

syms x y a b y = a * x + b; g = finverse(y)

输出为

g = -(b - x)/a

3.8 复合函数

使用 compose函数对两个符号表达式进行复合求解,调用格式如下

compose(f, g)

当 f = f ( x ) f = f(x) f=f(x)以及 g = g ( y ) g = g(y) g=g(y)时,返回复合函数 f ( g ( y ) ) f(g(y)) f(g(y)) 。

compose(f, g, z)

当 f = f ( x ) f = f(x) f=f(x)以及 g = g ( y ) g = g(y) g=g(y)时,返回复合函数 f ( g ( z ) ) f(g(z)) f(g(z)) 。

compose(f, g, t, u ,z)

当 f = f ( t ) f = f(t) f=f(t)以及 g = g ( u ) g = g(u) g=g(u)时,返回复合函数 f ( g ( z ) ) f(g(z)) f(g(z)) 。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有