matlab第七讲符号计算

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

5 符号矩阵、数组运算(符号和命令可参考数值运算,自学) 1.符号矩阵的四则运算 + - * / \ .* ./ m=sym('[x,x^2;x*2,1/x]') % 定义一个符号矩阵m m= [ x, x^2] [ x*2, 1/x] n=sym('[2*y,y;y,y^2]') % 定义一个符号矩阵n n= [ 2*y, y] [ y, y^2]
符号表达式的微分以四种形式利用函数diff: diff函数用百度文库演算一函数的微分项,相关的函数语法有下列4个: diff(f) 返回f对预设变量(接近x)的一阶导数值
diff(f, 't'),返回f对变量t的一阶导数值
diff(f,n)返回f对预设变量的n阶导数值
diff(f, 't',n) 返回f对独立变量t的n阶导数值 注意:f定义为两种类型——符号表达式。
2.合并符号表达式的同类项(了解) collect(s) 将s中的所有同类项合并 例:将x2+yx-x2-2x合并同类项 matlab命令: syms x y collect(x^2*y+y*x-x^2-2*x) ans = (y-1)*x^2+(y-2)*x %注意:默认的是合并关于变量x的同类项 如果想合并关于变量y的同类项,可以 collect(x^2*y+y*x-x^2-2*x,y) ans = (x^2+x)*y-x^2-2*x
【例】求矩阵 的行列式值、逆和特征根 syms a11 a12 a21 a22; %定义符号变量 A=[a11,a12;a21,a22] % 矩阵A有符号变量构成,所以也是符号变量 A= [ a11, a12] [ a21, a22] DA=det(A), %求A的行列式,DA也是符号变量 DA = a11*a22-a12*a21
IA=inv(A), %求A的逆矩阵,返回值IA也是符号变量 IA = [ a22/(a11*a22-a12*a21), -a12/(a11*a22-a12*a21)] [ -a21/(a11*a22-a12*a21), a11/(a11*a22-a12*a21)] EA=eig(A) %求A的特征值 EA = [ 1/2*a11+1/2*a22+1/2*(a11^22*a11*a22+a22^2+4*a12*a21)^(1/2)] [ 1/2*a11+1/2*a22-1/2*(a11^22*a11*a22+a22^2+4*a12*a21)^(1/2)]
(2).将整个表达式整体定义 matlab命令: f=sym('a*x^2+b*x+c') 接着g的表达式如下:g=f2+4f-2 matlab命令: g=f^2+4*f-2 g= (a*x^2+b*x+c)^2+4*a*x^2+4*b*x+4*c-2
定义一个方程的符号表达式 matlab命令: sym ('sin(x)+cos(x)=1')
7.1.1 sym
1.符号对象是常数的情况 a=sqrt(3) %数值运算 a= 1.7321 b=sqrt(sym(3)) %符号运算,注意sym的用法 b= 3^(1/2)
注意:变量a,b的数据类型
注意到变量b是符号对象,但是它可以和数值运算,返回的 结果也是个符号对象
把符号对象常数b转化为double型 double(b)
7.6 常微分方程的符号解
常微分方程有时很难求解,MATLAB提供了功能强大的工具, 可以帮助求解微分方程。 函数dsovle计算常微分方程的符号解。 MATLAB解常微分方程式的语法是 dsolve(' equation ', ' condition'), 其中equation代表常微分方程表达式 condition则为初始条件。
注意a的数据类型
格式:subs(s,old,new) 含义:s中的符号变量old用数值型变量或表达式new替换 例:把表达式f=x2y+3xy1/2中的x用5代替 matlab命令: syms x y f=x^2*y+3*x*sqrt(y) subs(f,x,5) ans = 25*y+15*y^(1/2) subs(f,y,5) %同样可以把f中的y用5代替 ans = 5*x^2+3*x*5^(1/2)
因为我们要求解微分方程,就需要用一种方法将微分包含在表 达式中。 所以,dsovle句法与大多数其它函数有一些不同 用字母D来表示求微分,D2,D3等等表示重复求微分,并以此 来设定方程。 任何D后所跟的字母为因变量。 例如:1. Dy代表一阶微分项y' 方程y'=1+y2用表达式'Dy=1+y^2'来表示 2. D2y代表二阶微分项 y'' 方程y'' =0用表达式'D2y=0'来表示。
7.1.2 syms
格式:syms空格变量1空格变量2…. 表示把变量1、变量2、…定义为符号变量 例:matlab命令: syms a b c x %定义a,b,c,x为符号变量 f=sym('a*x^2+b*x+c')
f= a*x^2+b*x+c
7.2符号表达式的操作
1.符号表达式的四则运算 例:matlab命令: syms x y a b fun1=sin(x)+cos(y) fun1 = sin(x)+cos(y) fun2=a+b fun2 = a+b fun1+fun2 ans = sin(x)+cos(y)+a+b
相关的函数语法有下列 5个: int(f) 返回f对预设变量(一般指接近x的变量)的不定积分 int(f,'t') 返回f对指定变量t的不定积分
相关的函数语法有下列 5个: int(f) 返回 f 对预设变量(一般指接近x的变量)的不定积分 int(f,'t') 返回 f 对指定变量 t 的不定积分
m+n ans = [ x+2*y, x^2+y] [ 2*x+y, 1/x+y^2] m*n ans = [ 2*y*x+x^2*y, y*x+x^2*y^2] [ 4*y*x+1/x*y, 2*y*x+1/x*y^2]
m.*n ans = [ 2*y*x, x^2*y] [ 2*y*x, 1/x*y^2]
d=sym(3)/sym(5) d= 3/5 double(d) ans = 0.6000 e=sym(3)/sym(5)+sym(1)/sym(3) e= 14/15 double(e) ans = 0.9333
2.符号对象为变量、表达式的情况 定义一个函数的符号表达式f=ax2+bx+c,有两种方法 (1).用sym将每一变量定义为符号变量 matlab命令: a=sym('a') ;%注意用sym定义一个变量为符号对象的用法 b=sym('b'); c=sym('c'); x=sym('x'); f=a*x^2+b*x+c %由符号对象a,b,c,x通过运算符构成符号表达式f
>> solve('a*x^2+b*x+c', 'b') % 求解关于变量b的根 ans= -(a*x^2+c)/x
带有等号的符号方程也可以求解。 >> f=solve('cos(x)=sin(x)') % solve for x f= 1/4*pi 只给出了一个周期的解
7.4 符号微分(求函数导数的表达式)
3. 符号表达式的简化(了解) simple 格式:r=simple(s) 例: matlab命令: syms x s=2*cos(x)^2-sin(x)^2; r=simple(s) r= 3*cos(x)^2-1
matlab命令: syms x y=2*sin(x)*cos(x) y=simple(y) %把已有的符号表达式y化成最简形式 y= sin(2*x)
intS3=int(S3,0.5,0.6) %求S3在[0.5,0.6]上的定积分 intS3= 2/25*15^(1/2)-1/6*2^(1/2) %上式是符号表达式,想显示具体的数值用double double(intS3) ans= 0.0741 % 或者直接输入 double(int(S3,0.5,0.6)) %可以算出定积分的具体数值 ans= 0.0741
>> diff(f ,a) % 关于a求导 ans= x^3 >> diff(f,a,2) %关于a求二阶导数 ans= 0 注意:如果想求某个表达式在某点的导数值,可以用diff求出导 数的表达式,然后用subs替换求值
7.5 符号积分
int函数用以演算一函数的积分项。 如果积分式的解析式不存在的话或是MATLAB无法找 到,则 int返回原输入的符号式。
多个变量被替换的情况 例:matlab命令: syms a b subs(cos(a)+sin(b),{a,b},{sym('c'),2}) %这是什么意思 %把符号表达式cos(a)+sin(b)中的a用c代替、b用2代替 ans = cos(c)+sin(2) syms x y subs(x*y,{x,y},{[0 1;-1,0],[1 -1;2 1]}) ans = 0 -1 -2 0
例:求f(x)=ax3+x2-bx-c关于x的一阶、二阶导数; 关于a的一阶、二阶导数。 matlab命令: >>syms x a b c %定义x,a,b,c为符号变量 >> f=a*x^3+x^2-b*x-c % 定义f为符号表达式 f= a*x^3+x^2-b*x-c >> diff(f) %对缺省的变量x求一阶导数 ans= 3*a*x^2+2*x-b >> diff(f,2) %关于x求二阶导数 ans= 6*a*x+2
我们示范几个例子: matlab命令 : S1 =sym( '6*x^3-4*x^2+b*x-5'); int(S1) ans= 3/2*x^4-4/3*x^3+1/2*b*x^2-5*x
S2 =sym('sin(a)'); int(S2) ans= -cos(a)
S3 = sym('sqrt(x)'); int(S3) ans= 2/3*x^(3/2) int(S3,'a','b') %求S3在[a,b]上的定积分 ans= 2/3*b^(3/2)- 2/3*a^(3/2)
Matlab第七讲 符号计算
赵瑞
7.1符号对象和符号表达式的定义(重要)
符号对象的生成和使用 凡进行过数值计算的人都知道:数值表达式所用的变量必须事 先被赋过值,否则该表达式无法计算。 Symbolic math toolbox规定:在进行符号计算时,首先要定义 基本的符号对象(可以是常数、变量、表达式),然后利用这些 基本符号对象去构成新的表达式,进而从事所需要的符号运算。 在运算中,凡是有包含符号对象的表达式所生成的衍生对象也都 是符号对象。 定义基本符号对象的指令有两个:sym,syms。它们的常用使用 格式看后面的例子
4.符号表达式的替换求值(重要) subs 用于替换求值 格式:subs(s,new) 含义:s中符号变量用数值型变量或表达式new替换, 一般替换的是s中与x接近的符号变量 例:把x=2代入表达式f=2x2-3x+1,求值 syms x f=2*x^2-3*x+1; a=subs(f,2) %f中的符号变量用数值型变量2代替求值 a= 3
接下来我们将学习
方程的符号解 符号微分 符号积分 常微分方程的符号解 要求掌握以上内容
7.3 方程的符号解
MATLAB具有求解符号方程的工具 :solve 例:求ax2+bx+c=0的根 >> solve('a*x^2+b*x+c') % 求关于变量x的方程的根,x可以缺省 ans= 1/2/a*(-b+(b^2-4*a*c)^1/2) 1/2/a*(-b-(b^2-4*a*c)^(1/2)) 注意:结果是符号向量,其元素是方程的2个解。 如果想对非缺省x变量求解,solve必须指定变量。
int(f,a,b) 返回f对预设变量的定积分值,积分区间为[a,b],a和b为数值式 int(f,'t',a,b) 返回f对独立变数 t 的积分值,积分区间为[a,b],a和b为数值式
int(f,'m','n') 返回f对预设变数的积分值,积分区间为[m,n],m和n为符号式 注意:跟diff一样,这里的 f 是符号表达式
相关文档
最新文档