欢迎关注工科男的Maltab学习日志,采用Mardown文本编辑器编写文章,全新排版升级,内容、代码更简洁,同时开通了视频号,工科男的日常gōng kē nán de rì cháng欢迎大家关注。——工科男
MATLAB符号计算
2 符号导数及其应用
3 符号积分
4 级数符号求和
5 代数方程的符号求解
6 常微分方程(组)符号求解
往期精彩阅读
1 符号计算基础
1.1符号运算
特点
1.2 符号对象
例1 考察符号变量和数值变量的差别
a=sym('a');
b=sym('b');
c=sym('c');
d=sym('d');
%定义4个符号变量
w=10; x=5; y=-8; z=11;
%定义4个数值变量
A=[a, b; c, d]
%建立符号矩阵A
B=[w, x; y, z]
%建立数值矩阵B
det(A)
%计算符号矩阵A的行列式
det(B)
%计算数值矩阵B的行列式
a=sym('a');
b=sym('b');
c=sym('c');
d=sym('d');
%定义4个符号变量
w=10; x=5; y=-8; z=11;
%定义4个数值变量
A=[a, b; c, d]
%建立符号矩阵A
B=[w, x; y, z]
%建立数值矩阵B
det(A)
%计算符号矩阵A的行列式
det(B)
%计算数值矩阵B的行列式
例2 比较符号常数与数值在代数运算时的差别
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)
% 计算符号表达式值
sqrt(r1)
% 计算数值表达式值
sqrt(k3+sqrt(k2))
% 计算符号表达式值
sqrt(r3+sqrt(r2))
% 计算数值表达式值
例3 利用3种方法建立符号表达式
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
%求符号表达式的值
W='3*x^2+5*y+2*x*y+6'
%定义符号表达式W
例4 建立x, y的一般二元函数
f = sym('f(x,y)');
f = ‘f(x,y)’;
例5 符号表达式的四则运算示例
syms x y z;
f=2*x+x^2*x-5*x+x^3
%符号表达式的结果为最简形式
f=2*x/(5*x)
%符号表达式的结果为最简形式
f=(x+y)*(x-y)
%符号表达式的结果不是x^2-y^2,而是(x+y)*(x-y)
factor(S) 对S分解因式,S是符号表达式或符号矩阵;
expand(S) 对S进行展开,S是符号表达式或符号矩阵;
collect(S) 对S合并同类项,S是符号表达式或符号矩阵;
collect(S, v) 对S按变量v合并同类项,S是符号表达式或符号矩阵。
例6 对符号矩阵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,3*x*y-5*x^2;4,a^3-b^3];
factor(A)
%对A的每个元素分解因式
例7 计算表达式S的值
syms x y;
s=(-7*x^2-8*y^2)*(-x^2+3*y^2);
expand(s)
%对s展开
collect(s,x)
%对s按变量x合并同类项(无同类项)
factor(ans)
% 对ans分解因式
例8 表达式化简举例
syms x y;
s=(x^2+y^2)^2+(x^2-y^2)^2;
simplify(s)
simple(s)
%MATLAB自动调用多种函数对s进行化简,并显示每步结果
transpose(S) 返回S矩阵的转置矩阵
determ(S) 返回S矩阵的行列式值
colspace(S) 返回S矩阵列空间的基
[Q, D]=eigensys(S) Q返回S矩阵的特征向量,D返回S矩阵的特征值
1.3 符号表达式中变量的确定
findsym可以帮助用户查找一个符号表达式中的符号变量。该函数的调用格式为:
findsym(S,n)
函数返回符号表达式S中的n个符号变量,若没有指定n,则返回S中的全部符号变量在求函数的极限、导数和积分时,如果用户没有明确指定自变量,MATLAB将按缺省原则确定主变量并对其进行相应微积分运算。可用findsym(S,1)查找系统的缺省变量,事实上,MATLAB按离字符'x'最近原则确定缺省变量。
2 符号导数及其应用2.1函数的极限
limit函数的调用格式为:
limit(f,x,a)
limit函数的另一种功能是求单边极限,其调用格式为:
limit(f,x,a,'right') 或 limit(f,x,a,'left')
例9
syms a m x;
f=(x^(1/m)-a^(1/m))/(x-a);
limit(f, x, a)
%求极限(1)
f=(sin(a + x)-sin(a - x))/x;
limit(f)
%求极限(2)
limit(f, inf)
%求f函数在x→∞(包括+∞和-∞)处的极限
limit(f, x, inf, 'left')
%求极限(3)
f=(sqrt(x)-sqrt(a)-sqrt(x-a))/sqrt(x*x-a*a);
limit(f, x, a, 'right')
%求极限(4)
2.2 符号函数求导及其应用
求导函数为:
diff(f, x, n)
diff函数求函数f对变量x的n阶导数。参数x的用法同求极限函数limit,可以缺省,缺省值与limit相同,n的缺省值是1;
例10 求函数的导数
syms a b t x y z;
f=sqrt(1+exp(x));
diff(f)
%求(1)。未指定求导变量和阶数,按缺省规则处理
f=x*cos(x);
diff(f,x,2)
%求(2)。求f对x的二阶导数
diff(f,x,3)
%求(2)。求f对x的三阶导数
f1=a*cos(t);f2=b*sin(t);
diff(f2)/diff(f1)
%求(3)。按参数方程求导公式求y对x的导数
f=x*exp(y)/y^2;
diff(f,x)
%求(4)。z对x的偏导数
diff(f,y)
%求(4)。z对y的偏导数
f=x^2+y^2+z^2-a^2;
zx=-diff(f,x)/diff(f,z)
%求(5)。按隐函数求导公式求z对x的偏导数
zy=-diff(f,y)/diff(f,z)
%求(5)。按隐函数求导公式求z对y的偏导数
例11 在曲线 上哪一点的切线与直线 平行。
x=sym('x');
y=x^3+3*x-2;
%定义曲线函数
f=diff(y);
%对曲线求导数
g=f-4;
solve(g)
%求方程f-4=0的根,即求曲线何处的导数为4
3 符号积分
求不定积分和定积分的函数是int,其调用格式为
int(f) 求f对默认自变量的不定积分;
int(f, x) 求f对自变量t的不定积分;
int(f, a, b) 求f对默认自变量的定积分,积分区间为[a,b];
int(f, x, a, b) 求f对自变量x的定积分,积分区间为[a,b]
参数x可以缺省,缺省原则与diff函数相同
例12 求不定积分
x=sym('x');
f=(3-x^2)^3;
int(f)
%求不定积分(1)
f=sqrt(x^3+x^4);
int(f)
%求不定积分(2)
g=simple(ans)
%调用simple函数对结果化简
例13 求定积分
x=sym(‘x’);
t=sym(‘t’);
nt(abs(1-x),1,2)
%求定积分
f=1/(1+x^2);
int(f, -inf, inf)
%求定积分
int(4*t*x,x,2,sin(t))
%求定积分
f=x^3/(x-1)^100;
I=int(f, 2, 3)
%用符号积分的方法求定积分
double(I)
%将上述符号结果转换为数值
例14 轴的长度为10米,若该轴的线性密度计算公式是 千克/米(其中x为距轴的端点距离),求轴的质量。
%(1)符号积分
syms x;
f=6+0.3*x;
m=int(f,0,10)
%(2)数值积分
%先建立一个函数文件fx.m:
function fx=fx(x)
fx=6+0.3*x;
%输入命令:
m=quad('fx',0,10,1e-6)
4 级数符号求和4.1 级数的符号求和
级数符号求和函数symsum,调用格式为:
symsum(a,n,n0,nn)
例15 求级数之和
n=sym('n');
s1=symsum(1/n^2,n,1,inf)
s2=symsum((-1)^(n+1)/n,1,inf)
%未指定求和变量,缺省为n
s3=symsum(n*x^n,n,1,inf)
%此处的求和变量n不能省略。
s4=symsum(n^2,1,100)
%计算有限级数的和
4.2 函数的泰勒级数
函数taylor调用格式为:
taylor(f, v, n, a)
例16 求函数在指定点的泰勒展开式。
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次幂时应选择n=5
taylor(f2,6)
5 代数方程的符号求解
线性代数方程组求解函数linsolve,其调用格式:
linsolve(A,b)
一般代数方程(组)求解函数是solve,其调用格式:
solve(f) —— 求一个方程的解
solve(f1,f2, …fn) —— 求n个方程的解
solve('eqn1','eqn2',...,'eqnN','var1','var2',...'varN')
例17 求线性方程组AX=b的解
%解方程组(1)的命令如下:
A=[34, 8, 4; 3, 34, 3; 3, 6, 8];
b=[4; 6; 2];
X=linsolve(A,b)
%调用linsolve函数求(1)的解
Ab
%用另一种方法求(1)的解
%解方程组(2)的命令如下:
syms a11 a12 a13 a21
syms a22 a23 a31 a32
syms a33 b1 b2 b3;
A=[a11,a12,a13;a21,a22,a23;a31,a32,a33];
b=[b1;b2;b3];
X=linsolve(A,b)
%调用linsolve函数求(2)的解
XX=Ab
%用左除运算求(2)的解
6 常微分方程(组)符号求解
常微分方程符号求解函数dsolve,其调用格式为:
dsolve('eqn1','condition','var')
求解微分方程eqn1在初值条件condition下的特解,若没有给出初值条件,求方程的通解
dsolve('eqn1','eqn2',…,'eqnN','condition1',…,'conditionN','var1',…,'varN')
求解微分方程组eqn1、…、eqnN在初值条件conditoion1、…、conditionN下的解,若没有给出初值条件,求方程组的通解
或 y的一阶导数——Dy
或 y的二阶导数——D2y
或 y的n阶导数——Dny
例18 求下列方程的解
y=dsolve('D2y+2*Dy+2*y=0','y(0)=1','Dy(0)=0')
ezplot(y)
% 方程解y(t)的时间曲线图
方程解的时间曲线往期精彩阅读
发表回复