数学软件(MATLAB)》实验指导说明
上机实践是学生对本门课程所学知识的一种全面、综合的能力训练, 是与课堂听讲、自学和练习相辅相成的必不可少的一个教学环节, 也是对课堂教学与实践教学效果的一种检验. 通常, 实习题中的问题比平时的习题复杂得多, 也更接近实际. 实习着眼于原理与应用的结合, 使学生学会如何把书上学到的知识运用于解决实际问题的过程中去, 培养从事软件开发设计工作所必需的基本技能;另一方面, 能使书上的知识变“活”, 起到深化理解和灵活掌握教学内容的目的. 平时的练习较偏重于如何编写功能单一的“小”算法, 而实习题是软件设计的综合训练, 包括问题分析, 总体结构设计, 用户界面设计, 程序设计基本技能和技巧, 多人合作, 以至一整套软件工程规范的训练和科学作风的培养. 此外, 还有很重要的一点是:机器是比任何教师都严厉的主考者.
为了达到上述目的, 本篇安排了3个主要的实习单元, 各单元的训练重点在于应用Matlab, 解决具体的科学问题, 而不强调面面俱到. 各实习单元与教科书的各章具有紧密的对应关系, 在最后一个实习单元中安排有难度较大的实习题, 以便学生综合应用所学的知识.
此外, 每个实习题采取了统一的格式, 实验目的、实验内容、实验要求、问题分析、源程序清单和程序运行结果等几个部分组成.
在每个实习单元都提供了一个完整的实现代码, 仅供同学们参考, 绝大多数的同学在上机实习时千万不要机械的照抄本附录所提供的范文. 而是应该自己独立的思考和设计你的算法和程序, 并争取在规定的时间内如期完成上机工作任务. 对于个别成绩较差的同学, 实在是没法完成任务的建议你不妨抄一遍附录中的样题, 以增强你的感性认识, 强化你的实践基础, 提高你的实践能力. 本附录样题全部用Matlab语言编写, 并全部上机调试通过, 但由于时间比较仓促, 样题中提供的算法和程序并不是最好的算法和程序, 相信不少的同学一定有能力设计出更好的算法和程序. 随着计算机学科的不断发展, 可以使用的语言工具越来越丰富, 在本篇中的实习示例还只是应用面向过程的语言进行设计和编写的程序, 同样的实习题, 读者也可以用面向对象的语言来实现. 我们希望实习报告示例能起到一个抛砖引玉的作用, 在经过同学们的努力学习和积极使用以后, 更多更优良的设计范例能不断涌现.
一、矩阵的建立和基本运算实验指导
1. 矩阵的运算
运算符:+(加)、-(减)、*(乘)、/(右除)、(左除)、^(乘方)、’(转置)等;
常用函数:det(行列式)、inv(逆矩阵)、rank(秩)、eig(特征值、特征向量)、rref(化矩阵为行最简形)
例5:
>> A=[2 0 –1;1 3 2]; B=[1 7 –1;4 2 3;2 0 1];
>> M = A*B % 矩阵A与B按矩阵运算相乘
>> det_B = det(B) % 矩阵A的行列式
>> rank_A = rank(A) % 矩阵A的秩
>> inv_B = inv(B) % 矩阵B的逆矩阵
>> [V,D] = eig(B) % 矩阵B的特征值矩阵V与特征向量构成的矩阵D
>> X = A/B % A/B = A*B-1,即XB=A,求X
>> Y = BA % BA = B-1*A,即BY=A,求Y
2. 线性方程的组的求解
我们将线性方程的求解分为两类:一类是方程组求唯一解或求特解,另一类是方程组求无穷解即通解。可以通过系数矩阵的秩来判断:
若系数矩阵的秩r=n(n为方程组中未知变量的个数),则有唯一解
若系数矩阵的秩r,则可能有无穷解。
线性方程组的无穷解 = 对应齐次方程组的通解+非齐次方程组的一个特解;其特解的求法属于解的第一类问题,通解部分属第二类问题。
利用矩阵除法求线性方程组的特解(或一个解)
方程:AX=b
解法:X=Ab
例: 求方程组 的解
解:在Matlab编辑器中建立M文件:LX0716.m
A=[5 6 0 0 0
1 5 6 0 0
0 1 5 6 0
0 0 1 5 6
0 0 0 1 5];
B=[1 0 0 0 1]';
R_A=rank(A) %求秩
X=AB %求解
运行后结果如下
R_A =
5
X =
2.2662
-1.7218
1.0571
-0.5940
0.3188
这就是方程组的解。
例: 求方程组
的一个特解
解:在Matlab编辑器中建立M文件:LX0717.m
A=[1 1 -3 -1;3 -1 -3 4;1 5 -9 -8];
B=[1 4 0]';
X=AB
X =
0
0
-0.5333
0.6000
3. 求线性齐次方程组的通解
在Matlab中,函数null用来求解零空间,即满足A·X=0的解空间,实际上是求出解空间的一组基(基础解系)。
格式:z = null % z的列向量为方程组的正交规范基,满足
% z的列向量是方程AX=0的有理基
例: 求解方程组的通解:
解:在Matlab编辑器中建立M文件:LX0719.m
A=[1 2 2 1;2 1 -2 -2;1 -1 -4 -3];
format rat %指定有理式格式输出
B=null(A,'r') %求解空间的有理基
运行后显示结果如下:
B =
2 5/3
-2 -4/3
1 0
0 1
写出通解:
syms k1 k2
X=k1*B(:,1)+k2*B(:,2) %写出方程组的通解
pretty(X) %让通解表达式更加精美
运行后结果如下:
X =
[ 2*k1+5/3*k2]
[ -2*k1-4/3*k2]
[ k1]
[ k2]
% 下面是其简化形式
[2k1 + 5/3k2 ]
[ ]
[-2k1 - 4/3k2]
[ ]
[ k1 ]
[ ]
[ k2 ]
4. 求非齐次线性方程组的通解
非齐次线性方程组需要先判断方程组是否有解,若有解,再去求通解。因此,
步骤为:第一步:判断AX=b是否有解,若有解则进行第二步
第二步:求AX=b的一个特解
第三步:求AX=0的通解
第四步:AX=b的通解= AX=0的通解+AX=b的一个特解。
例: 求解方程组
解:在Matlab编辑器中建>M文件:LX0720.m
A=[1 -2 3 -1;3 -1 5 -3;2 1 2 -2];b=[1 2 3]';B=[A b];n=4;
R_A=rank(A),R_B=rank(B),format rat
if R_A==R_B&R_A==n %判断有唯一解
X=Ab
elseif R_A==R_B&R_A %判断有无穷解
X=Ab %求特解X=pinv(A)*b
C=null(A,'r') %求AX=0的基础解系
else X='equition no solve' %判断无解
end
运行后结果显示:
R_A =
2
R_B =
3
X =
equition no solve
说明该方程组无解
例 求解方程组的通解:
解法一:在Matlab编辑器中建立M文件:LX07211.m
A=[1 1 -3 -1;3 -1 -3 4;1 5 -9 -8];b=[1 4 0]';B=[A b];n=4;
R_A=rank(A),R_B=rank(B),format rat
if R_A==R_B&R_A==n
X=Ab
elseif R_A==R_B&R_A
X=Ab
C=null(A,'r')
else X='Equation has no solves'
end
运行后结果显示为:
R_A = 2
R_B = 2
Warning: Rank deficient, rank = 2 tol = 8.8373e-015.
> In D:Matlabpujunlx0723.m at line 11
X = 0
0
-8/15
3/5
C =
3/2 -3/4
3/2 7/4
1 0
0 1
所以原方程组的通解为
X=k1 +k2 +
解法二:在Matlab编辑器中建立M文件:LX07212.m
A=[1 1 -3 -1;3 -1 -3 4;1 5 -9 -8];b=[1 4 0]';B=[A b];
C=rref(B) %求增广矩阵的行最简形,可得最简同解方程组。
运行后结果显示为:
C =
1 0 -3/2 3/4 5/4
0 1 -3/2 -7/4 -1/4
0 0 0 0 0
对应齐次方程组的基础解系为:
,
非齐次方程组的特解为:
所以,原方程组的通解为:
X=k1 +k2 + .
二、程序设计实验指导
1. 无条件循环
当需要无条件重复执行某些命令时,可以使用for循环:
for 循环变量t=表达式1 : 达式2 : 表达式3
语句体
end
说明:表达式1为循环初值,表达式2为步长,表达式3为循环终值;当表达式2省略时则默认步长为1;for语句允许嵌套。
例 : 如:矩阵输入程序
生成3×4阶的Hiltber矩阵。 m=input(‘矩阵行数:m=’);
for i=1 : 3 n= input(‘矩阵列数:n=’);
for j=1 : 4 for i=1:m
H(i,j)=1/(i+j-1); for j=1:n
end disp([‘输入第’,num2str(i),’行,第’, num2str(j),’列元素’])
end A(i, j) = input (‘ ’)
end end
2. 条件循环
if-else-then语句的常使用三种形式为:
(1) if 逻辑表达式 (3) if 逻辑表达式1
语句体 语句体1
end elseif 逻辑表达式2
语句体2
(2) if 逻辑表达式1 elseif 逻辑表达式3
语句体1 …
else else
语句体2 语句体n
end end
while循环的一般使用形式为:
while 表达式
语句体
end
例:
用二分法计算多项式方程 = 0在[0,3]内的一个根。
解:
a = 0;fa = -inf;b = 3;fb = inf;
while b-a > eps*b
x =(a+b)/2; fx = x^3-2*x-5;
if sign(fx)== sign(fa)
a =x;fa = fx;
else
b = x;fb = fx;
end
end
x
运行结果为:x = 2.0945515148154233
3. 分支结构
若需要对不同的情形执行不同的操作,可用switch 分支语句:
switch 表达式(标量或字符串)
case 值1
语句体1
case 值2
语句体2
…
otherwise
语句体n
end
说明:当表达式不是“case”所列值时,执行otherwise语句体。
4. 建立M文件
将多个可执行的系统命令,用文本编辑器编辑后并存放在后缀为 .m 的文件中,若在MATLAB命令窗口中输入该m-文件的文件名(不跟后缀.m!),即可依次执行该文件中的多个命令。这个后缀为.m的文件,也称为Matlab的脚本文件(Script File)。
注意:文件存放路径必须在Matlab能搜索的范围内。
5. 建立函数文件
对于一些特殊用户函数,系统提供了一个用于创建用户函数的命令function,以备用户随时调用。
1.格式:
function [输出变量列表]=fun_name(输入变量列表)
用户自定义的函数体
2.函数文件名为:fun_name,注意:保存时文件名与函数名最好相同;
3.存储路径:最好在系统的搜索路径上。
4. 调用方法:输出参量=fun_name (输入变量)
例:计算s = n!,在文本编辑器中输入:
function s=pp(n);
s=1;
for i=1:n
s=s*i;
end
s;
在MATLAB命令窗口中输入:s=pp(5), 结果为s = 120
三、非线性方程和常微分方程的解法实验指导
1. 二维图形
1.基本的绘图命令
plot命令打开一个称为图形窗口的窗口,将坐标轴缩扩以适应数据,绘制数据.如果已经存在一个图形窗口,则plot命令会清除当前图形窗口的图形,绘制新的图形.
1)plot(y) 当y为向量时,是以 y的分量为纵坐标,以元素序号为横坐标,用直线依次连接数据点,绘制曲线.若y为实矩阵,则按列绘制每列对应的曲线,图中曲线数等于矩阵的列数.
2)plot(x,y) 若y和x为同维向量,则以x为横坐标y为纵坐标绘制连线图.若x是向量J是行数或列数与x长度相等的矩阵,则绘制多条不同色彩的连线图,x被作为这些曲线的共同横坐标.若x和y为同型矩阵,则以x,y对应列元素为横纵坐标分别绘制曲线,曲线条数等于矩阵的列数.
3)polt(xl,y1,x2,y2,…)在此格式中,每对x,y必须符合plot(x,y)中的要求,不同对之间没有影响,命令将对每一对x,y绘制曲线.
以上三种格式中的x,y都可以是表达式.
例: 作出y=sin(x)在[0,2 ]上的图形.
键人:
x=linspace(0,2*pi,30); y=sin(x); plot(x,y);
例: 在同一个坐标系下作出两条曲线y=sin(x)和y=cos(x)在[0,2 ]上的图形.
键人:
x=0:2*pi/30:2*pi;y=[sin(x);cos(x)]; plot(x,y);
或键人:
X=0:2*pi/30:2*pi; y1=sin(x);y2=cos(x); plot(x,y1,x,y2);
多条曲线的另一种画法是利用hold命令.在已画好的图形上,若设置hold on,MATLAB将把新的plot命令产生的图形画在原来的图形上.而命令hold off将结束这种状态.例如,
x=linspace(0,2*pi,30);y=sin(x);plot(x,y);
先画好图,然后用
hold on,z=cos(x);plot(x,z);hold off
增加cos(x)的图形,也可得到图.
2.基本的绘图控制
在调用plot时可以指定颜色、线型和数据点图标,基本的调用格式为
plot(x,y,’color-linestyle-marker’)
其中 color-linestyle-marker 为一个字符串,由颜色、线型和数据点图标组成.例如,命令plot(x,y,’y:o’),其中字符串“y:o”中,第一个字符“y”表示曲线颜色为黄色;第二个字符“:”表示曲线为点线;第三个字符“o”表示曲线上每个数据点处用小圆圈标出.当只指定数据点图标时,数据点将不连成线,而只画出一个个孤立的数据点.字符串参数的取值如下:
颜色:y(黄);r(红);g(绿);b(蓝);w(白);k(黑);m(紫);c(青).
线型:-(实线);:(点线);-.(虚点线);- -(虚线).
数据点图标:( 黑点);+( 号);*(星号);o(小圆圈);pentagram(五角星).
坐标系的控制:不特别指定时,MATLAB自动指定图形的横纵坐标比例和显示的范围,如果你不满意,可用axis命令来控制,常用的有
axis([xmin xmax ymin ymax])[]中分别给出x轴和y轴的最小、最大值
axis equal x轴和y轴的单位长度相同
axis square 图框呈方形
axis off 取消坐标轴
3.图形标注
MATLAB提供了标注图形的命令,常用的有xlabel,ylabel,和zlabel,它们分 别用于对 x,y,z轴加标注;title用于给整个图形加标题;text和gtext用于在图形中特定的位置加字符串,前者字符串的位置在命令中指定,后者用鼠标指定grid在图形上加网格.
例: 在同一坐标系下画出sin x和cosy的函数图形,并适当标注。
键人:
>> x=linspace(0,2*pi,30); y=[sin(x);cos(x)];
>> plot(x,y); grid; xlabel('x');ylabel('y');
>> title('Sine and Cosine Curves');
>> text(3*pi/4,sin(3*pi/4),'leftarrow sinx');
>>text(3*pi/2,cos(3*pi/2),'cosxrightarrow','HorizontalAlignment', 'right');
输出结果为
若使用命令gtext('sinx')代替命令text,则在图形窗口上会出现十字线,其交点是字符串的位置,移动鼠标可移动该交点,鼠标点击一下就可将字符串固定在那里.
4.多幅图形
Subplot(m,n,p)可在同一个图形商口中,画出多幅不同坐标系中的图形
该命令把一个画面分为m *n个图形区域小代表当前的区域号,在每个区域中分别画一个图.子图沿第一行从左至右编号,接着排第二行,依此类推.用法如下例.
键人:
x=linspace(0,2*pi,30);y=sin(x); z=cos(x);
u=2*sin(x).cos(x);v=sin(x)./cos(x);
subplot(2,2,l),polt(x,y),title(’sin(x)’)
subplot(2,2,2),polt(x,z),title(’cos(x)’)
subplot(2,2,3),polt(x,u),title(’2sin(x)cos(x)’)
subplot(2,2,4),polt(x,v),title(’sin(x)/cos(x)’)
2.三维图形
1.空间曲线
例: 做螺旋线 x=sint,y=cost.z=t.
键人:
t=0:pi/50:10*pi;
polt3(sin(t),cos(t),t);
2.带网格的曲面
命令:
「X,Y」=meshgrid(x,y);mesh(X,Y,Z);和surf(X,Y,Z)
例: 作曲面z=f(x,y)的图形,
, -7.5
键入:
x=-7.5:0.5:7.5; y=x;
[X,Y]=meshgrid(x,y);
R=sqrt(X.^2+Y.^7)+eps;
Z=sin(R)./R;
mesh(X,Y,Z);
可将上述的画网格图的mesh命令改为surf(X,Y,Z);则输出的曲面图,效果有所不同.
3.等高线
MATLAB还提供了画二维和三维等高线图的函数contour和contour3.
例: 作出由MATLAB的函数peaks产生的二元函数的曲面及其等值线图.
键入:
[X,Y,Z」=peaks(30);surf(X,Y,Z);
figure(2); %打开另一个图形窗口
contour(X,Y,Z,16);
figure(3); contour3(X,Y,Z,16);
输出的三个图形.
2. 隐函数绘图
(1)f=f(x)
ezplot(f):在默认区间-2ππ绘制f = f(x)的图形。
ezplot(f, [a,b]):在区间a绘制f = f(x)的图形。
(2)f=f(x,y)
ezplot(f):在默认区间-2ππ和-2ππ绘制f(x,y) = 0的图形。
ezplot(f, [xmin,xmax,ymin,ymax]):在区间xmin和ymin绘制f(x,y) = 0的图形。
ezplot(f, [a,b]):在区间a和a绘制f(x,y) = 0的图形。
(3) 对于参数方程x = x(t)和y = y(t),ezplot函数的调用格式为:
ezplot(x,y):在默认区间0π绘制x=x(t)和y=y(t)的图形。
ezplot(x,y, [tmin,tmax]):在区间tmin < t < tmax绘制x=x(t)和y=y(t)的图形。
实例:
subplot(2,2,1);
ezplot('x^2+y^3-9');axis equal
subplot(2,2,2);
ezplot('x^3+y^3-5*x*y+1/5')
subplot(2,2,3);
ezplot('cos(tan(pi*x))',[ 0,1])
subplot(2,2,4);
ezplot('8*cos(2*t)','4*sqrt(2)*sin(t.^2)',[0,2*pi])
3. 动画制作:
%function f=anim_zzy1(K,ki)
K=2;ki=450;
t1=(0:1000)/1000*10*pi;
x1=cos(t1);y1=sin(t1);
z1=-t1;
t2=(0:10)/10;
x2=x1(end)*(1-t2);y2=y1(end)*(1-t2);
z2=z1(end)*ones(size(x2));
t3=t2;
z3=(1-t3)*z1(end);x3=zeros(size(z3));
y3=x3;t4=t2;x4=t4;
y4=zeros(size(x4));
z4=y4;
x=[x1 x2 x3 x4];y=[y1 y2 y3 y4];z=[z1 z2 z3 z4];
plot3(x,y,z,'b'), axis off
h=line('Color',[1 0 0],'Marker','.','MarkerSize',40,'EraseMode','xor');
n=length(x);i=1;j=1;
while 1
set(h,'xdata',x(i),'ydata',y(i),'zdata',z(i));
drawnow; % <21>
pause(0.0005) % <22>
i=i+1;
if nargin==2 & nargout==1
if(i==ki&j==1);f=getframe(gcf);end % <25>
end
if i>n
i=1;j=j+1;
if j>K;break;end
end
end
2. 非线性方程数值求解
(1) 单变量非线性方程求解
在MATLAB中提供了一个fzero函数,可以用来求单变量非线性方程的根。该函数的调用格式为:
z=fzero('fname',x0,tol,trace)
其中fname是待求根的函数文件名,x0为搜索的起点。一个函数可能有多个根,但fzero函数只给出离x0最近的那个根。tol控制结果的相对精度,缺省时取tol=eps,trace指定迭代信息是否在运算中显示,为1时显示,为0时不显示,缺省时取trace=0。
例 求f(x)=x-10x+2=0在x0=0.5附近的根。
步骤如下:
(a) 建立函数文件funx.m。
function fx=funx(x)
fx=x-10.^x+2;
(b)调用fzero函数求根。
z=fzero('funx',0.5)
z = 0.3758
(2) 非线性方程组的求解
对于非线性方程组F(X)=0,用fsolve函数求其数值解。fsolve函数的调用格式为:
X=fsolve('fun',X0,option)
其中X为返回的解,fun是用于定义需求解的非线性方程组的函数文件名,X0是求根过程的初值,option为最优化工具箱的选项设定。最优化工具箱提供了20多个选项,用户可以使用optimset命令将它们显示出来。如果想改变其中某个选项,则可以调用optimset()函数来完成。例如,Display选项决定函数调用时中间结果的显示方式,其中‘off’为不显示,‘iter’表示每步都显示,‘final’只显示最终结果。optimset(‘Display’,‘off’)将设定Display选项为‘off’。
例 求下列非线性方程组在(0.5,0.5) 附近的数值解。
(a) 建立函数文件myfun.m。
function q=myfun(p)
x=p(1);y=p(2);
q(1)=x-0.6*sin(x)-0.3*cos(y);q(2)=y-0.6*cos(x)+0.3*sin(y);
(b) 在给定的初值x0=0.5,y0=0.5下,调用fsolve函数求方程的根。
x=fsolve('myfun',[0.5,0.5]',optimset('Display','off'))
x = 0.6354
0.3734
将求得的解代回原方程,可以检验结果是否正确,命令如下:
q=myfun(x)
q = 1.0e-009 *
0.2375 0.2957
可见得到了较高精度的结果。
四、Matlab符号数学工具箱应用简介
Matlab 符号运算是通过集成在 Matlab 中的符号数学工具箱(Symbolic Math Toolbox)来实现的。和别的工具箱有所不同,该工具箱不是基于矩阵的数值分析,而是使用字符进行符号分析与运算。实际上,Matlab 中的符号数学工具箱是建立在 Maple 基础上的进行 Matlab 符号运算时,它就请求 Maple 软件去计算并将结果返回给 Matlab。
Matlab 的符号数学工具箱可以完成几乎所有得符号运算功能。这些功能主要包括:符号表达式的运算,符号表达式的复合、化简,符号矩阵的运算,符号微积分、符号函数画图,符号代数方程求解,符号微分方程求解等。此外,工具箱还支持可变精度运算,既支持符号运算并以指定的精度返回结果。限于篇幅,在此列出函数的名称和功能,至于其参数设置,可借助 Matlab 的帮助系统
1.符号表达式的运算
[n,d]=numden(a) 提取符号表达式 a 的分子和分母,并将其存放在 n 和 d 中
n=numden(a) 提取符号表达式 a 的分子和分母,只将分子存放在 n 中
symadd(a,b) 返回符号表达式 a 和 b 的和,也可直接用 a+b
symsub(a,b) 返回符号表达式 a 和 b 的差,也可直接用 a-b
symmul(a,b) 返回符号表达式 a 和 b 的积,也可直接用 a*b
symdiv(a,b) 返回符号表达式 a 和 b 的商,也可直接用 a/b
sympow(a,b) 返回符号表达式 a 的 b 次幂,也可直接用 a^b
compose(f,g) 返回复合函数 f(g(y))
compose(f,g,z) 返回自变量为 z 的复合函数 f(g(z))
compose(f,g,x,z)返回复合函数 f(g(z)),并使 x 成为 f 函数的独立变量。即,f=cos(x/t),则 compose(f,g,x,z)返回复合函数 cos(g(z)/t);而compose(f,g,t,z)返回 cos(x/g(z))
compose(f,g,x,y,z)返回复合函数 f(g(z)),并且使 x 与 y分别成为 f与 g 函数的变量。即如果 f=cos(x/t),g=sin(y/u),compose(f,g,x,y,z) 返回cos(sin(z/u)/t),而 compose(f,g,x,u,z)返回 cos(sin(y/z)/t)
finverse(f) 返回符号函数 f的反函数
finverse(f,v) 返回自变量为 v 的符号函数 f的反函数
symsum(s) 返回 s(x)
symsum(s,v) 返回 s(v)
symsum(s,a,b) 返回 s(x)
symsum(s,v,a,b) 返回 s(v)
2.符号与数值间的转换以及符号的可变精度计算
numeric(p) 将符号表达式 p 转化为数值表达式
eval(p) 将符号表达式 p 转化为数值表达式
sym2poly(p) 将符号多项式 p 转换成它的 Matlab 等价系数向量
digit 察看现在系统中的算术运算精度
digit(n) 将系统的运算精度调整为小数点后 n 位
subs(f,new,old) f 为符号表达式,new 与 old 是字符、字符串或其他
new字符串将替换符号表达式 f中的 old 字符串
3.符号表达式的化简
pretty(f) 将符号表达式化简成与高等数学课本上显示符号表达
collect(f) 合并符号表达式的同类项
horner(f) 将一般的符号表达式转换成嵌套形式的符号表达式
factor(f) 对符号表达式进行因式分解
expand(f) 对符号表达式进行展开
simplify(f) 对符号表达式进行化简,它利用各种类型的代数恒等等式,包括求和、积分、三角函数、指数函数以及 Bessel 函数等来化简符号表达式
simple(f) 对符号表达式尝试多种不同的算法进行化简,以显示长度最短的符号表达式简化形式
[r,how]=simple(f) 返回的 r为符号表达式进行化简后的形式, how为所采用的简化方法
4.符号矩阵
transpose(A) 符号矩阵的转置
determ(A) 符号矩阵的行列式
det(A) 符号矩阵的行列式
inv(A) 符号矩阵求逆
rank(A) 符号矩阵求秩
[B,C]=eig(A) B 为 A的特征向量,C 为 A特征值
[B,C]=eigensys(A) B 为 A的特征向量,C 为 A特征值
svd(A) 返回 A的奇异值
singvals(A) 返回 A的奇异值
[B,C]=jordan(A) B 为转换矩阵,其列是特征向量,C为约当标准型
5.符号微积分
limit(f,x,a) 返回符号表达式 f当 x 趋向于 a 时的极限
limit(f,a) 返回符号表达式 f由 findsym(f)返回独立变量趋向于 a 时的极限
limit(f) 返回符号表达式 f由 findsym(f)返回独立变量在 a=0 时的极限
limit(f,x,a,’right’) 右极限
limit(f,x,a,’left’) 左极限
diff(f) 返回 f的微分
diff(f,’a’) 对 a 变量求微分
diff(f,n) 对 f求 n 次微分
diff(f,’a’,n) 对变量 a 求 n 次微分
int(f) 对 f求不定积分
int(f,v) 对 v 变量求不定积分
int(f,a,b) 对 f求[a,b]上的定积分
int(f,v,a,b) 对变量 v 求[a,b]上的定积分