如何画三维图形?
考虑一个二元函数,如何用三维图形来表现这个曲面呢?
>>[x,y] = meshgrid(-3:1/8:3); 生成网格线 meshgrid (X)=meshgrid(X,Y)
>>z = 3*(1-x).^2.*exp(-(x.^2) - (y+1).^2)- 10*(x/5 - x.^3 - y.^5) .*exp(-x.^2-y.^2)- 1/3*exp(-(x+1).^2 - y.^2);
>>surf(x,y,z), shading interp; colorbar 利用函数 surf 来画图。其他的都是修饰函数。
假设一个一元方程为
如何对其求导数?
>>syms x; 指出以x为变量
>>f=’x^2*(sin(x))^2’; 列出方程式
>>diff(f); 算出一阶导数
>>simple(ans); 化简结果
就可以得到答案:x-x*cos(2*x)+x^2*sin(2*x)
如何求出高阶导数呢?
>>diff(f,x,2); 或者diff(f,2)
>>simple(ans);
就可以求出高(2)阶导数:(2*cos(x)^2-2*sin(x)^2)*x^2+8*x*sin(x)*cos(x)+2*sin(x)^2
如何求出积分呢?
>>int(f,x);
就可求得一阶积分:x^2*(-1/2*cos(x)*sin(x)+1/2*x)-1/2*x*cos(x)^2+1/4*cos(x)*sin(x)+1/4*x-1/3*x^3
如何求泰勒展式呢?
>>taylor(f,15,x); 一直展开到15阶。
就可以得到函数f的泰勒展式: x^4-1/3*x^6+2/45*x^8-1/315*x^10+2/14175*x^12-2/467775*x^14
MATLAB 的语句流程与控制
作为一种常用的编程语言,MATLAB 支持各种流程控制结构,如循环结构、条件转移结构、客观结构等另外 MATLAB 还支持一种新的结构 --- 试探结构。 循环语句有两种结构: for ... end 结构和 while ... end 结构。 这两种语句结构不完全相同,各有各的特色。
for ... end 语句通常的调用格式为: 例如:想由 MATLAB 求出 1+2+...+100 的值,可以作下列的循环:
for 循环变量=s1:s3:s2 >> mysum=0; for i=1:1:100,mysum=mysum+i; end; mysum
循环体语句组
end
同样的问题在 while 循环结构下可以表示为
mysum = 0; i=1; while (i<=100), mysum=mysum+i; i=i+1; end
条件转移语句:和 C 语言相象
if 条件式1
条件块语句组1
elseif 条件式2
条件块语句组2
...
else
条件块语句组n+1
end
开关结构:
switch 开关表达式
case 表达式1
语句段1
case {表达式2,表达式3,..., 表达式m}
语句段2
...
otherwise
语句段n
end
试探结构:MATLAB 从 5.2 版本开始提供了一种新的试探式语句结构,其一般的形式为:
try
语句段1
catch
语句段2
end
本语句结构首先试探性地执行语句段 1,如果在此段语句执行过程中出现错误,则将错误信息赋给保留的 lasterr 变量,并放弃这段语句,转而执行语句段 2 中的语句。这种新的语句结构是 C 等语言中所没有的。
M-function的编写:
MATLAB 的 M 函数是由 function 语句引导的,其基本格式如下:
function [返回变量列表] = 函数名 (输入变量列表)
注释说明语句段, 由 % 引导
输入、返回变量格式的检测
函数体语句
这里输入和返回变量的实际个数分别由 nargin 和 nargout 两个 MATLAB 保留变量来给出,只要进入该函数,MATLAB 就将自动生成这两个变量,不论您是否直接使用这两个变量。返回变量如果多于 1 个,则应该用方括号将它们括起来,否则可以省去方括号。输入变量和返回变量之间用逗号来分割。注释语句段的每行语句都应该由百分号 % 引导,百分号后面的内容不执行,只起注释作用。用户采用 help 命令则可以显示出来注释语句段的内容。此外,正规的变量个数检测也是必要的。如果输入或返回变量格式不正确,则应该给出相应的提示。我们将通过下面的例子来演示函数编程的格式与方法。
例子:
假设我们想生成一个 nxm 阶的 Hilbert 矩阵, 它的第 i 行第 j 列的元素值为 1/(i+j-1)。我们想在编写的函数中实现下面几点:
如果只给出一个输入参数,则会自动生成一个方阵,即令 m=n
在函数中给出合适的帮助信息,包括基本功能、调用方式和参数说明
检测输入和返回变量的个数,如果有错误则给出错误信息
如果调用时不要求返回变量,则将显示结果矩阵。其实在编写程序时养成一个好的习惯,无论对程序设计者还是对程序的维护者、使用者都是大有裨益的。
采用 MATLAB 函数编写格式和上述要求,我们可以编写出一个函数
function A=myhilb(n, m)
%MYHILB a demonstrative M-function.
% A=MYHILB(N, M) generates an N by M Hilbert matrix A.
% A=MYHILB(N) generates an N by N square Hilbert matrix.
% MYHILB(N,M) displays ONLY the Hilbert matrix, but do not return any
% matrix back to the calling function.
%
%See also: HILB.
% Designed by Professor Dingyu XUE, Northeastern University, PRC
% 5 April, 1995, Last modified by DYX at 21 March, 2000
if nargout>1, error(Too many output arguments.); end
if nargin==1, m=n;
elseif nargin==0 | nargin>2
error(Wrong number of iutput arguments.);
end
A1=zeros(n,m);
for i=1: n
for j=1:m
A1(i,j)=1/(i+j-1);
end, end
if nargout==1, A=A1; elseif nargout==0, disp(A1); end 经测试,完全正确的程序。
如何输入复数矩阵?
两种方法 -,直接输入 a+bi ;=,先生成 实数矩阵 A B,然后生成 C=A+Bi
如何生成符号矩阵?
1.用命令sym定义矩阵:
这时的函数sym实际是在定义一个符号表达式,这时的符号矩阵中的元素可以是任何的符号或者是表达式,而且长度没有限制,只是将方括号置于用于创建符号表达式的单引号中。如下例:
>> sym_matrix = sym([a b c;Jack,Help Me!,NO WAY!])
sym_matrix =[a b c]
[Jack Help Me! NO WAY!]
2.用命令syms定义矩阵
先定义矩阵中的每一个元素为一个符号变量,而后像普通矩阵一样输入符号矩阵。
>> syms a b c ;
>> M1 = sym(Classical);
>> M2 = sym( Jazz);
>> M3 = sym(Blues)
>> syms_matrix = [a b c; M1, M2, M3;int2str([2 3 5])]
syms_matrix =[ a b c]
[Classical Jazz Blues]
[ 2 3 5]
如何创建多维数组?
>> A1=[1,2,3;4,5,6;7,8,9];A2=A1;A3=A1-A2;
>> A4=cat(3,A1,A2,A3) 利用cat函数来生成。
A4(:,:,1) =
1 2 3
4 5 6
7 8 9
A4(:,:,2) =
1 4 7
2 5 8
3 6 9
A4(:,:,3) =
0 -2 -4
2 0 -2
4 2 0
或用另一种原始方式可以定义:
>> A1=[1,2,3;4,5,6;7,8,9];A2=A1;A3=A1-A2;
>> A5(:,:,1)=A1, A5(:,:,2)=A2, A5(:,:,3)=A3 结果跟上面的相同。
几种特殊的矩阵的生成:
全零矩阵 Zeros([n,m…]) 单位矩阵 Eye([n,m…]) 全一矩阵 Ones([n,m…])
均匀分布随机矩阵: rand 产生一个介于[0,1]的随机数。
产生一个在区间[10, 20]内均匀分布的4阶随机矩阵
>> a=10;b=20;
>> x=a+(b-a)*rand(4) %rand本身产生的数大于零而小于一。
x =
19.2181 19.3547 10.5789 11.3889
17.3821 19.1690 13.5287 12.0277
11.7627 14.1027 18.1317 11.9872
14.0571 18.9365 10.0986 16.0379
正态分布随机矩阵:randn(n,m)
产生均值为0.6,方差为0.1的4阶矩阵
>> mu=0.6; sigma=0.1;
>> x=mu+sqrt(sigma)*randn(4)
x = 0.8311 0.7799 0.1335 1.0565
0.7827 0.5192 0.5260 0.4890
0.6127 0.4806 0.6375 0.7971
0.8141 0.5064 0.6996 0.8527
产生随机排列:p = randperm(n) %产生1~n之间整数的随机排列
如何产生线性等分向量:
y = linspace(a,b) %在(a, b)上产生100个线性等分点
y = linspace(a,b,n) %在(a, b)上产生n个线性等分点
计算矩阵中元素个数: n = numel(a) %返回矩阵A的元素的个数
产生以输入元素为对角线元素的矩阵:
out = blkdiag(a,b,c,d,…) %产生以a,b,c,d,…为对角线元素的矩阵
几种比较特殊的矩阵:
多项式系数的友矩阵:
例1-14 求多项式 的友矩阵和根
>> u=[1 0 -7 6];
>> A=compan(u) %求多项式的友矩阵
A =
0 7 -6
1 0 0
0 1 0
>> eig(A) %A的特征值就是多项式的根
ans =
-3.0000 2.0000 1.0000 。
hadamard矩阵
>> h=hadamard(4)
h = 1 1 1 1
1 -1 1 -1
1 1 -1 -1
1 -1 -1 1
Hankel方阵
H = hankel(c) %第1列元素为c,反三角以下元素为0。
H = hankel(c,r) %第1列元素为c,最后一行元素为r,如果c的最后一个元素与r的第一个元素不同,交叉位置元素取为c的最后一个元素。
>> c=1:3,r=7:10
>> h=hankel(c,r)
h =
1 2 3 8
2 3 8 9
3 8 9 10
Hilbert矩阵
H = hilb(n) %返回n阶Hilbert矩阵,其元素为H(i,j)=1/(i+j-1)。
>> format rat %以有理形式输出
>> H=hilb(3)
H =
1 1/2 1/3
1/2 1/3 1/4
1/3 1/4 1/5
逆Hilbert矩阵
H = invhilb(n) %产生n阶逆Hilbert矩阵
Magic(魔方)矩阵
Pascal矩阵
A = pascal(n) %产生n阶Pascal矩阵,它是对称、正定矩阵,它的元素由Pascal三角组成,它的逆矩阵的所有元素都是整数。
A = pascal(n,1) %返回由下三角的Cholesky系数组成的Pascal矩阵
A = pascal(n,2) %返回Pascal(n,1)的转置和交换的形式
>> A=pascal(4)
A =
1 1 1 1
1 2 3 4
1 3 6 10
1 4 10 20
>> A=pascal(3,1)
A =
1 0 0
1 -1 0
1 -2 1
>> A=pascal(3,2)
A =
1 1 1
-2 -1 0
1 0 0
托普利兹矩阵
T = toeplitz(c,r) %生成一个非对称的托普利兹矩阵,将c作为第1列,将r作为第1 行,其余元素与左上角相邻元素相等。
T = toeplitz(r) %用向量r生成一个对称的托普利兹矩阵
>> c=[1 2 3 4 5];
>> r=[1.5 2.5 3.5 4.5 5.5];
>> T=toeplitz(c,r)
T =
1 5/2 7/2 9/2 11/2
2 1 5/2 7/2 9/2
3 2 1 5/2 7/2
4 3 2 1 5/2
5 4 3 2 1
Wilkinson特征值测试阵
W = wilkinson(n) %返回n阶Wilkinson特征值测试阵
例1-21
>> W=wilkinson(4)
W =
3/2 1 0 0
1 1/2 1 0
0 1 1/2 1
0 0 1 3/2
关于向量的点乘和叉乘:
向量点积
C = dot(A,B) %若A、B为向量,则返回向量A与B的点积,A与B长度相同;若为矩阵,则A与B有相同的维数。
C = dot(A,B,dim) %在dim维数中给出A与B的点积
>>X=[-1 0 2];
>>Y=[-2 -1 1];
>>Z=dot(X, Y)
则显示:Z =
4
相当于向量的点乘(。*)所以还可用另一种算法:
sum(X.*Y)
ans= 4
向量叉乘
在数学上,两向量的叉乘是一个过两相交向量的交点且垂直于两向量所在平面的向量。C = cross(A,B) %若A、B为向量,则返回A与B的叉乘,即C=AB,A、B必须是3个元素的向量;若A、B为矩阵,则返回一个3n矩阵,其中的列是A与B对应列的叉积,A、B都是3n矩阵。
C = cross(A,B,dim) %在dim维数中给出向量A与B的叉积。A和B必须具有相同的维数,size(A,dim)和size(B,dim)必须是3。
>>a=[1 2 3];
>>b=[4 5 6];
>>c=cross(a,b)
c=
-3 6 -3
混合积
计算向量a=(1, 2, 3)、b=(4, 5, 6)和c=(-3, 6, -3) 的混合积
>>a=[1 2 3]; b=[4 5 6]; c=[-3 6 -3];
>>x=dot(a, cross(b, c))
x = 54
矩阵的卷积和多项式乘法
w = conv(u,v) 长度为m的向量序列u和长度为n的向量序列v的卷积(Convolution)定义为:式中:w向量序列的长度为(m+n-1)
展开多项式
>> w=conv([1,2,2],conv([1,4],[1,1]))
w = 1 7 16 18 8
>> P=poly2str(w,s) %将w表示成多项式
P = s^4 + 7 s^3 + 16 s^2 + 18 s + 8
7.反褶积(解卷)和多项式除法运算
[q,r] = deconv(v,u) %多项式v除以多项式u,返回商多项式q和余多项式r。
例1-27 ,则其卷积为
>>u = [1 2 3 4]
>>v = [10 20 30]
>>c = conv(u,v)
c =
10 40 100 160 170 120
则反褶积为
>>[q,r] = deconv(c,u)
q =
10 20 30
r =
0 0 0 0 0 0
张量积
C=kron (A,B) %A为mn矩阵,B为pq矩阵,则C为mpnq矩阵。
说明 A与B的张量积定义为:AB与BA均为mpnq矩阵,但一般地ABBA。
关于集合的运算:
交集
c = intersect(a,b) %返回向量a、b的公共部分,即c= a∩b。
c = intersect(A,B,rows) %A、B为相同列数的矩阵,返回元素相同的行。
[c,ia,ib] = intersect(a,b) %c为a、b的公共元素,ia表示公共元素在a中的位置,ib表示公共元素在b中位置。
>> A=[1 2 3 4;1 2 4 6;6 7 1 4]
>> B=[1 2 3 8;1 1 4 6;6 7 1 4]
>> C=intersect(A,B,rows)
C = 6 7 1 4
>> A = [1 9 6 20]; B = [1 2 3 4 6 10 20];
>> [c,ia,ib] = intersect(A,B)
c = 1 6 20
ia = 1 3 4
ib = 1 5 7
检测集合中的元素
k = ismember(a,S) %当a中元素属于S时,k取1,否则,k取0。
k = ismember(A,S,rows) %A、S有相同的列,返回行相同k取1,不相同取0的列向量。
例1-31
>> S=[0 2 4 6 8 10 12 14 16 18 20];
>> a=[1 2 3 4 5 6];
>> k=ismember(a,S)
k = 0 1 0 1 0 1 %1表示相同元素的位置
>> A=[1 2 3 4;1 2 4 6;6 7 1 4]
>> B=[1 2 3 8;1 1 4 6;6 7 1 4]
>> k=ismember(A,B,rows)
k = 0
0
1 %1表示元素相同的行
两集合的差
c = setdiff(a,b) %返回属于a但不属于b的不同元素的集合,C = a-b。
c = setdiff(A,B,rows) %返回属于A但不属于B的不同行
[c,i] = setdiff(…) %c与前面一致,i表示c中元素在A中的位置。
>> A = [1 7 9 6 20]; B = [1 2 3 4 6 10 20];
>> c=setdiff(A,B)
c = 7 9
>> A=[1 2 3 4;1 2 4 6;6 7 1 4]
>> B=[1 2 3 8;1 1 4 6;6 7 1 4]
>> c=setdiff(A,B,rows)
c = 1 2 3 4
1 2 4 6
两个集合交集的非(异或)
c = setxor(a,b) %返回集合a、b交集的非
c = setxor(A,B,rows) %返回矩阵A、B交集的非,A、B有相同列数。
[c,ia,ib] = setxor(…) %ia、ib表示c中元素分别在a (或A)、b(或B)中位置
>> A=[1 2 3 4];
>> B=[2 4 5 8];
>> C=setxor(A,B)
C =
1 3 5 8
>> A=[1 2 3 4;1 2 4 6;6 7 1 4]
>> B=[1 2 3 8;1 1 4 6;6 7 1 4]
>> [C,ia,ib]=setxor(A,B,rows)
C =
1 1 4 6
1 2 3 4
1 2 3 8
1 2 4 6
ia =
1
2
ib =
2
1
两集合的并集
c = union(a,b) %返回a、b的并集,即c = a∪b。
c = union(A,B,rows) %返回矩阵A、B不同行向量构成的大矩阵,其中相同行向量只取其一。
[c,ia,ib] = union(…) %ia、ib分别表示c中行向量在原矩阵(向量)中的位置
>> A=[1 2 3 4];
>> B=[2 4 5 8];
>> c=union(A,B)
则结果为
c =
1 2 3 4 5 8
>> A=[1 2 3 4;1 2 4 6]
>> B=[1 2 3 8;1 1 4 6]
>> [c,ia,ib]=union(A,B,rows)
c =
1 1 4 6
1 2 3 4
1 2 3 8
1 2 4 6
ia =
1
2
ib =
2
1
取集合的单值元素
b = unique (a) %取集合a的不重复元素构成的向量
b = unique (A,rows) %返回A、B不同行元素组成的矩阵
[b,i,j] = unique (…) %i、j体现b中元素在原向量(矩阵)中的位置
>> A=[1 1 2 2 4 4 6 4 6]
>> [c,i,j]=unique(A)
c =
1 2 4 6
i =
2 4 8 9
j =
1 1 2 2 3 3 4 3 4
Matlab提供了两种除法运算:左除(\)和右除(/)。一般情况下,x=a\b是方程a*x =b的解,而x=b/a是方程x*a=b的解。
例:a=[1 2 3; 4 2 6; 7 4 9]
b=[4; 1; 2];
x=a\b
x=
-1.5000
2.0000
0.5000
如果a为非奇异矩阵,则a\b和b/a可通过a的逆矩阵与b阵得到:
a\b = inv(a)*b
b/a = b*inv(a)
数组除法:
A./B表示A中元素与B中元素对应相除。
矩阵乘方
运算符:^
运算规则:
(1)当A为方阵,P为大于0的整数时,A^P表示A的P次方,即A自乘P次;P为小于0的整数时,A^P表示A-1的P次方。
(2)当A为方阵,p为非整数时,则其中V为A的特征向量,为特征值对角矩阵。如果有重根,以上指令不成立。
(3)标量的矩阵乘方PA,标量的矩阵乘方定义为式中V,D取自特征值分解AV=AD。
(4)标量的数组乘方P.^A,标量的数组乘方定义为数组乘方:A.^P:表示A的每个元素的P次乘方。
方阵指数
Y = expm(A) %使用Pade近似算法计算eA,这是一个内部函数,A为方阵。
Y=expm1(A) %使用一个M文件和内部函数相同的算法计算eA
Y=expm2(A) %使用泰勒级数计算eA
Y=expm3(A) %使用特征值和特征向量计算eA
矩阵的对数
Y = logm(X) %计算矩阵X的对数,它是expm(X)的反函数。
[Y,esterr] = logm(X) %esterr为相对残差的估计值:norm(expm(Y)-X)/norm(X)
>> A=[1 1 0;0 0 2;0 0 -1];
>> Y=expm(A)
Y =
2.7183 1.7183 1.0862
0 1.0000 1.2642
0 0 0.3679
>> A=logm(Y)
A =
1.0000 1.0000 0.0000
0 0 2.0000
0 0 -1.0000
方阵的函数
F = funm(A,fun) %A为方阵,计算由fun指定的A的矩阵函数,fun可以是任意基本函数,如sin、cos等等,例如:funm(A, ’exp’)=expm(A)。
[F,esterr] = funm(A,fun) %esterr为结果所产生的相对误差的估计值。
矩阵的方根
X = sqrtm(A) %矩阵A的平方根A1/2,相当于X*X=A,求X。若A的特征值有非负实部,则X是唯一的;若A的特征值有负的实部,则X为复矩阵;若A为奇异矩阵,则X不存在。
[X,resnorm] = sqrtm(A) % resnorm为结果产生的相对误差
[X,alpha,condest] = sqrtm(A) % alpha为稳定因子,condest为结果的条件数的估计值。
矩阵A的多项式
polyvalm(P, A) %P为多项式系数向量,方阵A为多项式变量,返回多项式值。
矩阵转置
运算符:′
运算规则:若矩阵A的元素为实数,则与线性代数中矩阵的转置相同。
若A为复数矩阵,则A转置后的元素由A对应元素的共轭复数构成。若仅希望转置,则用如下命令:A.′。
方阵的行列式
d = det(X) %返回方阵X的多项式的值
>> A=[1 2 3;4 5 6;7 8 9]
>> D=det(A)
D = 0
求逆矩阵
Y=inv(X) %求方阵X的逆矩阵。若X为奇异阵或近似奇异阵,将给出警告信息。
求的逆矩阵
方法一
>>A=[1 2 3; 2 2 1; 3 4 3];
>>Y=inv(A)或Y=A^(-1)
则结果显示为
Y =
1.0000 3.0000 -2.0000
-1.5000 -3.0000 2.5000
1.0000 1.0000 -1.0000
方法二:由增广矩阵进行初等行变换
>>B=[1, 2, 3, 1, 0, 0; 2, 2, 1, 0, 1, 0; 3, 4, 3, 0, 0, 1];
>>C=rref(B) %化行最简形
>>X=C(:, 4:6) %取矩阵C中的A^(-1)部分
C =
1.0000 0 0 1.0000 3.0000 -2.0000
0 1.0000 0 -1.5000 -3.0000 2.5000
0 0 1.0000 1.0000 1.0000 -1.0000
X =
1.0000 3.0000 -2.0000
-1.5000 -3.0000 2.5000
1.0000 1.0000 -1.0000
>> A=[2 1 -1;2 1 2;1 -1 1];
>> format rat %用有理格式输出
>> D=inv(A)
D =
1/3 0 1/3
0 1/3 -2/3
-1/3 1/3 0
求伪逆矩阵
B = pinv(A) %求矩阵A的伪逆
B = pinv(A, tol) %tol为误差:max(size(A))*norm(A)*eps
说明 当矩阵为长方阵时,方程AX=I和XA=I至少有一个无解,这时A的伪逆能在某种程度上代表矩阵的逆,若A为非奇异矩阵,则pinv(A) = inv(A)。
>> A=magic(5); %产生5阶魔方阵。
>> A=A(:,1:4) %取5阶魔方阵的前4列元素构成矩阵A。
A =
17 24 1 8
23 5 7 14
4 6 13 20
10 12 19 21
11 18 25 2
>> X=pinv(A) %计算A的伪逆
X =
-0.0041 0.0527 -0.0222 -0.0132 0.0069
0.0437 -0.0363 0.0040 0.0033 0.0038
-0.0305 0.0027 -0.0004 0.0068 0.0355
0.0060 -0.0041 0.0314 0.0211 -0.0315
求矩阵的迹
b=trace (A) %返回矩阵A的迹,即A的对角线元素之和。
如何求 矩阵和向量的范数
n = norm(X) %X为向量,求欧几里德范数,即。
n = norm(X,inf) %求-范数,即。
n = norm(X,1) %求1-范数,即。
n = norm(X,-inf) %求向量X的元素的绝对值的最小值,即。
n = norm(X, p) %求p-范数,即,所以norm(X,2) = norm(X)。
n = norm(A) %A为矩阵,求欧几里德范数,等于A的最大奇异值。
n = norm(A,1) %求A的列范数,等于A的列向量的1-范数的最大值。
n = norm(A,2) %求A的欧几里德范数,和norm(A)相同。
n = norm(A,inf) %求行范数,等于A的行向量的1-范数的最大值
n = norm(A, fro ) %求矩阵A的Frobenius范数,
求范数的估计值
nrm = normest(A) %矩阵A的2-范数(欧几里德范数)的估计值,相对误差小于106。
nrm = normest(A,tol) %tol为指定相对误差
[nrm,count] = normest(…) %count给出计算估计值的迭代次数
函数计算器
funtool %该命令将生成三个图形窗口,Figure No.1用于显示函数f的图形,Figure No.2用于显示函数g的图形,Figure No.3为一可视化的、可操作与显示一元函数的计算器界面。在该界面上由许多按钮,可以显示两个由用户输入的函数的计算结果:加、乘、微分等。funtool还有一函数存储器,允许用户将函数存入,以便后面调用。在开始时,funtool显示两个函数f(x) = x与g(x) = 1在区间[-2*pi, 2*pi]上的图形。Funtool同时在下面显示一控制面板,允许用户对函数f、g进行保存、更正、重新输入、联合与转换等操作。
输入命令funtool后,生成的界面如下:
图3-1 函数工具funtool界面
图3-2 函数f的图形 图3-3 函数g的图形
df/dx:函数f的导数;
int f:函数f的积分(没有常数的一个原函数),当函数f的原函数不能用初等函数表示时,操作可能失败;
simple f:化简函数f(若有可能);
num f:函数f 的分子;
den f:函数f的分母;
finv:函数f的反函数,若函数f 的反函数不存在,操作可能失败;
g=f:用函数f(x)代替函数g(x);
swap:函数f(x)与g(x)互换;
Insert:将函数f(x)保存到函数内存列表中的最后;
Cycle:用内存函数列表中的第二项代替函数f(x);
Delete:从内存函数列表中删除函数f(x);
Reset:重新设置计算器为初始状态;
如何求函数的极限
limit(F,x,a) %计算符号表达式F=F(x)的极限值,当x→a时。
limit(F,a) %用命令findsym(F)确定F中的自变量,设为变量x,再计算F的极限值,当x→a时。
limit(F) %用命令findsym(F)确定F中的自变量,设为变量x,再计算F的极限值,当x→0时。
limit(F,x,a,right)或limit(F,x,a,left) %计算符号函数F的单侧极限:左极限x→a- 或右极限x→a+。
>>syms x a t h n;
>>L1 = limit((cos(x)-1)/x)
>>L2 = limit(1/x^2,x,0,right)
>>L3 = limit(1/x,x,0,left)
>>L4 = limit((log(x+h)-log(x))/h,h,0)
>>v = [(1+a/x)^x, exp(-x)];
>>L5 = limit(v,x,inf,left)
>>L6 = limit((1+2/n)^(3*n),n,inf)
计算结果为:
L1 =
0
L2 =
inf
L3 =
-inf
L4 =
1/x
L5 =
[ exp(a), 0]
L6 =
exp(6)
如何求函数的导数(包括偏导数)
diff(S,v,n) %对表达式S中指定的符号变量v计算S的n阶导数。V可有可无,没有时使用findsym().
>>syms x y t
>>D1 = diff(sin(x^2)*y^2,2) %计算
>>D2 = diff(D1,y) %计算
>>D3 = diff(t^6,6)
D1 =
-4*sin(x^2)*x^2*y^2+2*cos(x^2)*y^2
D2 =
-8*sin(x^2)*x^2*y+4*cos(x^2)*y
D3 =
720
如何求对符号函数的积分
R = int(S,v,a,b) %对表达式s中指定的符号变量v计算从a到b的定积分.V可以为findsym(),如果没有a,b就求出不带任何常数的不定积分.
例3-27
>>syms x z t alpha
>>INT1 = int(-2*x/(1+x^3)^2)
>>INT2 = int(x/(1+z^2),z)
>>INT3 = int(INT2,x)
>>INT4 = int(x*log(1+x),0,1)
>>INT5 = int(2*x, sin(t), 1)
>>INT6 = int([exp(t),exp(alpha*t)])
INT1= -2/9/(x+1)+2/9*log(x+1)-1/9*log(x^2-x+1)-2/9*3^(1/2)*atan(1/3*(2*x-1)*… 3^(1/2))-2/9*(2*x-1)/(x^2-x+1)
INT2 =
x*atan(z)
INT3 =
1/2*x^2*atan(z)
INT4 =
1/4
INT5 =
1-sin(t)^2
INT6 =
[ exp(t), 1/alpha*exp(alpha*t)]
如何求常微分方程的符号解
r = dsolve(eq1,eq2,…,cond1,cond2,…,v)
说明 对给定的常微分方程(组)eq1,eq2,…中指定的符号自变量v,与给定的边界条件和初始条件cond1,cond2,….求符号解(即解析解)r;若没有指定变量v,则缺省变量为t;在微分方程(组)的表达式eq中,大写字母D表示对自变量(设为x)的微分算子:D=d/dx,D2=d2/dx2,…。微分算子D后面的字母则表示为因变量,即待求解的未知函数。初始和边界条件由字符串表示:y(a)=b,Dy(c)=d,D2y(e)=f,等等,分别表示,,;若边界条件少于方程(组)的阶数,则返回的结果r中会出现任意常数C1,C2,…;dsolve命令最多可以接受12个输入参量(包括方程组与定解条件个数,当然我们可以做到输入的方程个数多于12个,只要将多个方程置于一字符串内即可)。若没有给定输出参量,则在命令窗口显示解列表。若该命令找不到解析解,则返回一警告信息,同时返回一空的sym对象。这时,用户可以用命令ode23或ode45求解方程组的数值解。
>>D1 = dsolve(D2y – Dy =exp(x))
>>D2 = dsolve(t*D2f = Df*log((Dy)/t))
>>D3 = dsolve((Dy)^2 + y^2 = 1,s)
>>D4 = dsolve(Dy = a*y, y(0) = b) % 带一个定解条件
>>D5 = dsolve(D2y = -a^2*y, y(0) = 1, Dy(pi/a) = 0) % 带两个定解条件
>>[x,y] = dsolve(Dx = y, Dy = -x) % 求解线性微分方程组
>>[u,v] = dsolve(‘Du=u+v,Dv=u-v’)
D1 =
-exp(x)*t+C1+C2*exp(t)
D2 =
y(t)=Int(exp(t*diff(f(t),`$`(t,2))/diff(f(t),t))*t,t)+C1
D3 =
[ -1]
[ 1]
[ sin(s-C1)]
[ -sin(s-C1)]
D4 =
b*exp(a*t)
D5 =
cos(a*t)
x =
cos(t)*C1+sin(t)*C2
y =
-sin(t)*C1+cos(t)*C2
u =
1/2*C1*exp(2^(1/2)*t) - 1/4*C1*2^(1/2)*exp(-2^(1/2)*t) + 1/4*C1*2^(1/2) *exp (2^(1/2)*t) + 1/2*C1*exp(-2^(1/2)*t) - 1/4*C2*2^(1/2)*exp(-2^(1/2)*t) + 1/4*C2 *2^(1/2)*exp(2^(1/2)*t)
v =
-1/4*C1*2^(1/2)*exp(-2^(1/2)*t)+1/4*C1*2^(1/2)*exp(2^(1/2)*t)+1/2*C2*exp
(2^(1/2)*t)+1/4*C2*2^(1/2)*exp(-2^(1/2)*t)-1/4*C2*2^(1/2)*exp(2^(1/2)*t)+ 1/2*C2*exp(-2^(1/2)*t)
符号函数的Taylor级数展开式
r = taylor(f,n,v,a) %返回符号表达式f中的、指定的符号自变量v的n-1阶的Taylor级数(在指定的a点附近v=a)的展开式。其中a可以是一数值、符号、代表一数字值的字符串或未知变量。我们指出的是,用户可以以任意的次序输入参量n、v与a,命令taylor能从它们的位置与类型确定它们的目的。也可以只有f,v=findsym() n(default)=6;a默认只为0.
解析函数f(x)在点x=a的Taylor级数定义为:
Taylor级数计算器
taylortool %该命令生成一图形用户界面,显示缺省函数f=x*cos(x)在区间[-2*pi,2*pi]内的图形,同时显示函数f的前N=7项的Taylor多项式级数和(在a=0附近的)图形,如图1。通过更改f(x)项可得不同的函数图形。
taylortool(f) %对指定的函数f,用图形用户界面显示出Taylor展开式。
如何调用Maple内核
maple(statement) %将参数命令statement传递给Maple内核,且返回计算结果。在必要时,可以在参量statement后面加上分号(;)。
r = maple(function,arg1,arg2,…) %该命令接受任何的带引号的函数名function,与相关的输入参量arg1,arg2,…。在必要时,要将输入参量转换成符号表达式。若输入参量为syms,则maple返回一sym,否则返回一类型为char的结果。
[r, status] = maple(…) %有条件地返回警告/错误信息。当语句能顺利执行,则r为计算结果,status为0;若语句不能通过执行,r为相应的警告/错误信息,而status为一正整数。
maple traceon %将显示所有的后面的Maple语句与其相应的结果显示于屏幕上
maple traceoff %将关闭上面的操作特性
例3-52
>>Pi = maple(evalf(Pi,100))
>>syms x
>>v = [x^2-1;x^2-4]
>>maple traceon
>>w = factor(v)
计算结果为:
Pi =
3.1415926535897932384626433832795028841971693993751058209749445923078164…
06286208998628034825342117068
v =
[ x^2-1]
[ x^2-4]
statement:
map(ifactor,array([[x^2-1],[x^2-4]]));
resul
展开阅读全文