Matlab从入门到精通(三)

1、求组合数

,则输入:

nchoosek(n,k)

例:nchoosek(4,2) = 6.

2、求阶乘

求n!.则输入:

Factorial(n).

例:factorial(5) = 120.

3、求全排列

perms(x).

例:求x = [1,2,3];

Perms(x),输出结果为:

ans =

     3     2     1

     3     1     2

     2     3     1

     2     1     3

     1     2     3

     1     3     2

4、求指数

求a^b:Power(a,b) ;

例:求2^3 ;

Ans = pow(2,3) ;

5、求向量的指数

求向量p=[1 2 3 4]'的三次方:p.^3

例:

p=[1 2 3 4]'

A=[p,p.^2,p.^3,p.^4]

结果为:

注意:在p与符号”^”之间的”.”不可少.

6、求自然对数

求ln(x):Log(x)

例:log(2) =   0.6931

7、多项式的乘法运算

8、多项式除法

函数[q,r]=deconv(p1,p2)用于多项式p1和p2作除法运算,其中q返回多项式p1除以p2的商式,r返回p1除以p2的余式。这里,q和r仍是多项式系数向量。

9、求一个向量的最大值

求一个向量x的最大值的函数有两种调用格式,分别是:

(1)max(x):返回向量x的最大值,如果x中包含复数元素,则按模取最大值。

(2)[y, i]=max(x):返回向量x的最大值存入y,最大值的序号存入i,如果x中包含复数元素,则按模取最大值。

求向量x的最小值函数是min(x),用法与max(x)完全相同。

10、求和与求积

数据序列求和与求积函数是sum和prod,其使用方法类似。设x是一个向量,A是一个矩阵,函数的调用格式为:

sum(x):返回向量x各元素之和。

Sum(A,1):返回矩阵A的列求和后的行向量

Sum(A,2):返回矩阵A的行求和后的列向量

prod(x):返回向量x各元素的乘积。

sum(A):返回一个行向量,其第i个元素是A的第i列的元素之和。

prod(A):返回一个行向量,其第i个元素是A的第i列的元素乘积。

sum(A,dim):当dim为1时,该函数等同于sum(A);当dim为2时,返回一个列向量,其第i个元素是A的第i行的元素之和。

prod(A,dim):当dim为1时,该函数等同于prod(A);当dim为2时,返回一个列向量,其第i个元素是A的第i行的元素乘积。

cumsum(X):返回一个X中的向量的累计和的向量,也就是第i个元素为恰i-1个元素之和.

cumsum(A):返回一个与A同样大小的矩阵,它的列是A中列的累计和.

【例一】:

a =

 

    -4    -4    -4    -4

 

>> cumsum(a)

 

ans =

 

-4    -8   -12   -16

【例二】:

>> A=[1 2 3;4 5 6;7 8 9];

>> cumsum(A)

 

ans =

 

     1     2     3

     5     7     9

           12    15    18

11、平均值、标准方差及中值

MATLAB提供了mean,std函数来计算平均值、标准方差或方差。这些函数的调用方法如下:

mean(x):返回向量x的算术平均值。

std(x):返回向量x的标准方差。

对于矩阵A,mean函数的一般调用格式为:

y=mean(A,dim)

这里,dim取1或2。当dim=1时,返回一个行向量y,y的第i个元素是A的第i列元素的平均值;当dim=2时,返回一个列向量y,y的第i个元素是A的第i行元素的平均值。

对于矩阵A,std函数的一般调用格式为:

y=std(A,flag,dim)

这里,dim取1或2。当dim=1时,求各列元素的标准方差;当dim=2时,求各行元素的标准方差。flag取0或1,当flag=0时,按计算标准方差;当flag=1时,按计算方差。缺省flag=0,dim=1。

median(X):求向量X中的中值;

median(A.dim):求矩阵A中的第dim维的各列中的中值.

【例一】

>> X = [-2 12 9 20 32 0];

>> median(X)

 

ans =

 

   10.5000

【例二】

>> A = [1 2 3;4 5 6;7  1 0];

>> median(A)

ans =

     4     2     3

12、相关系数

对于两组数据序列,其相关系数的计算, MATLAB提供了corrcoef函数来计算相关系数,corrcoef函数的调用格式为:

r=corrcoef(x,y)

13、排序

对向量元素的进行排序是一种经常性的操作,MATLAB提供了sort函数对向量x进行排序。

y=sort(x):返回一个对x中元素按升序排列后的向量y。

[y,i]=sort(x):返回一个对x中的元素按升序排列的向量y,而i记录y中元素在x中的位置。

14、多项式的求导

对多项式求导数的函数是:

p=polyder(p1):求多项式p1的导函数。

p=polyder(p1,p2):求多项式p1和p2乘积的导函数。

[p,q]=polyder(p1,p2):求多项式p1和p2之商的导函数,p、q是导函数的分子、分母。

例: 求有理分式的导函数。

命令如下:

p1=[1,-1];

p2=[1,-1,3];

[p,q]=polyder(p1,p2)

15、多项式的求值

polyval函数用来求代数多项式的值,其调用格式为:

y=polyval(p,x)

若x为一数值,则求多项式在该点的值;若x为向量,则对向量中的每个元素求其多项式的值。

例: 求多项式在点1,2,3,4的值。

命令如下:

p=[1,2,1];

x=1:4;

y=polyval(p,x)

y =

 

     4     9    16    25

roots函数用来求代数多项式的根,其调用格式为:

x=roots(p)

如果x为向量,则p=poly(x)可以建立一个以x为其根的多项式。

16、多项式的求根

roots函数用来求代数多项式的根,其调用格式为:

x=roots(p)

如果x为向量,则p=poly(x)可以建立一个以x为其根的多项式。

例:求多项式的根。

命令如下:

p=[1,-6,11,-6];

x=roots(p)

x =

    3.0000

    2.0000

    1.0000

如果键入命令p=poly(x),则可得到以3,2,1为根的三次多项式的系数

p =

    1.0000   -6.0000   11.0000   -6.0000

17、单变量非线性方程的求根

MATLAB还提供了一个fzero函数,可以用来求单变量非线性方程的求根。该函数的调用格式为:

z=fzero(‘fname’,x0)

其中fname是待求根的函数文件名,x0为搜索的起点。一个函数可能有多个根,但fzero函数只能给出离x0最近的那个根。

例: 

命令如下:

fzero('x-10^x+2',0.5)

ans =

    0.3758

18、求单变量函数的最小值点

其调用格式为:

x=fminbnd(‘fname’,x1,x2)

这里,fname是目标函数名,x1和x2限定自变量的取值范围,而x0是搜索起点的坐标。

例:求一元函数在[0,5]内的最小值点。

命令如下:

fminbnd('x^3-2*x-5', 0, 5)

ans =

    0.8165

 

19、求多变量函数的最小值点

其调用格式为:

x=fminsearch(‘fname’,x0)

例:

建立函数文件f.m。

function w=f(p)

  x=p(1);

y=p(2);

z=p(3);

  w=x+y^2/(4*x)+z^2/y+2/z;

调用fminsearch函数求多元函数在[1/2,1/2,1/2]附近的最小值点。

w=fminsearch('f ',[1/2,1/2,1/2])

w =

    0.5000    1.0000    1.0000

计算多元函数的最小值。

f(w)

ans =

    4.0000

20、求函数的最大值点

MATLAB没有专门提供求函数最大值点的函数,当需要求函数在区间(a,b)上最大值点时,可将它转化为求-f(x)在(a,b)上的最小值点。

21、建立单个符号量(sym函数)

sym函数用来建立单个符号量,一般调用格式为:

符号变量名=sym(‘符号字符串’)

该函数可以建立一个符号量,符号字符串可以是常量、变量、函数或表达式。

例如,a=sym(‘a’)将建立符号变量a,此后,用户可以在表达式中使用变量a进行各种运算。符号变量a和在其他过程中建立的非符号变量a是不同的。一个非符号变量在参与运算前必须赋值,变量的运算实际上是该变量所对应值的运算,其运算结果是一个和变量类型对应的值,而符号变量参与运算前无须赋值,其结果是一个由参与运算的变量名组成的表达式。下面的命令及其运算结果,说明了符号变量与非符号变量的差别。

在MATLAB命令窗口,输入以下命令:

a=sym('a');         %定义符号变量a,b

b=sym('b');

 

p1=sym('pi');        %定义符号常量

a=sym('3');

b=sym('4');

p2=pi;              %定义数值常量

x=3;

y=4;

sin(p1/3)            %符号计算

ans =

 1/2*3^(1/2)

sin(p2/3)            %数值计算

ans =

    0.8660

cos((a+b)^2)-sin(pi/4)  %符号计算

ans =

 cos(49)-1/2*2^(1/2)

cos((x+y)^2)-sin(pi/4)  %数值计算

ans =

   -0.4065

 

22、建立多个符号量(syms函数)

函数sym一次只能定义一个符号变量,使用不方便。MATLAB提供了另一个函数syms,一次可以定义多个符号变量。syms函数的一般调用格式为:

syms 符号变量名1 符号变量2 … 符号变量n

用这种格式定义符号变量时,变量间用空格而不要用逗号分隔。例如,用syms函数定义4个符号变量a,b,命令如下:

syms a b

23、建立符号表达式

含有符号对象的表达式称为符号表达式。建立符号表达式有以下3种方法:

(1)利用单引号来生成符号表达式。例如

y='1/sqrt(2*x)'

y =

1/sqrt(2*x)

(2)利用sym函数建立符号表达式。例如

z=sym('3*x^2-5*y+2*x*y+6')

z =

 3*x^2-5*y+2*x*y+6

A=sym('[a,b;c,d]')

 A =

 [ a, b]

[ c, d]

第一条命令建立一个符号函数表达式,第二条命令生成一个符号矩阵。

(3)利用已经定义的符号变量组成符号表达式。例如

syms x y;

z=3*x^2-5*y+2*x*y+6

z =

3*x^2-5*y+2*x*y+6

24、符号表达式中变量的确定

利用函数findsym(s)可以确定符号表达式s中的全部符号变量。例如:

syms a b x y;       %定义4个符号变量

c=sym('3');         %定义1个符号常量

s=3*x+y;

findsym(s)

ans =

x, y

findsym(5*x+2)

ans =

x

findsym(a*x+b*y+c) %符号变量c不会出现在结果中

ans =

a, b, x, y

25、符号表达式四则运算

符号表达式的加、减、乘、除和幂运算可分别由函数symadd、symsub、symmul、symdiv和sympow来实现。例如

f='2*x^2+3*x-5'

f =

2*x^2+3*x-5

g='x^2-x+7'

g =

x^2-x+7

symadd(f,g)            %加法运算

ans =

 3*x^2+2*x+2

sympow(f,'2*x')        %乘幂运算

ans =

 (2*x^2+3*x-5)^(2*x)

26、符号表达式的因式分解与展开

符号表达式的因式分解和展开运算,可用函数factor和expand来实现,其调用格式为:

factor(s):对符号表达式s分解因式。

expand(s):对符号表达式s进行展开。

例如:

syms x y;

s1=x^3-6*x^2+11*x-6

s1 =

 x^3-6*x^2+11*x-6

factor(s1)

ans =

 (x-1)*(x-2)*(x-3)

s2=(x-y)*(x+y)

s2 =

 (x-y)*(x+y)

expand(s2)

ans =

 x^2-y^2

27、常量符号表达式与数值表达式之间的转换

利用函数sym可以将数值表达式转换成符号表达式。例如:

sym(1.5)

ans =

 3/2

利用函数eval可以将符号表达式转换成数值表达式。例如:

x='(1+sqrt(5))/2'

x =

(1+sqrt(5))/2

eval (x)

ans =

    1.6180

y='3/2'

y =

3/2

eval (y)

ans =

1.5000

28、极限计算

syms x y a ;

z = exp(-1/(x.^2+y.^2))*sin(x).^2/x.^2*(1+1/y.^2).^(x+a.^2*y.^2);

res = limit(limit(z,x,1/sqrt(y)),y,inf);

syms x y ;

z = (1-cos(x.^2+y.^2))/((x.^2+y.^2)^2*exp(x.^2+y.^2));

res = limit(limit(z,x,0),y,0);

29、符号导数

diff函数用于对符号表达式求导数。该函数的一般调用格式为:

diff(s, x, n):对符号表达式或符号函数s关于x求n阶导数,当n缺省时,表示求一阶导数。

导数:

syms x a;

diff(‘exp(-a*x^2)+x’,x)

syms x y;

z = x*log(x*y);

res1 = diff(z,x);

res2 = diff(diff(res1,y),y);

syms x;

z = x.^2*sin(2*x);

res1 = diff(z,x,50);

syms a b t;

x = a*t.^2 ;

y = b*t.^3 ;

dx = diff(x,t);

dy = diff(y,t);

res = dy/dx ;

30、不定积分与定积分

符号积分由函数int来实现。该函数的一般调用格式为:

int(s,x):以符号表达式或符号函数s为被积函数,x为积分变量,计算不定积分。

int(s, x, a, b):以符号表达式或符号函数s为被积函数,a,b为积分的下限和上限,x为积分变量,计算定积分。a和b可以是两个具体的数,也可以是一个符号表达式,还可以是无穷大。

积分:

syms x;

y=exp(-x^2);

int(y, x, 0, inf)

ans =

 pi^(1/2)/2

syms x ;

z = x.^4/(1+x.^2);

res1 = int(z);

31、符号级数

symsum函数用于求无穷级数的和。该函数的一般调用格式为:

symsum(s, x, n, m)  s是一个符号函数,它是级数通项,x是求和变量,n和m是求和的开始项和未项。

例: 求下列级数之和

级数1:

syms n;

s=1/n^2;

symsum(s, n, 1, inf)

ans =

 1/6*pi^2

级数2:

syms n;

s=(-1)^(n-1)/(2*n-1);

symsum(s, n, 1, inf)

ans =

1/4*pi

32、函数的泰勒展开

taylor函数用于将一个函数展开为幂级数,其调用格式为:

taylor(f , x, n, a)   f是一个符号表达式或符号函数,它表示需要被展开的函数,x是函数自变量,n指需要展开的项数,其缺省值为6,a指定将函数f在x = a处展开,其缺省值为0。

例:求以下函数的泰勒级开式

展开式:

syms x;

f=log(x);

taylor(f, x, 5, 1)

ans =

x-1-1/2*(x-1)^2+1/3*(x-1)^3-1/4*(x-1)^4

33、解线性方程组

求解用符号表达式的代数方程可由函数solve实现,其调用格式为:

x=solve(s, ' x '):求解符号表达式s组成的代数方程,求解变量为x。

[x1,x2,…,xn ]=solve(s1,s2,…,sn, ' x 1', ' x2 ',…, ' x n'):求解符号表达式s1,s2,…,sn组成的方程组,求解变量分别为x1,x2,…,xn。

在MATLAB命令窗口,输入命令:

[x,y,z]=solve('x+a*y+a^2*z=a^3','x+b*y+b^2*z=b^3','x+c*y+c^2*z=c^3','x','y','z')

x =

 b*c*a

y =

 -b*a-c*b-c*a

z =

 a+b+c

【例二】:线性方程组

>>[x,y] = solve('x^2 + x*y + y = 3','x^2 - 4*x + 3 = 0')

34、常微分方程求解

在MATLAB中,用大写字母D表示导数。例如,Dy表示y',D2y表示y'',Dy(0)=5表示y'(0)=5。D3y+D2y+Dy-x+5=0表示微分方程y'''+y''+y'-x+5=0。符号常微分方程求解可以通过函数dsolve来实现,其调用格式为:

dsolve(e,c,v)

该函数求解常微分方程e在初值条件c下的特解。参数v描述方程中的自变量,省略时按缺省原则处理,若没有给出初值条件c,则求方程的通解。

dsolve在求常微分方程组时的调用格式为:

dsolve(e1,e2,…,en,c1,…,cn,v1,…,vn)

该函数求解常微分方程组e1,…,en在初值条件c1,…,cn下的特解,若不给出初值条件,则求方程组的通解,v1,…,vn给出求解变量。

【例一】求下列微分方程的解

方程:

[x,y]=dsolve('Dx=4*x-2*y','Dy=2*x-y','t')

x =

-1/3*C1+4/3*C1*exp(3*t)-2/3*C2*exp(3*t)+2/3*C2

y =

 2/3*C1*exp(3*t)-2/3*C1+4/3*C2-1/3*C2*exp(3*t)

y=dsolve('Dy=2*x*y^2','y(0)=1','x')

y =

 -1/(x^2-1)

【例三】

>> dsolve('(Dy)^2 + y^2 = 1','s')

 

ans =

 

               1

              -1

 cosh(C10 + s*i)

 cosh(C14 - s*i)

说明:cosh(x)为双曲余弦函数,cosh(x)=(exp(x)-exp(-x))/2.

 

35、测量字符串向量的维数

例:s='this',

dim=size(s),得

dim=

     1  4

36、ASCⅡ值与字符的相互转换

【1】字符转换成ASCII值

例如:s='this',

ascCode=abs(s),得

ascCode=

        116 104 105 115

【2】ASCII转换成字符

a=[50 97 102];

char(a)=

2af

或者使用setstr函数

setstr(a)=

         2af

37、使整数型向量、字符向量以字符形式显示

例如:键入setstr(ascCode),则显示结果为

ans=

    this

注:ascCode为上题中的ascCode

38、将数值转化成字符串

num2str函数

例如:num2str(2);结果为’2’

39、求向量或者矩阵的模

norm(X):求向量x的模;

norm(A)求矩阵所有元素的模.

【例一】:

>> X = [1 2 3 4];

>> norm(X)

 

ans =

 

    5.4772

 

>> sqrt(sum(X.^2))

 

ans =

 

5.4772

【例二】:

>> A = [1 2 3;4 5 6;7  1 0];

>> norm(A)

 

ans =

 

   10.4748

41、三角函数

sin/asin    正弦/反正弦函数    sec/asec    正割/反正割函数

sinh/asinh    双曲正弦/反双曲正弦函数    sech/asech    双曲正割/反双曲正割函数

cos/acos    余弦/反余弦函数    csc/acsc    余割/反余割函数

cosh/acosh    双曲余弦/反双曲余弦函数    csch/acsch    双曲余割/反双曲余割函数

tan/atan    正切/反正切函数    cot/acot    余切/反余切函数

tanh/atanh    双曲正切/反双曲正切函数    coth/acoth    双曲余切/反双曲余切函数

atan2    四个象限内反正切函数

42、指数函数

exp    指数函数    log10    常用对数函数

log    自然对数函数    sqrt    平方根函数

43、复数函数

abs    绝对值函数    imag    求虚部函数

angle    角相位函数    real    求实部函数

conj    共轭复数函数

44、数值处理

fix    沿零方向取整    round    舍入取整

floor    沿-∞方向取整    rem    求除法的余数

ceil    沿+∞方向取整    sign    符号函数

45、其它数学特殊函数

airy    airy函数    erfcx    比例互补误差函数

besselh    bessel函数(hankel函数)    erfinv    逆误差函数

bessili    改进的第一类bessel函数    expint    指数积分函数

besselk    改进的第二类bessel函数    gamma    gamma函数

besselj    第一类bessel函数    gammainc    非完全gamma函数

bessely    第二类bessel函数    gammaln    gamma对数函数

beta    beta函数    gcd    最大公约数

betainc    非完全的beta函数    lcm    最小公倍数

betaln    beta对数函数    log2    分割浮点数

elipj    Jacobi椭圆函数    legendre    legendre伴随函数

ellipke    完全椭圆积分    pow2    基2标量浮点数

erf    误差函数    rat    有理逼近

erfc    互补误差函数    rats    有理输出

46、求符号表达式的值

subs函数可以对符号表达式求值.

>> syms x y ;

>> z = sym('x^2 + y^2');

>> subs(z,{x,y},{1,1})

 

ans =

 

     2

 

>> subs(z,x,1)

 

ans =

 

y^2 + 1

>> subs(z,y,2)

 

ans =

 

x^2 + 4

>> subs(z,{x,y},{1,2})

 

ans =

 

     5

>> subs(z,{x,y},{[1 2 3],[2 -1 0]})

 

ans =

 

     5     5     9

注意:符号表达式中的符号必须是事先声明的符号变量。如果上例中的紫色标记就、语句没有的话,则不能对表达式进行求解。

47、简化符号表达式

  1. simplify(s):应用函数规则对s进行化简。
  2. simple(s):调用MATLAB的其他函数对表达式进行综合化简,并显示化简过程。

 

simplify函数可以简化符号表达式.

>> syms x f ;

>> f = log(x + sqrt(1 + x^2))

 

f =

 

log(x + (x^2 + 1)^(1/2))

 

>> diff(f,x,1)

 

ans =

 

(x/(x^2 + 1)^(1/2) + 1)/(x + (x^2 + 1)^(1/2))

 

>> simplify(ans)

 

ans =

 

1/(x^2 + 1)^(1/2)

48、非线性方程组数值求解

48.1  fzero函数

在MATLAB中提供了一个fzero函数,可以用来求单变量非线性方程的根。该函数的调用格式为:

    z=fzero('fname',x0,tol,trace)

其中fname是待求根的函数文件名,x0为搜索的起点。一个函数可能有多个根,但fzero函数只给出离x0最近的那个根。tol控制结果的相对精度,缺省时取tol=eps,trace指定迭代信息是否在运算中显示,为1时显示,为0时不显示,缺省时取trace=0。

【例】

>> fzero('x-10^x+2',0.5)

 

ans =

 

0.3758

48.2  fsolve函数

对于非线性方程组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’。

【例】

>> fsolve('x-10^x+2',0.5',optimset('Display','off'))

 

ans =

 

0.3758

49、定积分及重积分计算

49.1辛普生法

基于变步长辛普生法,MATLAB给出了quad函数来求定积分。该函数的调用格式为:

    [I,n]=quad('fname',a,b,tol,trace)

其中fname是被积函数名。a和b分别是定积分的下限和上限。tol用来控制积分精度,缺省时取tol=0.001。trace控制是否展现积分过程,若取非0则展现积分过程,取0则不展现,缺省时取trace=0。返回参数I即定积分值,n为被积函数的调用次数。

注:quadl不能不能用无穷大符号inf.

【例一】

[S,n]=quad('1./(1+x.^2)',-1,sqrt(3))

S =

    1.8326

 

n =

37

【例二】

%%%%%%%%%%%%%%fesin.m%%%%%%%%%%%%%%

function f=fesin(x)

f=exp(-0.5*x).*sin(x+pi/6);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

[S,n]=quad('fesin',0,3*pi)

S =

   0.9008

n =

77

syms x;

z = @(x) log(1+tan(x));

res1 = quadl(z,0,pi/4);

49.2牛顿—柯西斯特法

基于牛顿-柯特斯法,MATLAB给出了quad8函数来求定积分。该函数的调用格式为:

[I,n]=quadl('fname',a,b,tol,trace)

其中参数的含义和quad函数相似,只是tol的缺省值取10-6。该函数可以更精确地求出定积分的值,且一般情况下函数调用的步数明显小于quad函数,从而保证能以更高的效率求出所需的定积分值。

【例】

>> quadl('x.*sin(x)./(1+cos(x).*cos(x))',0,pi)

 

ans =

 

2.4674

49.3二重积分的计算

二重积分数值计算的调用函数为 dblquad( ),

对于矩形区域的二重积分的数值解,调用格式如下:

dblquad(f,x0,x1,y0,y1), f为被积函数,x0,x1 为积分变量x的下限与上限,y0,y1 为积分变量y的下限与上限.

z = inline('exp(-x.^2/2).*sin(x.^2+y)','x','y');

res = dblquad(z,-2,2,-1,1);

ans=  1.5745

注意积分变量的次序

fh=inline('sqrt(1-x.^2/2)','x');  % 内积分上限

fl=inline('-sqrt(1-x.^2/2)','x'); % 内积分下限

f=inline('exp(-x.^2/2).*sin(x.^2+y)','y','x');  % 交换顺序的被积函数

s=quad2dggen(f,fl,fh,-1/2,1,eps)

注:对于一般区域上的二重积分的数值计算,matlab没有提供调用函数,但可以使用美国学者开发的数值积分工具箱里的函数quad2dggen( ).

49.4计算三重积分

三重积分用函数triplequad来计算.

使用格式:

q = triplequad(fun,xmin,xmax,ymin,ymax,zmin,zmax,tol,method)

说明:第一个参数为定义的被积函数;xmin,xmax为积分变量x的上下限,其它四个同理;tol表示积分精度;method表示计算一元积分调用的函数.

h = inline('4*x.*z.*exp(-x.*x.*y-z.*z)','x','y','z');

res = triplequad(h,0,1,0,pi,0,pi);

ans = 1.7328

50、求内积与卷积

(1)求内积:dot(x,y);%x,y为向量

(2)求卷积:conv(x,y);%x,y为向量

已标记关键词 清除标记
相关推荐
本帖代码和教程有Matlab技术论坛原创,原帖参见http://www.matlabsky.com/viewthread.php?tid=3885 一、数值积分基本公式 数值求积基本通用公式如下 Eqn1.gif (1.63 KB) 2009-11-20 23:23 xk:求积节点 Ak:求积系数,与f(x)无关 数值积分要做的就是确定上式中的节点xk和系数Ak。可以证明当求积系数Ak全为正时,上述数值积分计算过程是稳定。 二、插值型数值积分公式 对f(x)给定的n+1个节点进行Lagrange多项式插值,故 Eqn2.gif (2.95 KB) 2009-11-20 23:23 即求积系数为 Eqn3.gif (3.29 KB) 2009-11-20 23:23 、牛顿-柯特斯数值积分公式 当求积节点在[a,b]等间距分布时,插值型积分公式先使用Lagrange对节点进行多项式插值,再计算求积系数,最后求积分称为Newton-Cotes积分公式。 由于Newton-Cotes积分是通过Lagrange多项式插值变化而来的,我们都知道高次多项式插值会出现Runge振荡现象,因此会导致高阶Newton-Cotes公式不稳定。 Newton-Cotes积分公式的求积系数为 Eqn4.gif (3.38 KB) 2009-11-20 23:28 其中C(k,n)称为柯特斯系数。 (1)当n=1时,Newton-Cotes公式即为梯形公式 Eqn5.gif (1.68 KB) 2009-11-20 23:28 容易证明上式具有一次代数精度(对于Newton-Cotes积分公式,n为奇数时有n次迭代精度,n为偶数时具有n+1次精度,精度越高积分越精确,同时计算量也越大) (2)当n=2时,Newton-Cotes公式即为辛普森(Simpson)公式或者抛物线公式 Eqn6.gif (2.04 KB) 2009-11-20 23:28 上式具有3次迭代精度 (3)当n=4时,Newton-Cotes公式称为科特斯(Cotes)公式 Eqn7.gif (2.68 KB) 2009-11-20 23:28 上式具有5次迭代精度。由于n=3和n=2时具有相同的迭代精度,但是n=2时计算量小,故n=3的Newton-Cotes积分公式用的很少 (4)当≥8时,通过计算可以知道,在n=8时柯特斯系数出现负值 由于数值积分稳定的条件是求积系数Ak必须为正,所以n>=8以上高阶Newton-Cotes公式,我们不能保证积分的稳定性(其根本原因是,Newton-Cotes公式是由Lagrange插值多项推导出来的,而高阶多项式会出现Rung现象)。 四、复化求解公式 n阶Newton-Cotes公式只能有n+1个积分节点,但是高阶Newton-Cotes公式由不稳定。为了提高大区间的数值积分精度,我们采用了分段积分的方法,即先将原区间划分成若干小区间,然后对每一个小区间使用Newton-Cotes积分公式,这就是复化Newton-Cotes求积公式。 (1)当n=1时,称为复化梯形公式。将[a,b]等分为n份,子区间长度为h=(b-a)/n,则复化梯形公式为 (注意:复化求解公式不需要求积子区间等间距,只是Newton-Cotes公式分段积分时自动对小区间进行等分,我们这里采用等分子区间是为了便于计算而已) Eqn8.gif (2.18 KB) 2009-11-20 23:28 (2)当n=2时,称为复化辛普森公式。 Eqn9.gif (2.96 KB) 2009-11-20 23:28 五、Newton-Cotes数值积分公式Matlab代码
MATLAB从入门到精通配套光盘 目录 第1章 MATLAB7.x概述 1.1 MATLAB简介 1.1.1 MATLAB的发展 1.1.2 MATLAB的主要特点 1.2 MATLAB7.x的安装 1.3 MATLAB7.x的运行环境 1.3.1 MATLAB7.x的启动 1.3.2 MATLAB7.x工作环境 1.3.3 命令窗口(CommandWindow) 1.3.4 历史命令(HistoryCommand)窗口 1.3.5 目录和文件管理 1.3.6 搜索路径管理 1.3.7 工作空间和数组编辑器 1.3.8 工作空间数据的保存 1.4 MATLAB7.x的帮助系统 1.4.1 命令行帮助查询 1.4.2 演示帮助查看 1.4.3 内容帮助浏览 1.4.4 索引方式查询帮助文件 1.4.5 查询帮助文件 1.5 本章小结 第2章 MATLAB基础知识 2.1 MATLAB计算的介绍 2.1.1 简单的计算示例 2.1.2 基本的数学运算符号 2.1.3 命令行中的常用标点 2.1.4 命令窗口中的常用操作和编辑命令 2.1.5 命令窗口的显示 2.2 数值、变量和表达式 2.3 数值数据类型 2.3.1 整数 2.3.2 浮点数 2.3.3 整型浮点数间的操作函数 2.3.4 复数 2.3.5 常见的数学函数 2.4 数组 2.4.1 一维数组的创建 2.4.2 多维数组创建 2.4.3 数组的运算 2.4.4 常用的标准数组 2.4.5 低维数组的寻址和搜索 2.4.6 低维数组的处理函数 2.4.7 高维数组的处理和运算 2.5 单元数组和结构体 2.5.1 单元数组的创建和操作 2.5.2 单元数组函数 2.5.3 结构体创建 2.5.4 结构体函数 2.6 字符串 2.6.1 字符串创建和简单操作 2.6.2 正则表达式搜索字符串 2.7 关系和逻辑运算 2.7.1 关系运算符 2.7.2 逻辑运算符 2.7.3 关系和逻辑函数 2.8 本章小结 第3章 矩阵运算 3.1 矩阵函数和特殊矩阵 3.1.1 常见的矩阵处理函数 3.1.2 特殊矩阵 3.1.3 稀疏矩阵 3.2 矩阵分析 3.2.1 范数分析 3.2.2 条件数分析 3.2.3 矩阵的行列式 3.3 线性方程组 3.3.1 恰定方程组 3.3.2 欠定方程组 3.3.3 超定方程组 3.4 矩阵分解 3.4.1 Cholesky分解 3.4.2 不完全Cholesky分解 3.4.3 LU分解 3.4.4 不完全LU分解 3.4.5 QR分解 3.4.6 奇异值分解 3.5 特征值分析 3.5.1 特征值和特征向量 3.5.2 稀疏矩阵的特征值和特征向量 3.5.3 特征值的条件数 3.5.4 特征值的复数问题 3.6 本章小结 第4章 MATLAB7.x编程基础 4.1 M文件编辑器 4.1.1 打开M文件编辑器 4.1.2 M文件编辑器的设置 4.1.3 M文件编辑器的打印属性设置 4.2 M脚本文件的编写 4.3 流程控制 4.3.1 for循环结构 4.3.2 while循环结构 4.3.3 if判断结构 4.3.4 switch分支选择结构 4.3.5 try-catch结构 4.4 控制命令 4.4.1 continue命令 4.4.2 break命令 4.4.3 return命令 4.4.4 input命令 4.4.5 keyboard命令 4.4.6 error和warning命令 4.5 程序的向量化概念 4.5.1 程序的向量化 4.5.2 向量化和循环结构的对比 4.5.3 逻辑数组和向量化 4.6 M函数文件 4.6.1 函数文件的创建 4.6.2 伪码文件 4.6.3 输入输出参数 4.6.4 任意个数输入输出参数 4.6.5 函数句柄和匿名函数 4.7 程序的调试和剖析 4.7.1 程序调试的常见错误 4.7.2 直接调试方法 4.7.3 通过工具调试 4.7.4 M文件剖析 4.8 本章小结 第5章 数据可视化 5.1 图形绘制示例 5.2 二维图形绘制 5.2.1 plot函数 5.2.2 线型、标记和颜色 5.2.3 图形坐标轴设置 5.2.4 多个图形叠绘及多个图形窗口 5.2.5 子图绘制 5.2.6 交互式绘图和屏幕刷新 5.2.7 plotyy函数绘制双坐标轴 5.2.8 easy绘图命令 5.3 维图形绘制 5.3.1 曲线图绘制 5.3.2 网格图绘制 5.3.3 曲面图的绘制 5.3.4 绘制等值线图 5.4 四维图形可视化 5.4.1 slice切片命令 5.4.2 其他slice函数 5.4.3 等值面图绘制 5.5 复数变量图形绘制 5.6 特殊图形绘制 5.6.1 area区域绘图 5.6.2 pie饼图绘制 5.6.3 直方图和梯形图 5.6.4 矢量分布图绘制 5.6.5 误差线图形绘制 5.6.6 离散数据绘制 5.6.7 伪色彩图绘制 5.6.8 极坐标图形绘制 5.7 图形的打印输出 5.8 本章小结 第6章 数据分析 6.1 数据插值 6.1.1 一维插值 6.1.2 二维插值 6.1.3 样条插值 6.2 曲线拟合 6.3 图形界面曲线拟合 6.3.1 曲线拟合示例 6.3.2 拟合残差图形绘制 6.3.3 数据预测 6.4 傅里叶分析 6.4.1 离散傅里叶变换 6.4.2 傅里叶变换相关的常用函数 6.4.3 傅里叶级数 6.4.4 使用FFT进行插值 6.5 优化问题 6.5.1 非线性无约束优化 6.5.2 约束条件下的非线性优化 6.5.3 最小最大值的优化问题 6.5.4 线性规划求解 6.6 常微分方程 6.6.1 常微分方程介绍 6.6.2 常微分方程求解 6.6.3 加权常微分方程 6.6.4 延迟微分方程 6.6.5 常微分方程的边界问题 6.7 函数的零点问题 6.7.1 一元函数的零点 6.7.2 多元函数的零点 6.8 数值积分 6.8.1 一元函数的数值积分 6.8.2 多重数值积分 6.9 概率论和数理统计 6.9.1 概率分布 6.9.2 数据分布分析 6.9.3 假设检验 6.10 本章小结 第7章 符号计算 7.1 符号对象和符号表达式 7.1.1 符号对象的创建命令 7.1.2 符号对象的创建示例 7.1.3 符号计算中的运算符和函数 7.1.4 符号对象的类别识别命令 7.1.5 符号表达式中的变量确定 7.1.6 符号精度计算 7.2 符号表达式操作 7.3 符号表达式的替换 7.4 符号函数的操作 7.4.1 反函数操作 7.4.2 复合函数操作 7.5 符号微积分 7.5.1 级数求和 7.5.2 符号极限 7.5.3 符号微分 7.5.4 符号积分 7.6 符号积分变换 7.6.1 傅里叶变换及其反变换 7.6.2 拉普拉斯变换及其反变换 7.6.3 Z变换及其反变换 7.7 符号代数方程求解 7.8 符号微分方程求解 7.9 利用Maple进行符号计算 7.9.1 Maple函数的使用 7.9.2 Maple经典函数的调用 7.9.3 Maple库函数的帮助 7.10 符号分析可视化 7.10.1 funtool分析界面 7.10.2 taylortool分析界面 7.11 本章小结 第8章 Simulink仿真系统 8.1 Simulink基础知识 8.1.1 Simulink的启动 8.1.2 Simulink创建仿真示例 8.1.3 模块库浏览器 8.1.4 Simulink模型窗口 8.1.5 模型窗口的菜单栏 8.2 Simulink模型操作 8.2.1 Simulink模型的原理 8.2.2 模块的操作 8.2.3 信号线的操作 8.3 Simulink信号 8.3.1 常见的信号 8.3.2 复数信号 8.3.3 虚拟信号和信号总线 8.3.4 创建信号组 8.3.5 自定义信号源 8.4 常用的Sink模块 8.5 Simulink仿真系统的设置 8.5.1 解算器(Solver)的设置 8.5.2 仿真数据的输入输出设置 8.5.3 仿真诊断设置 8.6 线性连续系统建模 8.6.1 使用积分模块 8.6.2 使用积分器求解微分方程 8.6.3 传递函数进行仿真 8.6.4 状态空间方法进行系统仿真 8.7 非线性连续系统建模 8.7.1 非线性仿真系统建模简介 8.7.2 任意非线性函数的仿真 8.8 封装子系统创建和受控执行 8.8.1 使用模块组合子系统 8.8.2 通过子系统模块创建子系统 8.8.3 封装子系统 8.8.4 使能控制子系统 8.8.5 触发控制子系统 8.9 离散时间系统和混合系统 8.10 命令方式运行Simulink 8.11 本章小结 第9章 句柄图形 9.1 句柄图形体系 9.1.1 图形对象 9.1.2 句柄对象 9.1.3 对象属性 9.1.4 图形对象句柄创建示例 9.2 图形对象创建 9.2.1 创建图形对象 9.2.2 访问图形对象句柄 9.2.3 使用句柄操作图形对象 9.3 图形对象设置 9.3.1 用set命令设置属性 9.3.2 图形的默认属性 9.3.3 句柄图形的通用属性 9.4 高级绘图对象 9.4.1 Nextplot属性 9.4.2 Newplot命令 9.4.3 高级绘图命令 9.5 坐标轴对象 9.5.1 坐标轴的几何属性 9.5.2 坐标轴的刻度属性 9.5.3 坐标轴的照相机属性 9.5.4 坐标轴的尺度、方向属性 9.6 本章小结 第10章 图形用户界面 10.1 图形用户界面介绍 10.2 图形用户界面控件 10.2.1 图形用户界面控件的创建 10.2.2 鼠标动作执行 10.2.3 事件队列的执行顺序 10.2.4 回调函数的编写 10.3 对话框对象 10.4 界面菜单 10.5 编写M文件 10.6 图形界面创建工具GUIDE 10.6.1 GUIDE的启动 10.6.2 创建图形用户界面对象 10.6.3 设置组件的属性 10.6.4 编写回调函数 10.6.5 图形用户界面的执行 10.6.6 GUIDE创建的工具 10.6.7 创建带UIcontrol控件的图形界面 10.6.8 创建带菜单和坐标轴的图形界面 10.7 本章小结 第11章 文件读取I/O 11.1 工作空间数据读取 11.2 数据文件的导入和导出 11.3 底层文件读取I/O 11.4 文件名称处理 11.5 处理二进制文件 11.5.1 读取M文件 11.5.2 读取文本文件 11.5.3 写入文本文件 11.6 处理文本文件 11.6.1 使用csvread读取文本文件 11.6.2 使用dlmread读入数据 11.6.3 使用textread读入文件 11.6.4 使用textscan读入数据 11.6.5 使用csvwrite输出文本数据 11.6.6 使用dlmwrite输出数据 11.7 图像文件读入和输出 11.7.1 图像文件读入 11.7.2 图像文件输出 11.8 本章小结 第12章 MATLAB7.x的编译器 12.1 编译器概述 12.2 编译器的安装和配置 12.2.1 安装前提 12.2.2 编译器的安装 12.2.3 配置编译器 12.3 编译过程 12.3.1 安装MCR 12.3.2 MCR编译过程 12.4 编译命令 12.5 编译生成独立运行程序 12.5.1 编译M文件 12.5.2 M文件和C文件的混合编译 12.5.3 编译图形绘制M文件 12.6 调用M文件中的函数接口 12.7 编译生成共享库函数 12.8 本章小结 第13章 应用程序接口 13.1 C语言MEX文件 13.1.1 MEX文件的数据 13.1.2 C-MEX文件的调用 13.1.3 创建MEX文件 13.2 FORTRAN语言的MEX文件 13.2.1 FORTRAN-MEX函数的调用 13.2.2 MEX函数 13.3 MAT文件 13.3.1 MAT函数 13.3.2 C语言创建MAT文件 13.3.3 FORTRAN语言创建MAT文件 13.4 MATLAB的引擎技术 13.4.1 MATLAB引擎技术介绍 13.4.2 创建使用引擎技术程序 13.5 Java语言接口 13.5.1 MATLAB中的Java接口 13.5.2 Java接口程序应用 13.6 本章小结
©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页