MATLAB 符号运算
Matlab符号计算

s=log(2*x/y);
simplify(s)
ans =
log(2)+log(x/y)
s=(-a^2+1)/(1-a)
simplify(s)
ans =
a+1
函数simple试用几种不同的化简工具,然后选择在结果中含有最少字符的那种形式。如下例:
syms x y;
syms x y;
V=3*x^2-5*y+2*x*y+6
V =
3*x^2-5*y+2*x*y+6
二.基本的符号运算
1.四则运算:
符号表达式的加减乘除可以分别利用函数symadd、symsub、symmul、symdiv来实现,幂运算可以由sympow来实现。
例:
f=‘2*x^2+3*x-5’ %定义符号表达式
④limit(f,x,a,’right’),求极限,’right’表示变量x从右边趋近于a。
⑤limit(f,x,a,’left’),求极限,’left’表示变量x从左边趋近于a。
例:求下列极限
syms a m x;
f=(x^(1/m)-a^(1/m))/(x-a);
g=‘x^2-x+7’
U=symadd(f,g) %求f+g
V=symsub(f,g) %求f-g
W=symmul(f,g) %求f*g
X=symdiv(f,g) %求f/g
Y=sympow(f,’3*x’) %求f^(3x)
另外,与数值运算一样,也可以用+ - * / ^运算符来实现符号运算。如:
①limit(f,x,a)求符号函数f(x)的极限。当x趋向于a时,f(x)的极限值。
matlab符号运算(二)

因式分解、展开、合并、简化及通分等
计算极限 limit(f,x,a): 计算 lim f ( x )
xa
limit(f,a): 计算默认自变量趋向于a时f的极限 limit(f): 计算 a=0 时的极限 limit(f,x,a,’right’):右极限 limit(f,x,a,’left’):左极限
1 2 n 1 n
,以及其前10项的部分和。
>> syms n >> S=symsum(1/n^2,n,1,inf) >> S10=symsum(1/n^2,n,1,10)
x 2 n 1 n
S=1/6*pi^2 S10=1968329/1270080
例:求函数级数
S
>> syms n x >> S=symsum(x/n^2,n,1,inf)
符号矩阵中元素的引用和修改
>> A=sym(’[1+x, sin(x); 5, exp(x)]’) >> A(1,2) >> A(2,2)=sym(’cos(x)’)
Matlab 符号运算(二)
符号矩阵的基本运算
符号矩阵的基本运算与数值矩阵的基本运算相类似。
1) 基本运算符:+、-、*、\、/、
ans=10
ans=2*x+y
ans=10 ans=[2+y,4+y,6+y] ans=[7 10 13]
ans=3*a+b
?
Matlab 符号运算(二)
符号矩阵
使用sym函数直接生成
>> A=sym(’[1+x, sin(ห้องสมุดไป่ตู้); 5, exp(x)]’)
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
matlab符号运算函数大全

3.1 算术符号操作命令+、-、*、.*、\、.\、/、./、^、.^、’、.’功能符号矩阵的算术操作用法如下:A+B、A-B 符号阵列的加法与减法。
若A与B为同型阵列时,A+B、A-B分别对对应分量进行加减;若A与B中至少有一个为标量,则把标量扩大为与另外一个同型的阵列,再按对应的分量进行加减。
A*B 符号矩阵乘法。
A*B为线性代数中定义的矩阵乘法。
按乘法定义要求必须有矩阵A的列数等于矩阵B的行数。
即:若A n*k*B k*m=(a ij)n*k.*(b ij)k*m=C n*m=(c ij)n*m,则,i=1,2,…,n;j=1,2,…,m。
或者至少有一个为标量时,方可进行乘法操作,否则将返回一出错信息。
A.*B 符号数组的乘法。
A.*B为按参量A与B对应的分量进行相乘。
A与B必须为同型阵列,或至少有一个为标量。
即:A n*m.*B n*m=(a ij)n*m.*(b ij)n*m=C n*m=(c ij)n*m,则c ij= a ij* b ij,i=1,2,…,n;j=1,2,…,m。
A\B 矩阵的左除法。
X=A\B为符号线性方程组A*X=B的解。
我们指出的是,A\B近似地等于inv(A)*B。
若X不存在或者不唯一,则产生一警告信息。
矩阵A可以是矩形矩阵(即非正方形矩阵),但此时要求方程组必须是相容的。
A.\B 数组的左除法。
A.\B为按对应的分量进行相除。
若A与B为同型阵列时,A n*m.\B n*m=(a ij)n*m.\(b ij)n*m=C n*m=(c ij)n*m,则c ij= a ij\ b ij,i=1,2,…,n;j=1,2,…,m。
若若A与B中至少有一个为标量,则把标量扩大为与另外一个同型的阵列,再按对应的分量进行操作。
A/B 矩阵的右除法。
X=B/A为符号线性方程组X*A=B的解。
我们指出的是,B/A粗略地等于B*inv(A)。
若X不存在或者不唯一,则产生一警告信息。
第2章 matlab的符号运算

>>p0 = sym(‘(1+sqrt(5))/2’)
p0 = (1+sqrt(5))/2 >>pr = sym((1+sqrt(5))/2,'r') pr =7286977268806824*2^(-52) >>e32r = vpa(abs(p0-pr),16) e32r = 0
%广义有理表示
Matlab程序设计
Matlab程序设计
2.2 符号数字 sc = sym(‘Num’) %符号常数sc的值精确等于Num 例:a = pi + sqrt(5) %a为数值类常量 sa = sym(‘pi + sqrt(5)’) %sa为符号数字常量
% sa = pi + sqrt(5), sym型; eval(sa) 为5.3777, double型
k = sym('k','positive');
Matlab程序设计
2.4 符号变量
符号变量与符号参数的创建方法相同,但表达式或 方程中作用不同. 确定自由符号变量: findsym(EXPR , N) %确认EXPR中距离x最近的N个自由符号变
量, 略去N表示全部
例2.1-1 用符号计算研究方程uz2+vz+w=0的解 syms u v w z Eq=u*z^2+v*z+w; %符号方程 r_1=solve(Eq) %一个方程只能解一个未知数w(离x最近) findsym(Eq,1) %只找一个自由符号变量,则找到w r_2=solve(Eq,z)
3.3 符号表达式的操作 例:化简 S=(x2+y2)2+(x2-y2)2 syms x y; S=(x^2+y^2)^2+(x^2-y^2)^2 simple(S) %系统自动试探各种函数化简 simple(ans) %使用多次找到最少字母的简化式 例2.2-3:对符号矩阵进行特征向量分解. syms a b c d W [V,D]=eig([a b;c d]) [RVD,W]=subexpr([V;D],W)
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的符号变量矩阵,但矩阵内元素不会被创建成符号变量。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1、MATLAB程序设计M文件:M文件是一种以m为扩展名的33文件,将MA TLAB命令流写入一个文本文件中,在MATLAB命令窗口中输入文件名可运行文件中的命令流。
此文件必须以m为扩展名,MATLAB系统才能识别。
MATLAB文件搜索路径为:安装目录下的work目录。
通过File|set path…菜单可以增加工作目录。
1.1 M函数(1)M函数的格式:Function 返回变量列表=函数名(输入变量列表)注释函数体语句End【例1.1.1】:打开Medit窗口,编写如下程序:function n=fibfun(m)%FIBFUN for calculating Fibonacci numbers%Incidengtally, the name Fibonacci comes from%Filius Bonassi, or”son of Bonassus”%fibfun.mif m>10n=fibfun (m-1) + fibfun (m-2);elsen=10;end编写完后以fibfun.m文件名存盘然后在MATLAB主命令窗口中执行如下程序:>> fibfun (15)ans =130>> fibfun (8)ans =10文件保存名称必须与函数名相同,这样才能保证调用成功。
m文件与m函数的主要区别在于m函数中定义的变量在函数调用完成后会清除,为局部变量,而m文件中定义的变量在MA TLAB运行期内始终存在。
一般以m文件作为主程序,在主程序中将一些功能模块以m函数的形式进行调用。
【例1.1.2】:M函数文件Function [y1 y2]=proab(a,b)Y1=a^3;Y2=b^3;End文件保存为proab.mM文件a=2;b=3;[y1 y2]=proab(a,b)文件保存为test.m,proab.m及test.m都保存在work目录中。
(2)变量:区分大小写,不需要指定类型,不需要事先声明,变量长度不能超过31位,第31个字符之后的字符将被忽略。
(3)常量:MA TLAB有一些预定我的变量,这些特殊的变量称为常量。
%以后的内容起到注释的作用,对最终结果不产生任何影响(应该养注释的好习惯,方便自己和别人调用)。
;结尾不显示结果1.2向量生成(1)利用冒号表达式x=start:step:endStart表示向量的首元素数值,end表示向量尾元素的数值限,step表示从第二个元素开始,元素数值大小与前一个元素值大小的差值。
苦step=1,可以省略,直接写成X=start:end。
【例1.1.3】:>> a=1:5:30a =1 6 11 16 21 26>> a=1:6a =1 2 3 4 5 6(2)Linspace函数,用来生成线性等分向量,其调用格式如下:·y=linspace (x1,x2)生成100维的行向量,使得y(1)=x1 ,y(100)=x2 ;·y= linspace (x1,x2,n)生成n维的行向量,使得y(1)=x1 ,y(n)=x2。
【例1.1.4】:>> a=linspace (1,50,6)a =1.0000 10.8000 20.6000 30.4000 40.2000 50.0000(3)Logspace函数,对数等分功能函数,其调用格式如下:·y=logspace (x1,x2) 生成50维对数等分向量,使得y (1)= 110x ,y (50)= 210x ; ·y= logspace (x1,x2,n ) 生成n 维对数等分向量,使得y (1)= 110x ,y (n )=210x 。
【例1.1.5】:>> a=logspace (1,4,5)a =1.0e+004 *0.0010 0.0056 0.0316 0.1778 1.0000(4)点积dot(a,b) ,当a 和b 都为列向量时,等价于a ’*b 。
返回向量的数量点积。
a 和b 必须同维。
其格式如下:dot (a,b,dim) 返回a 和b 在维数为dim 的点积。
【例1.1.6】:>> a=[1,2,3]' %[1,2,3]'表示a 为列向量,即我们熟悉的 T ]3,2,1[a =123>> b=[4,5,6]'b =456>> dot (a,b)ans =32>> a'*bans =32(5)叉积cross(a,b),表示过两相交向量的交点的垂直于两向量所在平面的向量。
其格式为: c= cross (a,b) 返回向量a 和b 的叉积向量。
即c=a ×b 。
a 和b 必须为三维向量。
【例1.1.7】:>> a=[1,2,3];>> b=[4,5,6];>> c=cross(a,b)c =-3 6 -31.3矩阵输入矩阵时,要以“[]”为标识,元素应在“[]”内部,MA TLAB才会将其识别为矩职。
同行元素之间可用空格或“,”分隔,行与行之间要用“;”或回车符分隔。
(1)零矩阵zeros(m,n),建立一个m*n阶零矩阵。
【例1.1.8】:>> zeros(5,6)ans =0 0 0 0 0 00 0 0 0 0 00 0 0 0 0 00 0 0 0 0 00 0 0 0 0 0(2)单位阵eye(n),建立一个n阶单位阵【例1.1.9】:>> eye(3)ans =1 0 00 1 00 0 1(3)全1阵ones(m,n),建立一个m*n阶全1阵【例1.1.10】:>> ones(3,4)ans =1 1 1 11 1 1 11 1 1 1(4)随机阵rand(m,n),随机建立一个m*n阶矩阵【例1.1.11】:>> rand(3,4)ans =0.8147 0.9134 0.2785 0.96490.9058 0.6324 0.5469 0.15760.1270 0.0975 0.9575 0.9706(5)行列式det(A)(6)求逆inv(A),求A矩阵的逆矩阵【例1.1.12】:>> A=rand(3,3) %随机生成一个矩阵AA =0.9572 0.1419 0.79220.4854 0.4218 0.95950.8003 0.9157 0.6557>> det(A) %求上面生成随机阵的行列式ans =-0.4278>> inv(A) %求上面生成的矩阵A 的逆矩阵ans =1.4075 -1.4784 0.4628-1.0510 0.0148 1.2480-0.2500 1.7836 -0.7827(7)特征值eig,eigs【例1.1.13】:计算下面矩阵的特征值和特片向量。
⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡=451973152A 解:>> A=[2,5,1;3,7,9;1,5,4];>> [x,y]=eig(A) %x 是特征向量矩阵,y 是特征值矩阵x =-0.3852 -0.9555 0.6691-0.8012 0.0433 -0.6236-0.4580 0.2919 0.4044y =13.5875 0 00 1.4680 00 0 -2.0555(8)条件数cond ,比如求特征值的条件数,我们用condeig (A )【例1.1.14】:>> condeig(A) %A 还是例13中的矩阵Aans =1.04221.24421.2211(9)范数norm ,它的调用格式是norm (A ,n ),A 为矩阵(向量),n 可以为1(1范数)、2(2范数)、inf 或fro 。
(10)秩rank ,求矩阵的秩【例1.1.15】:%仍然取例13中的矩阵A>> rank(A)ans =3(11)迹trace ,调用格式为trace (A ),A 为要求迹的矩阵(12)奇异值分解svd ,调用格式为[x ,y ]=svd (A )【例1.1.16】:>> [x,y]=svd(A)x =-0.3277 0.8842 -0.3329-0.8284 -0.4383 -0.3486-0.4542 0.1615 0.8761y =14.1191 0 00 3.2978 00 0 0.8806(13)LU 分解lu ,调用格式为[x ,y ]=lu (A )(14)QR 分解qr ,调用格式为[x ,y ]=qr (A )(15)Chol 分解chol ,调用格式为[x ,y ]=chol (A )1.4多项式运算多项式的表示方法对于多项式()n n n n a x a x a x a x p ++++=--1110...,用以下的行向量表示:],,......,,[110n n a a a a p -=这样可以把多项式问题转化为向量问题。
(1)Polyval 和polyvalm 求值polyval 以数组为单元,polyvalm 以矩阵为单元【例1.1.17】:>> p=[1 4 9 16];>> b=[1 1 1 1];>> polyval(p,b)ans =30 30 30 30(2)Roots 求根,调用格式为roots (P )【例1.1.18】:求解方程01501522=+-x x 的根>> p=[2,-15,150];>> roots(p)ans =3.7500 + 7.8062i3.7500 - 7.8062i(3)多项式的乘除法运算conv,deconv,用向量卷积实现【例1.1.19】:>> p=[2,3,4,5];>> b=[4,6,8,10];>> a=conv(p,b)a =8 24 50 88 92 80 50>> c=deconv(a,b)c =2 3 4 5可以看出C与P是相等的。
(4)Polyder微分,调用格式是polyder(P)【例1.1.20】:还是用上例中的P>> pp =2 3 4 5>> polyder(p)ans =6 6 4(5)Polyfit多项式拟合,调用格式如下:·polyfit(x,y,n)其中x,y为拟合数据,n为拟合多项式的阶数。
·[P,k]=polyfit(x,y,n)其中p为拟合多项式系数向量,k为拟合多项式系数向量的结构信息。