MATLAB中的符号运算
Matlab+符号运算

>> k1=polyder([2,-1,0,3]); >> k2=polyder([2,-1,0,3],[2,1]); >> [k2,d]=polyder([2,-1,0,3],[2,1]);
多项式的值
计算多项式在给定点的值
代数多项式求值
y = polyval(p,x): 计算多项式 p 在 x 点的值
p( x) ( x x1 )(x x2 )( x xn )
多项式运算小结
poly2sym(p,’x’) k = conv(p,q) [k,r] = deconv(p,q) k = polyder(p) [k,d] = polyder(p,q) [k,d] = polyder(p,q) y = polyval(p,x) Y = polyvalm(p,X) x = roots(p)
例如:A = sym('[a , 2*b ; 3*a , 0]') A= [ a, 2*b] [3*a, 0] 这就完成了一个符号矩阵的创建。 注意:符号矩阵的每一行的两端都有方 括号,这是与 matlab数值矩阵的 一个重要区别。
符号对象的建立
符号对象的建立:sym 和 syms
syms 命令用来建立多个符号变量,一般调用格式
f (v)
v a
b
symsum(f,a,b): 关于默认变量求和
1 例:计算级数 S 2 及其前100项的部分和 n 1 n >> syms n; f=1/n^2; >> S=symsum(f,n,1,inf) >> S100=symsum(f,n,1,100) x 例:计算函数级数 S 2 n 1 n
MATLAB2 - 符号运算

二、符号表达式的代数运算
符号运算与数值运算的区别主要有以下几点: 1. 传统的数值型运算因为要受到计算机所保留的有效位数的 限制,它的内部表示法总是采用计算机硬件提供的 8位浮 点表示法,因此每一次运算都会有一定的截断误差,重复 的多次数值运算就可能会造成很大的累积误差。符号运算 不需要进行数值运算,不会出现截断误差,因此符号运算 是非常准确的。 2. 符号运算可以得出完全的封闭解或任意精度的数值解。
三、 符号表达式的操作和转换
符号表达式中自由变量的确定
1. 自由变量的确定原则 MATLAB将基于以下原则选择一个自由变量:
(1) 小写字母i和j不能作为自由变量。 (2) 符号表达式中如果有多个字符变量,则按照以下顺序 选择自由变量:首先选择x作为自由变量;如果没有x,则 选择在字母顺序中最接近x的字符变量;如果与x相同距离, 则在x后面的优先。 (3) 大写字母比所有的小写字母都靠后。
符号矩阵
用sym和syms命令也可以创建符号矩阵。
例如,使用syms命令创建相同的符号矩阵:
syms a b c d A=[a b; c d] A =[ a, b] [ c, d] 例3 比较符号矩阵与字符串矩阵的不同。 A=sym('[a,b; c,d]') %创建符号矩阵 A =[ a, b] [ c, d] B='[a,b;c,d]' %创建字符串矩阵 B =[a,b; c,d] A*2 v.s. B*2
例9 三种形式的符号表达式的表示。
符号表达式的化简
同一个数学函数的符号表达式的可以表示成三种形式,例 如以下的f(x)就可以分别表示为:
(1) 多项式形式的表达方式:f(x)=x3-6x2+11x-6 (2) 因式形式的表达方式:f(x)=(x-1)(x-2)(x-3) (3) 嵌套形式的表达方式:f(x)=x(x(x-6)+11)-6
第3讲matlab的符号运算

第三讲 MATLAB 的符号运算(注:文中红色字体为命令执行的结果,在Command 窗口中显示)3-1 符号对象的创建和使用1.符号运算入门符号运算的特点是,运算过程中允许存在非数值的符号变量。
先看如下示例: 函数2)(sin )(x x f =,用MATLAB 求它的微积分,命令如下:f=’sin(x)^2’; %定义符号函数f(x)dfdx=diff(f) %求dxx df )(的指令 intf=int(f) %求⎰dx x f )(的指令显示的计算结果为:dfdx=2*sin(x)*cos(x)intf=-1/2sin(x)*cos(x)+1/2*x 所以,x x dx x df cos sin )(2=,x x x dx x f cos sin )(2121-=⎰。
此例中,首先定义符号函数f=’sin(x)^2’,然后由符号运算获得2)(sin )(x x f =的微分和积分。
2.定义符号变量在使用符号变量之前,应先声明某些要用到的变量是“符号”变量。
声明符号变量的语句:syms 变量名列表或: sym(‘变量名’)其中各个变量名应该用空格分隔,而不能用逗号分隔。
如创建符号变量x 和a :x=sym(‘x ’)a=sym(‘alpha ’)或用: syms x a %定义符号变量x 和a这里,变量x 和a 的类型是符号对象,它们被定义后,即可参与符号运算。
3.定义符号表达式和符号方程符号表达式和符号方程是两种不同的操作对象。
区别在于:符号表达式不包含等号(=),而符号方程须带等号。
它们的创建方式相同。
如:要考虑二次函数f=ax^2+bx+c ,可以创建符号表达式,赋值给符号变量f 。
f=sym(‘a*x^2+b*x+c ’)或:f=‘a*x^2+b*x+c’此例中,将符号表达式赋给符号变量f,但这不是必需的,引入符号变量是为了以后调用方便。
在这种情况下,没有创建对应于表达式中a、b、c、x项的变量,为了执行符号数学运算(如微分、积分等),必须显式地创建这些变量,可用下列命令创建:syms a b c x如下例中创建了符号表达式和符号方程,分别赋给相应的符号对象。
matlab符号运算符

matlab符号运算符Matlab符号运算符的使⽤⼀、&&/||/&/||:数组逻辑或||:先决逻辑或&:数组逻辑与&&:先决逻辑与&&和||被称为&和|的short circuit形式。
先决逻辑符号含义:先判断左边是否为真;若为真,则不再判断右边;若为假,才继续进⾏或运算先判断左边是否为假;若为假,则不再判断右边;若为真,才继续进⾏与运算两种运算符号的区别:先决逻辑运算的运算对象只能是标量数组逻辑运算可为任何维数组,运算符两边维数要相同举例分析:A&B :⾸先判断A的逻辑值,然后判断B的值,然后进⾏逻辑与的计算。
A&&B:⾸先判断A的逻辑值,如果A的值为假,就可以判断整个表达式的值为假,就可以判断整个表达式的值为假,就不需要再判断B的值。
这种⽤法⾮常有⽤,如果A是⼀个计算量较⼩的函数,B是⼀个计算量较⼤的函数,那么⾸先判断A对减少计算量是有好处的。
另外这也可以防⽌类似被0除的错误。
Matlab中的if和while语句中的逻辑与和逻辑或都是默认使⽤short-circuit形式。
// 这可能就是有时候⽤&和| 会报错的原因。
⼆、系统结构体内的变量⼀般都是⼩写。
matlab区分⼤⼩写。
三、==表⽰逻辑相等,返回结果,相等为1,不等为0。
四、.*(times)点乘timesArray multiply 数组乘Syntaxc = a.*bc = times(a,b)Descriptionc = a.*b multiplies arrays a and b element-by-element and returns the result in c. Inputs a and b must have the same size unless one is a scalar.注释:a、b要同尺⼨,或其中⼀个为标量。
matlab中的数学符号与运算

matlab中的数学符号与运算MATLAB(Matrix Laboratory)是一种用于数值计算和科学工程应用的高级编程语言和环境。
MATLAB中包含了丰富的数学符号和运算,用于进行矩阵操作、线性代数、微积分等数学计算。
以下是MATLAB中一些常见的数学符号和运算:1. 数学符号:-矩阵:MATLAB 中的基本数据类型是矩阵,可以使用方括号`[]` 来表示。
例如,`A = [1, 2; 3, 4]` 表示一个2x2的矩阵。
-向量:向量可以表示为一维矩阵,例如,`v = [1, 2, 3]` 表示一个包含3个元素的行向量。
-转置:使用单引号`'` 来进行转置操作。
例如,`A'` 表示矩阵A的转置。
-点乘和叉乘:点乘使用`.*`,叉乘使用`.*`。
例如,`A .* B` 表示矩阵A和B的对应元素相乘,`A * B` 表示矩阵A和B的矩阵乘法。
2. 数学运算:-基本算术运算:MATLAB支持基本的算术运算,如加法、减法、乘法和除法。
例如,`result = 2 + 3`。
-元素-wise 运算:MATLAB 支持元素-wise 的运算,即对矩阵或向量中的每个元素进行运算。
例如,`C = A .* B` 表示矩阵A和B的对应元素相乘。
-矩阵操作:MATLAB 提供了许多用于矩阵操作的函数,如`inv`(求逆矩阵)、`det`(求行列式)、`eig`(求特征值)等。
-积分和微分:MATLAB 提供了`int`(积分)和`diff`(微分)等函数,用于进行积分和微分运算。
-方程求解:MATLAB 提供了`solve` 函数,用于求解方程组。
这些是MATLAB中一些常见的数学符号和运算。
MATLAB 的强大之处在于它的矩阵操作能力,使得它非常适用于数学和工程领域的计算和建模。
如果你有特定的数学运算需求,可以查阅MATLAB 的官方文档或在线资源以获取详细信息。
MATLAB的符号运算V精简版

ans=[2+y,4+y,6+y]
>> subs(f,x,[1:3]) >> subs(f,{x,y},{[1:3],[5:7]})
ans=[7 10 13]
>> subs(f,{x,y},{a+b,a-b}) >> subs(f,{x,y},{x+y,x-y})
Copyright © CUGB
2024/4/3
Matlab的符号运算
符号对象建立时可以附加属性: real、positive 和 unreal
>> x=sym('x','real') >> k=sym('k','positive') >> x=sym('x','unreal')
表明 x 是实的 表明 k 是正的 去掉 x 的附加属性
Copyright © CUGB 2024/4/3
Matlab的符号运算
符号表达式的建立
>> syms x >> f1=sin(x)+cos(x)
推荐!
>> f2=sym(’sin(x)+cos(x)’)
Copyright © CUGB 2024/4/3
Matlab的符号运算
相关函数
➢ findsym: 查找符号表达式中的符号变量
findsym(f) 按字母顺序列出符号表达式 f 中的所有自由变量 findsym(f,N) 列出 f 中距离 x 最近的 N 个自由变量(i,j 除外)
Matlab的符号运算
其它运算
MATLAB符号运算

MATLAB符号运算前⾔有时候,你可能会遇到较复杂的⽅程(组),希望⽤MATLAB来求解。
MATLAB的符号运算正好可⽤于求解⽅程(组)。
此外,它还有许多其他功能。
例如,展开和简化、因式分解以及微积分运算等。
MATLAB的符号运算虽然是数值运算的补充,但是它仍然是科学计算研究中不可替代的重要内容。
与数值运算相⽐,符号运算不需要预先对变量赋值,其运算结果以标准的符号形式表达。
⽐如说计算sin(π),数值运算的结果是1.2246e-16,符号运算的结果是0。
前者是近似的,后者是精确的。
正⽂MATLAB符号运算功能⾮常强⼤,本⽂只介绍⼤部分常⽤的符号运算功能。
注:本⽂代码的运⾏环境是MATLAB R2016b。
1. 创建符号数、符号变量和符号矩阵这⼀步骤是符号运算的第⼀步,后⾯的步骤都是在此基础上进⾏的。
%创建符号数 (只能⽤sym函数)s0 = 1 / sym(7) %符号数,不适合⼤型符号数s1 = sym('1/7') %符号数s2 = sym('3 + 4i') %符号复数%创建符号变量 (sym函数和syms函数都⾏)%--sym函数s3 = sym('x') %符号变量%--syms函数syms a b c %创建多个符号变量,值为本⾝syms(sym('[d e; e d]')) %⽤已存在的符号变量矩阵创建多个符号变量%创建符号矩阵 (sym函数和syms函数都⾏)s4 = sym('[2 5 6; 9 8 6]') %符号数矩阵s5 = sym('x', [2 3]) %符号变量矩阵,矩阵内的元素不会被创建为符号变量A = [a b c; c b a] %⽤已存在的符号变量创建符号变量矩阵% syms A B [2 3] %仅2017及以上版本⽀持,同时创建多个符号矩阵代码运⾏结果如下。
可以看到s5是⼀个2x3的符号变量矩阵,但矩阵内元素不会被创建成符号变量。
第3章 MATLAB的符号运算_微分方程求解_符号代数方程

或syms a b c x
f='a*x^2+b*2+c'
9/46
数组、矩阵与符号矩阵(P51)
m1=sym('[ab bc cd ; de ef fg ; h l j]') m2=sym('[1 12;23 34]') 例:
– >>A=hilb(3) A= 1.0000 0.5000 0.3333 0.5000 0.3333 0.2500 0.3333 0.2500 0.2000
dx dx2
例6:已知函数
f
= x2 sin 2 y 求
df
df ,
d2 f ,
dx dy dxdy
例7:已知函数
f
=
xe y y2
求
ff ,
xy
见example3_12
23/46
df
例8:已知导函数
= ax 求原函数
dx
b
例9:已知导函数 f (x) = x2 求 f (x)dx a
例10:计算重积分I = 2 d a r2 sin dr ?
– 例:>>rho=1+sqrt(5)/2; >>sym(rho,’d’); ans= 2.1180339887498949025257388711907
11/46
符号对象转换为数值对象的函数double(), vpa() 1、double()
这种格式的功能是将符号常量转换为双精度数值 2、vpa()
创建符号对象与函数命令(P50)
1、函数命令sym()格式 格式1 s=sym(a)(a代表一个数字值、数值矩阵、数值表达式 格式2 s=sym(‘a’)(a代表一个字符串)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
g= ' 3/2*x^2+2/3*x-3/5 ' % rationalize and extract the parts g= 3/2*x^2+2/3*x-3/5 [n,d]=numden(g) n= 45*x^2+20*x-18 d= 30 h= ' (x^2+3)/(2*x-1)+3*x/(x-1) ' % the sum of rational polynomials h= (x^2+3)/(2*x-1)+3*x/(x-1) [n,d]=numden(h) % rationalize and extract n= x^3+5*x^2-3 d= (2*x-1)*(x-1)
symvar( ' sin(omega) ' ) % ' omega ' is not a singlee character。 ans= x
symvar( ' 3*i+4*j ' ) % i and j are equel to sqrt(-1) ans= x symvar( ' y+3*s ' , ' t ' ) ans= s % find the variable closest to t rather than x
ans=
x^n*log(x)
diff( ' sin(omega) ' )
% differentiate using the default variables (x)
ans= 0 diff( ' sin(omega) ' , ' omega ' )
% specify the independent variable
符号变量
当字符表达式中含有多于一个的变量时,只有一个变
量是独立变量。如果不告诉MATLAB哪一个变量是独
立变量,MATLAB将基于以下规则选择一个: 在符号表达式中缺省的独立变量是唯一的,除去i和j 的小写字母,不是单词的一部分。如果没有这种字 母,就选择x作为独立变量。如字符不是唯一的,就 选择在字母顺序中最接近x的字母。如果有相连的字 母,就选择在字母表中较后的那一个。
MATLAB符号函数可用多种方法来操作这些表达式 diff( ' cos(x) ' ) ans= -sin(x) % differentiate cos(x) with respect to x M=sym( ' [a,b;c,d] ' ) M= [a,b] [c,d] % create a symbolic matrix M determ(M) ans= a*d-b*c % find the determinant of the symbolic matrix
缺省的独立变量,有时称作自由变量,在表
达式 ' 1/(5+cos(x)) ' 中是 ' x ' ;在 ' 3*y+z '
中是 ' y ' ;在 ' a+sin(t) ' 是 ' t ' 。在表式 '
sin(pi/4)-cos(3/5) ' 中自由符号变量是 ' x ' ,
因为此式是一个符号常数无符号变量。可利
MATLAB中的符号运算
2004.8.4
MATLAB所具有的符号数学工具箱与其 它所有工具不同,它适用于广泛的用 途,而不是针对一些特殊专业或专业 分支。另外,MATLAB符号数学工具 箱与其它的工具箱区别还因为它使用 字符串来进行符号分析,而不是基于
数组的数值分析。
符号数学工具箱是操作和解决符号表达式的
ans= cos(omega)
符号表达式运算
一旦创建了一个符号表达式,或许想以某些方式改变它; 也许希望提取表达式的一部分,合并两个表达式或求得表
达的数值。有许多符号工具可以帮助完成这些任务。
所有符号函数(很少特殊例外的情况)作用到符号表达式和 符号数组,并返回符号表达式或数组。其结果有时可能看 起来象一个数字,但事实上它是一个内部用字符串表示的 一个符号表达式。可以运用MATLAB函数isstr来找出像似 数字的表达式是否真是一个整数或是一个字符串。
1 2x n
1 y 2x
MATLAB表达式
' 1/(2*x^n) ' y= ' 1/sqrt(2*x) ' ' cos(x^2)-sin(2*x) ' M=sym( ' [a,b;c,d] ' )
cos( x 2 ) sin(2 x)
a b M c d
a
b
x3 dx f=int( ' x^3/sqrt(1-x) ' , ' a ' , ' b ' ) 1 x
上面的第一个例子的符号表达式是用单引号 以隐含方式定义的。它告诉MATLAB ' cos(x) ' 是一个字符串并说明diff( ' cosx ' )是一个符 号表达式而不是数字表达式;而在第二个例 子中,用函数sym显式地告诉MATLAB M=sym( ' [a,b;c,d] ' )是一符号表达式。 在MATLAB可以自己确定变量类型的场合下, 通常不要求显式函数sym。
如果利用规则symvar不能找到一个缺省独立变量, 它便假定无独立变量并返回x。这一结论对含有由 多个字母组成的变量,如:alpha或s2的表达式,
或不含变量的符号常数均成立。如果需要,绝大多
数命令都使用用户选项以指定独立变量。
diff( ' x^n ' ) % differentiate with respect to the default variable ' x ans= x^n*n/x diff( ' x^n ' , ' n ' ) % differentiate x^n with respect to ' n '
变换函数
函数sym可获取一个数字参量并将其转换为符号表达式。 函数numneric的功能正好相反,它把一个符号常数(无 变量符号表达式)变换为一个数值。 phi=' (1+sqrt(5))/2 ' % the ' golden ' ratio
phi= (1+sqrt(5))/2 % convert to a numeric value
符号数学工具箱(函数)集合,有复合、简化、
微分、积分以及求解代数方程和微分方程的
工具。另外还有一些用于线性代数的工具, 求解逆、行列式、正则型式的精确结果,找 出符号矩阵的特征值而无由数值计算引入的 误差。工具箱还支持可变精度运算,即支持 符号计算并能以指定的精度返回结果。
符号数学工具箱中的工具是建立在功 能强大的Maple之上。它最初是由加拿大的 滑铁卢(Waterloo)大学开发的。当要求 MATLAB进行符号运算时,它就请求Maple 去计算并将结果返回到MATLAB命令窗口。 因此,在MATLAB中的符号运算是MATLAB 处理数字的自然扩展。
提取分子和分母
如果表达式是一个有理分式(两个多项式之比), 或是可以展开为有理分式(包括哪些分母为1的 分式),可利用numden来提取分子或分母。例 如,给定如下的表达式:
m x2 f ax b x
2
g
3 2 2 3 x x 2 3 5
h
x 3 3x 2x 1 x 1
numeric(phi) ans= 1.6180
符号函数sym2poly将符号多项式变换成它的MATLAB等价系 数向量。函数poly2syrn功能正好相反,并让用户指定用于 所得结果表达式中的变量。
f=' 2*x^2+x^3-3*x+5 ' % f is the symbolic polynomials f= 2*x^2+x^3-3*x+5 n=sym2poly(f) % extract eht numeric coefficient vector n= 1 2 -3 5 poly2sym(n) % recreate the polynomials in x (the default) ans= 2*x^2+x^3-3*x+5 poly2sym(n,' s ') % recreate the polynomials in s ans= s^3+2*s^2-3*s+5
subs(f,' alpha ',' a ') % substitute ' alpha ' for ' a ' in f ans= alpha*x^2+b*x+c g=' 3*x^2+5*x-4 ' g= 3*x^2+5*x-4 % create another function
h=subs(g,' 2 ',' x ') % substitute ' 2 ' for ' x ' in g h=18 isstr(h) % show that the result is a symbolic expression ans= 1
2
3 k2 4 2 x
2 x 1 3 3x 4
在必要时,numden将表达式合并、有理化并返回所得的分 子和分母。进行这项运算的MATLAB语句是:
m= ' x^2 ' % create a simple expression m= x^2 [n,d]=numden(m) % extract the numerator and denominator n= x^2 d= 1 f= ' a*x^2/(b-x) ' % create a rational expression f= a*x^2/(b-x) [n,d]=numden(f) % extract the numerator and denominator n= a*x^2 d= b-x