第4章MATLAB符号计算
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
例4.15 求定积分。
2
y1 1 1 x dx
y2
1
dx
1 x 2
sin t
y3 4txdx
2
3
x3
y4
dx
2 ( x 1)100
命令如下:
x=sym('x'); t=sym('t'); int(abs(1-x), 1, 2)
f=1/(1+x^2); int(f, -inf, inf)
2. 建立符号表达式及符号矩阵
例4.3: 用2种方法建立符号表达式。
在MATLAB窗口,输入命令:
U=sym('3*x^2+5*y+2*x*y+6') %定义符号表达式U
syms x y;
%建立符号变量x、y
V=3*x^2+5*y+2*x*y+6 %定义符号表达式V
2*U-V+6
%求符号表达式的值
【例 4.4】 构造符号矩阵。
>> S=sym('[l,x,y,z;n,u,v,w;a,b,c,d;g,h,j,p]') S= [ l, x, y, z n, u, v, w a, b, c, d g, h, j, p ] >> H=sym('[cos(t), -sin(t); sin(t), cos(t)]') H= [cos(t), -sin(t)] [sin(t), cos(t)]
4.3.2 表达式化简
➢ 因式分解与展开
factor(S) 对S分解因式,S是符号表达式或符号矩阵。 expand(S) 对S进行展开,S是符号表达式或符号矩阵。 collect(S) 对S合并同类项,S是符号表达式或符号矩阵。 collect(S,v) 对S按变量v合并同类项,S是符号表达式或符号矩阵。
%负无穷到正无穷求定积分
int(4*t*x, x, 2, sin(t)) %求定积分(3)
f=x^3/(x-1)^100;
I=int(f, 2, 3)
double(I)
%将上述符号结果转换为数值
例16: 轴的长度为10米,若该轴的线性密度计算公式是 f(x)=6+0.3x千克/米(其中x为距轴的端点距离),求 轴的质量。
laplace(f, x, s) 求函数f(x)的拉普拉斯像函数F(s)。 ilaplace(F, s, x) 求拉普拉斯像函数F(s)的原函数f(x)。
3. Z变换 对数列f(n)进行z变换的MATLAB函数是:
ztrans(fn, n, z) 求fn的Z变换像函数F(z) iztrans(Fz, z, n) 求Fz的z变换原函数f(n)
4.4.4 泰勒级数
函数的泰勒级数 MATLAB中提供了将函数展开为幂级数的函数taylor,
其调用格式为: taylor(f, n, v, a) %变量v在a点的n-1阶泰勒级数
例4.17 求函数在指定点的泰勒展开式。
命令如下:
x=sym('x'); f1=(1+x+x^2)/(1-x+x^2); f2=sqrt(1-2*x+x^3)-(1-3*x+x^2)^(1/3); taylor(f1,x,5) %展开到x的4次幂 taylor(f2,6)
(1)符号函数积分 在MATLAB命令窗口,输入命令:
syms x; f=6+0.3*x; m=int(f, 0, 10)
(2)数值积分
先建立一个函数文件fx.m:
function fx=fx(x) fx=6+0.3*x;
再在MATLAB命令窗口,输入命令:
m=quad('fx', 0, 10, 1e-6)
例4.8 对符号矩阵A的每个元素分解因式。
命令如下:
syms a b x y;
A=[2*a^2*b^3*x^2-4*a*b^4*x^3+10*a*b^6*x^4, 5*x^2; 4, a^3-b^3];
factor(A)
%对A的每个元素分解因式
3*x*y-
例4.9 计算表达式S的值。
命令如下:
syms x y;
立符号变量a,此后,用户可以在表达式中使用变量a 进行各种运算。
定义符号常量 pi2=sym(pi) a=sym(‘log(2)’)
例4.1考察符号变量和数值变量的差别。
在 MATLAB命令窗口,输入命令:
a=sym('a');b=sym('b');c=sym('c');d=sym('d'); %定义4个符号变量
在求函数的极限、导数和积分时,如果用户没有明确 指定自变量,MATLAB将按缺省原则确定主变量并对其 进行相应微积分运算。可用findsym(S,1)查找系统的 缺省变量,事实上,MATLAB按离字符'x'最近原则确定 缺省变量。
【例 4.7】 查找表达式或矩阵中独立变量的操作示例。
>> syms a x y z t alpha beta >> S1 = findsym(sin(pi*t*alpha+beta),1) S1 = t
合化简,并显示化简过程。
例4.10 化简
syms x y; s=(x^2+y^2)^2+(x^2-y^2)^2; simple(s) %MATLAB自动调用多种函数对s进行化简,
并显示每步结果 simplify(s)
书写格式美化 %显示成我们习惯的数学书写形式
syms x y s=(x^2+y^2)^2+(x^2-y^2)^2;
本章内容
4.1 符号对象及其表达方式 4.2 符号算术运算 4.3 独立变量与表达式化简 4.4 符号微积分运算 4.5 符号积分变换 4.6 方程的解析解
4.1 符号对象及其表达式化简
1. 建立符号变量和符号常量 (1)sym函数 S=sym(A) sym函数用来建立单个符号变量,例如,a=sym(‘a’)建
4.2 符号的算术运算
4.2.1 符号对象的加减 【例 4.5】 求两个符号表达式的和与差。
>> syms x fx gx % 定义符号变量 >> fx = 2*x^2+3*x-5 fx = 2*x^2+3*x-5 >> gx= x^2-x+7 >> fx+gx ans= 3*x^2+2*x+2 >> fx-gx ans= x^2+4*x-12
在 MATLAB命令窗口,输入命令:
pi1=sym('pi');k1=sym('8');k2=sym('2');k3=sym('3');
% 定义符号常数
pi2=pi;r1=8;r2=2;r3=3; % 定义数值变量
sin(pi1/3)
% 计算符号表达式值
sin(pi2/3)
% 计算数值表达式值
sqrt(k1)
pretty(s) >>
2 22 2 2 2 (x + y ) + (x - y )
4.4 符号微积分运算
4.4.1符号表达式的极限运算 limit
函数的调用格式为:
limit(f,x,a) limit(f,a)
lim f (x)
xa
limit(f) %求 F中默认的独立变量趋近于0时的极限
limit函数的另一种功能是求单边极限,其调用格 式为:
4.5 符号积分变换
1. 傅立叶(Fourier)变换 在MATLAB中,进行傅立叶变换的函数是:
fourier(f, x, t) 求函数f(x)的傅立叶像函数F(t)。 ifourier(F, t, x) 求傅立叶像函数F(t)的原函数f(x)。
2. 拉普拉斯(Laplace)变换 在MATLAB中,进行拉普拉斯变换的函数是:
4.3 独立变量与表达式化简
4.3.1 符号表达式中变量的确定 MATLAB中的符号可以表示符号变量和符号常数。
findsym可以帮助用户查找一个符号表达式中的符号 变量。该函数的调用格式为:
findsym(S,n)
函数返回符号表达式S中的n个符号变量,若没有指定 n,则返回S中的全部符号变量。
s=sym((-7*x^2-8*y^2)*(-x^2+3*y^2));
s1=expand(s) %对s展开
s2=collect(s,x) %对s按变量x合并同类项(无同类项)
factor(s2)
% 对s2分解因式
➢ 表达式化简 MATLAB提供的对符号表达式化简的函数有: simplify(S) %应用函数规则对S进行化简。 simple(S) %调用MATLAB的其他函数对表达式进行综
4.2.2 符号对象的乘除
【例 4.6】 符号矩阵与数组的乘除示例。 >> syms a b c d e f g h; >> A = [a b; c d]; >> B = [e f; g h]; >> C1 = A.*B C1 = [ a*e, b*f] [ c*g, d*h] >> C2 = A*B/A C2 = [ (d*a*e+d*b*g-c*a*f-c*b*h)/(d*a-c*b), -(b*a*e+b^2*ga^2*f-b*h*a)/(d*a-c*b) (d^2*g+d*c*e-c^2*f-c*d*h)/(d*a-c*b), -(d*b*g+b*c*e-c*a*fd*h*a)/(d*a-c*b)]
limit(f,x,a,'right')
limit(f,x,a,'left')
例4.11 求极限 在MATLAB命令窗口,输入命令:
syms a m x; f=(x^(1/m)-a^(1/m))/(x-a); limit(f,x,a) f=(sin(a+x)-sin(a-x))/x; limit(f) limit(f,inf) %求f函数在x→∞处的极限 limit(f,x,inf,'left') f=(sqrt(x)-sqrt(a)-sqrt(x-a))/sqrt(x*x-a*a); limit(f,x,a,'right')
例4.18 求函数的傅立叶变换及其逆变换。 命令如下:
syms x t; y=abs(x); Fw=fourier(y,x,w) %求y的傅立叶变换 fx=ifourier(Fw,w,x) %求Ft的傅立叶逆变换
f = exp(-x^2) Ft=fourier(f) fx=ifourier(Ft)
x=sym('x'); y=x^3+3*x-2; %定义曲线函数 f=diff(y); %对曲线求导数 g=f-4; solve(g) %求方程f-4=0的根,即求曲线何处的导数为4
4.4.3 符号积分
➢ 不定积分
在MATLAB中,求不定积分的函数是int,其调用格式 为:
int(f,x) int函数求函数f对变量x的不定积分。参数x可以缺 省,缺省原则与diff函数相同。
A=[a,b;c,d]
%建立符号矩阵A
det(A)
%计算符号矩阵A的行列式
---------------------------------------------
w=10;x=5;y=-8;z=11; %定义4个数值变量
B=[w,x;y,z]
%建立数值矩阵B
det(B)
%计算数值矩阵B的行列式
例4.2 比较符号常量与数值变量在代数运算时的差别。
% 计算符号表达式值
sqrt(r1)
% 计算数值表达式值
sqrt(k3+sqrt(k2))
% 计算符号表达式值
sqrt(r3+sqrt(r2))
% 计算数值表达式值
(2)syms函数 1.用于定义多个符号变量。 syms函数的一般调用格式为:
syms var1 var2 … varn
函数定义符号变量var1,var2,…,varn等。 用这种格式定义符号变量时不要在变量名上加 字符分界符(‘),变量间用空格而不要用逗号分 隔。
diff(f)
%未指定求导变量和阶数,按缺省规则处理
f=x*cos(x); diff(f,x,2) diff(f,x,3)
% 求f对x的二阶导数 % 求f对x的三阶导数
f=x*exp(y)/y^2;
diff(f,x)
% f对x的偏导数
diff(f,y)
% f对y的偏导数
例4.13 在曲线y=x3+3x-2上哪一点的切线与直线y=4x-1平行。 命令如下:
4.4.2 符号微分 MATLAB中的求导的函数为:
diff(f,x,n)
diff函数求函数f对变量x的n阶导数。参数x 的用法同求极限函数limit,可以缺省,缺 省值与limit相同,n的缺省值是1。
例4.12 求函数的导数。
命令如下:
syms a b t x(x));
例4.14 求不定积分。
命令如下:
x=sym('x'); f=(3-x^2)^3; int(f)
f=sqrt(x^3+x^4); f1=int(f) g=simple(f1) %调用simple函数对结果化简
➢ 定积分
定积分在实际工作中有广泛的应用。 在MATLAB中,定积分的计算使用函数:
int(f,x,a,b)
2
y1 1 1 x dx
y2
1
dx
1 x 2
sin t
y3 4txdx
2
3
x3
y4
dx
2 ( x 1)100
命令如下:
x=sym('x'); t=sym('t'); int(abs(1-x), 1, 2)
f=1/(1+x^2); int(f, -inf, inf)
2. 建立符号表达式及符号矩阵
例4.3: 用2种方法建立符号表达式。
在MATLAB窗口,输入命令:
U=sym('3*x^2+5*y+2*x*y+6') %定义符号表达式U
syms x y;
%建立符号变量x、y
V=3*x^2+5*y+2*x*y+6 %定义符号表达式V
2*U-V+6
%求符号表达式的值
【例 4.4】 构造符号矩阵。
>> S=sym('[l,x,y,z;n,u,v,w;a,b,c,d;g,h,j,p]') S= [ l, x, y, z n, u, v, w a, b, c, d g, h, j, p ] >> H=sym('[cos(t), -sin(t); sin(t), cos(t)]') H= [cos(t), -sin(t)] [sin(t), cos(t)]
4.3.2 表达式化简
➢ 因式分解与展开
factor(S) 对S分解因式,S是符号表达式或符号矩阵。 expand(S) 对S进行展开,S是符号表达式或符号矩阵。 collect(S) 对S合并同类项,S是符号表达式或符号矩阵。 collect(S,v) 对S按变量v合并同类项,S是符号表达式或符号矩阵。
%负无穷到正无穷求定积分
int(4*t*x, x, 2, sin(t)) %求定积分(3)
f=x^3/(x-1)^100;
I=int(f, 2, 3)
double(I)
%将上述符号结果转换为数值
例16: 轴的长度为10米,若该轴的线性密度计算公式是 f(x)=6+0.3x千克/米(其中x为距轴的端点距离),求 轴的质量。
laplace(f, x, s) 求函数f(x)的拉普拉斯像函数F(s)。 ilaplace(F, s, x) 求拉普拉斯像函数F(s)的原函数f(x)。
3. Z变换 对数列f(n)进行z变换的MATLAB函数是:
ztrans(fn, n, z) 求fn的Z变换像函数F(z) iztrans(Fz, z, n) 求Fz的z变换原函数f(n)
4.4.4 泰勒级数
函数的泰勒级数 MATLAB中提供了将函数展开为幂级数的函数taylor,
其调用格式为: taylor(f, n, v, a) %变量v在a点的n-1阶泰勒级数
例4.17 求函数在指定点的泰勒展开式。
命令如下:
x=sym('x'); f1=(1+x+x^2)/(1-x+x^2); f2=sqrt(1-2*x+x^3)-(1-3*x+x^2)^(1/3); taylor(f1,x,5) %展开到x的4次幂 taylor(f2,6)
(1)符号函数积分 在MATLAB命令窗口,输入命令:
syms x; f=6+0.3*x; m=int(f, 0, 10)
(2)数值积分
先建立一个函数文件fx.m:
function fx=fx(x) fx=6+0.3*x;
再在MATLAB命令窗口,输入命令:
m=quad('fx', 0, 10, 1e-6)
例4.8 对符号矩阵A的每个元素分解因式。
命令如下:
syms a b x y;
A=[2*a^2*b^3*x^2-4*a*b^4*x^3+10*a*b^6*x^4, 5*x^2; 4, a^3-b^3];
factor(A)
%对A的每个元素分解因式
3*x*y-
例4.9 计算表达式S的值。
命令如下:
syms x y;
立符号变量a,此后,用户可以在表达式中使用变量a 进行各种运算。
定义符号常量 pi2=sym(pi) a=sym(‘log(2)’)
例4.1考察符号变量和数值变量的差别。
在 MATLAB命令窗口,输入命令:
a=sym('a');b=sym('b');c=sym('c');d=sym('d'); %定义4个符号变量
在求函数的极限、导数和积分时,如果用户没有明确 指定自变量,MATLAB将按缺省原则确定主变量并对其 进行相应微积分运算。可用findsym(S,1)查找系统的 缺省变量,事实上,MATLAB按离字符'x'最近原则确定 缺省变量。
【例 4.7】 查找表达式或矩阵中独立变量的操作示例。
>> syms a x y z t alpha beta >> S1 = findsym(sin(pi*t*alpha+beta),1) S1 = t
合化简,并显示化简过程。
例4.10 化简
syms x y; s=(x^2+y^2)^2+(x^2-y^2)^2; simple(s) %MATLAB自动调用多种函数对s进行化简,
并显示每步结果 simplify(s)
书写格式美化 %显示成我们习惯的数学书写形式
syms x y s=(x^2+y^2)^2+(x^2-y^2)^2;
本章内容
4.1 符号对象及其表达方式 4.2 符号算术运算 4.3 独立变量与表达式化简 4.4 符号微积分运算 4.5 符号积分变换 4.6 方程的解析解
4.1 符号对象及其表达式化简
1. 建立符号变量和符号常量 (1)sym函数 S=sym(A) sym函数用来建立单个符号变量,例如,a=sym(‘a’)建
4.2 符号的算术运算
4.2.1 符号对象的加减 【例 4.5】 求两个符号表达式的和与差。
>> syms x fx gx % 定义符号变量 >> fx = 2*x^2+3*x-5 fx = 2*x^2+3*x-5 >> gx= x^2-x+7 >> fx+gx ans= 3*x^2+2*x+2 >> fx-gx ans= x^2+4*x-12
在 MATLAB命令窗口,输入命令:
pi1=sym('pi');k1=sym('8');k2=sym('2');k3=sym('3');
% 定义符号常数
pi2=pi;r1=8;r2=2;r3=3; % 定义数值变量
sin(pi1/3)
% 计算符号表达式值
sin(pi2/3)
% 计算数值表达式值
sqrt(k1)
pretty(s) >>
2 22 2 2 2 (x + y ) + (x - y )
4.4 符号微积分运算
4.4.1符号表达式的极限运算 limit
函数的调用格式为:
limit(f,x,a) limit(f,a)
lim f (x)
xa
limit(f) %求 F中默认的独立变量趋近于0时的极限
limit函数的另一种功能是求单边极限,其调用格 式为:
4.5 符号积分变换
1. 傅立叶(Fourier)变换 在MATLAB中,进行傅立叶变换的函数是:
fourier(f, x, t) 求函数f(x)的傅立叶像函数F(t)。 ifourier(F, t, x) 求傅立叶像函数F(t)的原函数f(x)。
2. 拉普拉斯(Laplace)变换 在MATLAB中,进行拉普拉斯变换的函数是:
4.3 独立变量与表达式化简
4.3.1 符号表达式中变量的确定 MATLAB中的符号可以表示符号变量和符号常数。
findsym可以帮助用户查找一个符号表达式中的符号 变量。该函数的调用格式为:
findsym(S,n)
函数返回符号表达式S中的n个符号变量,若没有指定 n,则返回S中的全部符号变量。
s=sym((-7*x^2-8*y^2)*(-x^2+3*y^2));
s1=expand(s) %对s展开
s2=collect(s,x) %对s按变量x合并同类项(无同类项)
factor(s2)
% 对s2分解因式
➢ 表达式化简 MATLAB提供的对符号表达式化简的函数有: simplify(S) %应用函数规则对S进行化简。 simple(S) %调用MATLAB的其他函数对表达式进行综
4.2.2 符号对象的乘除
【例 4.6】 符号矩阵与数组的乘除示例。 >> syms a b c d e f g h; >> A = [a b; c d]; >> B = [e f; g h]; >> C1 = A.*B C1 = [ a*e, b*f] [ c*g, d*h] >> C2 = A*B/A C2 = [ (d*a*e+d*b*g-c*a*f-c*b*h)/(d*a-c*b), -(b*a*e+b^2*ga^2*f-b*h*a)/(d*a-c*b) (d^2*g+d*c*e-c^2*f-c*d*h)/(d*a-c*b), -(d*b*g+b*c*e-c*a*fd*h*a)/(d*a-c*b)]
limit(f,x,a,'right')
limit(f,x,a,'left')
例4.11 求极限 在MATLAB命令窗口,输入命令:
syms a m x; f=(x^(1/m)-a^(1/m))/(x-a); limit(f,x,a) f=(sin(a+x)-sin(a-x))/x; limit(f) limit(f,inf) %求f函数在x→∞处的极限 limit(f,x,inf,'left') f=(sqrt(x)-sqrt(a)-sqrt(x-a))/sqrt(x*x-a*a); limit(f,x,a,'right')
例4.18 求函数的傅立叶变换及其逆变换。 命令如下:
syms x t; y=abs(x); Fw=fourier(y,x,w) %求y的傅立叶变换 fx=ifourier(Fw,w,x) %求Ft的傅立叶逆变换
f = exp(-x^2) Ft=fourier(f) fx=ifourier(Ft)
x=sym('x'); y=x^3+3*x-2; %定义曲线函数 f=diff(y); %对曲线求导数 g=f-4; solve(g) %求方程f-4=0的根,即求曲线何处的导数为4
4.4.3 符号积分
➢ 不定积分
在MATLAB中,求不定积分的函数是int,其调用格式 为:
int(f,x) int函数求函数f对变量x的不定积分。参数x可以缺 省,缺省原则与diff函数相同。
A=[a,b;c,d]
%建立符号矩阵A
det(A)
%计算符号矩阵A的行列式
---------------------------------------------
w=10;x=5;y=-8;z=11; %定义4个数值变量
B=[w,x;y,z]
%建立数值矩阵B
det(B)
%计算数值矩阵B的行列式
例4.2 比较符号常量与数值变量在代数运算时的差别。
% 计算符号表达式值
sqrt(r1)
% 计算数值表达式值
sqrt(k3+sqrt(k2))
% 计算符号表达式值
sqrt(r3+sqrt(r2))
% 计算数值表达式值
(2)syms函数 1.用于定义多个符号变量。 syms函数的一般调用格式为:
syms var1 var2 … varn
函数定义符号变量var1,var2,…,varn等。 用这种格式定义符号变量时不要在变量名上加 字符分界符(‘),变量间用空格而不要用逗号分 隔。
diff(f)
%未指定求导变量和阶数,按缺省规则处理
f=x*cos(x); diff(f,x,2) diff(f,x,3)
% 求f对x的二阶导数 % 求f对x的三阶导数
f=x*exp(y)/y^2;
diff(f,x)
% f对x的偏导数
diff(f,y)
% f对y的偏导数
例4.13 在曲线y=x3+3x-2上哪一点的切线与直线y=4x-1平行。 命令如下:
4.4.2 符号微分 MATLAB中的求导的函数为:
diff(f,x,n)
diff函数求函数f对变量x的n阶导数。参数x 的用法同求极限函数limit,可以缺省,缺 省值与limit相同,n的缺省值是1。
例4.12 求函数的导数。
命令如下:
syms a b t x(x));
例4.14 求不定积分。
命令如下:
x=sym('x'); f=(3-x^2)^3; int(f)
f=sqrt(x^3+x^4); f1=int(f) g=simple(f1) %调用simple函数对结果化简
➢ 定积分
定积分在实际工作中有广泛的应用。 在MATLAB中,定积分的计算使用函数:
int(f,x,a,b)