MATLAB符号运算运用
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3.4.2 符号常微分方程
语法: dsolve(‘eq’,’con’,’v’) %求解微分方程 dsolve(‘eq1,eq2…’,’con1,con2…’,’v1,v2…’) %求解微分方程组 说明:’eq’为微分方程;’con’是微分初始条件,可 省;’v’为指定自由变量,省略时则默认为x或t为自由变 量;输出结果为结构数组类型。 dy •当y是因变量时,微分方程’eq’的表述规定为:
• 2. findsym函数
– 如果不确定符号表达式中的自由符号变量,可以用findsym函 数来自动确定。 – 语法: findsym(f,n) %确定自由符号变量 说明:f可以是符号表达式或符号矩阵;n为按顺序得出符 号变量的个数,当n省略时,则不按顺序得出f中所有的符号变量 。
2、符号表达式的化简
2.使用syms命令创建符号变量和符号表达式
——syms用于创建多个符号变量 语法: syms(‘arg1’, ‘arg2’, …,参数) %把字符变量定义为符号变量 syms arg1 arg2 …,参数 %把字符变量定义为符号变量的简洁形式 【例】使用syms命令创建符号变量和符号表达式。 syms a b c x %创建多个符号变量 f2=a*x^2+b*x+c %创建符号表达式 f2 = a*x^2+b*x+c syms('a','b','c','x') f3=a*x^2+b*x+c; %创建符号表达式
3.1.1 创建符号常量
符号常量是不含变量的符号表达式,用sym命令来创建符 号常量。 语法: sym(‘常量’) %创建符号常量 例如: >> a=sym('sin(2)') a= sin(2)
3.1.2 创建符号变量和表达式
1. 使用sym命令创建符号变量和表达式
语法: sym(‘表达式’) %创建符号表达式 符号变量名=sym(‘表达式’) %符号表达式赋 给 符号变量
函数格式 limit(f) limit(f,x,a) limit(f,x,a, ‘left ’) limit(f,x,a, ‘right ’)
limit 函数的用法表 说明 对 x 求趋近于 0 的极限 对 x 求趋近于 a 的极限,当左右极限不相等时极限不 存在。 对 x 求左趋近于 a 的极限 对 x 求右趋近于 a 的极限
合化简,并显示化简过程。
3、符号表达式的替换
• MATLAB 中,可以通过符号替换使表达式的形式简化。符 号工具箱中提供了两个函数用于表达式的替换:1.sube xpr • 该函数自动将表达式中重复出现的比较长的子表达式或字 符串用变量替换,该函数的调用格式为:
– subexpr(s,s1),指定用符号变量 s1 来代替符号表达式s(可以是 矩阵)中重复出现的字符串。替换后的结果由 ans 返回,被替换 的字符串由 s1返回; – [Y,s1] = subexpr(X,‘s1’),该命令与上面的命令不同之处在 于第二个参数为字符串,该命令用来替换表达式中重复出现的字 符串。
第3章 MATLAB的符号运算
符号计算是对未赋值的符号对象(可以是常数、
变量、表达式)进行运算和处理。MATLAB具有
符号数学工具箱(Symbolic Math Toolbox),将符 号运算结合到MATLAB的数值运算环境。符号数 学工具箱是建立在Maple软件基础上的。
3.1 符号表达式的建立
3.3.4 符号级数
1. symsum函数
语法:
symsum(s,x,a,b) %计算表达式s的级数和. 说明:x为自变量,x省略则默认为对自由变量求和;s为符 号表达式;[a,b]为参数x的取值范围。
2. taylor函数
语法: taylor (F,x,n) %求泰勒级数展开 说明:x为自变量,F为符号表达式;对F进行泰勒级数展开 至n项,参数n省略则默认展开前5项。
n y的一阶导数d y 表示为Dy n dx y的n阶导数 表示为Dny
dx
3. 5 符号积分变换
3.5.1 傅里叶(Fourier)变换及其反变换
1. fourier变换 语法: F=fourier(f,t ,w) %求时域函数f(t)的fourier变换F 说明:返回结果F是符号变量w的函数,当参数w省略,默 认返回结果为w的函数;f为t的函数,当参数t省略,默认自 由变量为x。 2. fourier反变换 语法: f=ifourier (F) %求频域函数F的fourier反变换f(t) f=ifourier (F,w,t)
3.4 符号方程的求解
3.4.1 代数方程
语法: solve(‘eq’,’v’) %求方程关于指定变量 的解 solve(‘eq1’, ’eq2’,’v1’,’v2’,…) %求方程组关于指定变量的解 说明:eq可以是含等号的符号表达式的方程,也可以是 不含等号的符号表达式,但所指的仍是令eq=0的方程; 当参数 v 省略时,默认为方程中的自由变量;其输出结 果为结构数组类型。
• 2. subs • 函数 subs 可以用指定符号替换表达式中的某一特定符号 。
– subs(s) – subs(s, new)
4、求反函数和复合函数
语法: finverse(f,v) %对指定自变量v的函数f(v)求反函数 compose(f,g) %计算复合函数f(g(x))
5、 符号表达式与多项式的转换
【例】求矩阵的行列式值、非共轭转置和特征值。
syms a11 a12 a21 a22 A=[a11 a12;a21 a22] %创建符号矩阵 A = [ a11, a12] [ a21, a22] det(A) %计算行列式 ans = a11*a22-a12*a21 A.' %计算非共轭转置 ans = [ a11, a21] [ a12, a22] eig(A) %计算特征值
3.3 符号极限、微积分和级数求和
3.3.1 符号极限
假定符号表达式的极限存在,Symbolic Math Toolbox 提供了直接求表达式极限的函数limit,函数limit的基本用 法如表所示。
表达式
x 0 x a xa xa
lim f(x) lim f(x) lim f(x) lim f(x)
(1) pretty函数 将给出排版形式的输出结果。 (2) collect函数 将表达式中相同次幂的项合并,也可以 再输入一个参数指定以哪个变量的幂次合并。 (3) expand函数 将表达式展开成多项式形式。 (4) horner函数 将表达式转换为嵌套格式。 (5) factor函数 将表达式转换为嵌套格式。 (6) simplify函数 利用函数规则对表达式进行化简。 (7) simple函数 调用MATLAB的其他函数对表达式进行综
【例】符号表达式f=2x2+3x+4与g=5x+6 的代数运算。
f=sym('2*x^2+3*x+4') f = 2*x^2+3*x+4 g=sym('5*x+6') g = 5*x+6 f+g %符号表达式相加 ans = 2*x^2+8*x+10 f*g %符号表达式相乘 ans = (2*x^2+3*x+4)*(5*x+6)
3.2.2 符号表达式的操作和转换
1、符号表达式中自由变量的确定
• 1. 自由变量的确定原则
– 小写字母i和j不能作为自由变量。 – 符号表达式中如果有多个字符变量,则按照以下顺序选择自 由变量:首先选择x作为自由变量;如果没有x,则选择在字 母顺序中最接近x的字符变量;如果与x相同距离,则在x后面 的优先。 – 大写字母比所有的小写字母都靠后。
• 符号运算不需要进行数值运算,不会出现截断误
差,因此符号运算是非常准确的。
•符号运算可以得出完全的封闭解或任意精度的数
值解。
•符号运算的时间较长,而数值型运算速度快。
3.2.1 符号表达式的代数运算
1. 符号运算中的运算符
(1) 基本运算符 运算符“+”,“-”,“*”,“\”,“/”,“^”分别 实现符号矩阵的加、减、乘、左除、右除、求幂运算。 运算符“.*”,“./”,“.\”,“.^”分别实现符号数组的 乘、除、求幂,即数组间元素与元素的运算。 运算符“′”,“.′”分别实现符号矩阵的共轭转置、非共轭 转置。 (2) 关系运算符 在符号对象的比较中,没有“大于”、“大于等于”、 “小于”、“小于等于”的概念,而只有是否“等于”的 概念。 运算符“= =”、“~=”分别对运算符两边的符号对象进行 “相等”、“不等”的比较。当为“真”时,比较结果用1
2. 函数运算
(1) 三角函数和双曲函数 三角函数包括sin、cos、tan;双曲函数包括sinh、cosh、 tanh;三角反函数除了atan2函数仅能用于数值计算外,其 余的asin、acos、atan函数在符号运算中与数值计算的使用 方法相同。 (2) 指数和对数函数 指数函数sqrt、exp的使用方法与数值计算的完全相同;对 数函数在符号计算中只有自然对数log(表示ln),而没有数 值计算中的log2和log10。 (3) 复数函数 复数的共轭conj、求实部real、求虚部imag和求模abs函数与 数值计算中的使用方法相同。但注意,在符号计算中, MATLAB没有提供求相角的命令。 (4) 矩阵代数命令 MATLAB提供的常用矩阵代数命令有diag,triu,tril,inv, det,rank, poly,eig 、expm等,它们的用法几乎与数值 计算中的情况完全一样。
构成多项式的符号表达式f(x)可以与多项式系数构成的 行向量进行相互转换,MATLAB提供了函数sym2poly和 poly2sym实现相互转换。 【例1】将符号表达式2x+3x2+1转换为行向量。 f=sym('2*x+3*x^2+1') f = 2*x+3*x^2+1 sym2poly(f) %转换为按降幂排列的行向量 ans = 3 2 1 【例2】将行向量转换为符号表达式。 g=poly2sym([1 3 2]) %默认x为符号变量的符号表达式 g = x^2+3*x+2
3.1.3 符号矩阵
用sym和syms命令也可以创建符号矩阵。 例如, >>A=sym('[a,b;c,d]') A = [ a, b] [ c, d] >>syms a b c d A=[a b;c d] A = [ a, b] [ c, d]
3.2 符号表达式的代数运算
符号运算与数值运算的区别主要有以下几点:
%计算级数的前10项和
%计算级数和 %计算对k为自变量的级数和
【例】求ex的泰勒展开式
>> syms x >>s1=taylor(exp(x),8) %展开前8项 s1 = 1+x+1/2*x^2+1/6*x^3+1/24*x^4+1/120*x^5+1/ 720*x^6+1/5040*x^7 >>s2=taylor(exp(x)) %默认展开前5项 s2 = 1+x+1/2*x^2+1/6*x^3+1/24*x^4+1/120*x^5
3.3.2 符号微分
函数diff是用来求符号表达式的微分。
语法: diff(f) diff(f,t) diff(f,n) diff(f,t,n) %求f对自由变量的一阶微分 %求f对符号变量t的一阶微分 %求f对自由变量的n阶微分 %求f对符号变量t的n阶微分
3.3.3 符号积分
积分有定积分和不定积分,运用函数int可以求得符号 表达式的积分。 语法: int(f,’t’) %求符号变量t的不定积分 int(f,’t’,a,b) %求符号变量t的积分 int(f,’t’,’m’,’n’) %求符号变量t的积分 说明:t为符号变量,当t省略则为默认自由变量;a和b为数 值,[a,b]为积分区间;m和n为符号对象,[m,n]为积分区间; 与符号微分相比,符号积分复杂得多。因为函数的积分有 时可能不存在,即使存在,也可能限于很多条件, MATLAB无法顺利得出。当MATLAB不能找到积分时,它 将给出警告提示并返回该函数的原表达式。
【例】求级数
1+x+x +…+x +… 的和。 2 3 k
2 2 2
1 2
1
1
k
Fra Baidu bibliotek
1
>>syms x k >>s1=symsum(1/k^2,1,10) s1 = 1968329/1270080 >>s2=symsum(1/k^2,1,inf) s2 = 1/6*pi^2 >>s3=symsum(x^k,'k',0,inf) s3 = -1/(x-1)