matlab入门教程八 ----- 高等数学运算

来源:互联网 发布:大话设计模式 java 编辑:程序博客网 时间:2024/05/29 16:26

下面大概给出高等数学里面的大概,由于内容太多,当然难以一一列述。

一.求极限
1 : limit ( f ) 功能:计算lim(x→0)f ( x ) ,其中f是符号函数。

2: limit ( f , x , a)           功能:计算lim(x→a) f ( x ) ,其中f是符号函数。
3 : limit ( f , x , inf)         功能:计算lim(x→ ∞) f ( x ) ,其中f是符号函数。
4: limit ( f , x , a ,′right′)  功能:计算lim(x→a+) f ( x ) ,其中f是符号函数。
5: limit ( f , x , a ,′left′)    功能:计算lim(x→a-) f ( x ) ,其中f是符号函数。


注意:在左右极限不相等或左右极限有一个不存在时, Matlab的默认状态为求右极限。

%求(1 + 1/n)^n 趋于无穷
syms n;y = (1 + 1 / n)^n;limit(y, n, inf)

二.导数
%求导
syms x;f = log( x) ; diff(f) %对函数f求导
diff(f, n)表示对函数f求n阶导数

%求下列数据在x = 1处的函数值,一阶导数,二阶导数
x = [ 0.1 0.8 1.3 1.9 2.5 3.1 3.3 3.4 3.6 3.8 ];y = [1.2 1.6 2.7 2.0 1.3 0.5 0.6 0.8 1.0 0.9];p = polyfit (x , y , 10 ) ; %用10次多项式拟合p1 = polyder(p) ; %polyder(x)对x求导p2 = polyder(p1) ; x0 = polyval(p, 1) ; x1 = polyval(p1 ,1 ) ; x2 = polyval(p2, 1) ;%ployval(p, 1)求函数p在1处的值disp(['x = 1','函数值', blanks(3) ,'一阶导', blanks(3) ,'二阶导']);[x0 x1 x2]

三.积分
命令形式
1 : int ( f)     功能:求函数f对默认变量的不定积分,用于函数中只有一个变量。
2 : int ( f, v)     功能:求函数f对变量v的不定积分。
3 : int(f,x, a,b)     功能:求函数f对变量v在[a,b]上面定积分


syms xy = 1/(sin(x)^2 * cos(x)^2) ;int(y); %求不定积分pretty(int(y)); %以手写形式输出


%求面积y = -x.^2 + 115在[0 10]区间面积,按照定义求面积
format short;%把面积分为若干个矩形计算dx = 0.01;x = 0: dx :10; y = -x.^2 + 115;a = sum(y(1:length(x) - 1)) * dx %这里的y从一开始直至length(x)-1; 1对应x = 0处,可以想一下为什么最后是length(x) - 1%功能:用复合梯形公式计算定积分,变量x是积分变量在被积区间上的分点向量, y为被积函数在x处对应的函数值向量b = trapz(x, y) 


四.求和与极值,零点

%求和
a = 1:5sum(a);cumsum(a); %an = a1 + a2 +...anA = [1 2 3; 4 5 6; 7 8 9];sum(A, 1) %或者sum(A)都是表示按列求和,即最后是一个一维矩阵,每个元素是原来该列所有数字和;sum(A, 2) %按行求和cumsum(A); % 按列累加求和,类似上面的一维


%求积 类比上面的求和a = 1:5prod(a);cumprod(a);A = [1 2 3; 4 5 6; 7 8 9];prod(A, 1); %或者prod(A)按列求积;prod(A, 2); %按行求积cumprod(A);


%求零点 fzero(f, x):求函数f在x附近零点
x = - 10: 0.01: 10;y = sin(x) .^2 .*exp ( -0.1*x) -0.5*abs(x) ;plot (x , y ,'r') ; hold on, plot( x, zeros(size(x)),'k--') ; xlabel ('t') ; ylabel('y(t)') , %hold off;disp('通过图形取点')[tt, yy] = ginput (3) %通过图形可以大致看出零点位置,从而在附近选取几个合适点%tt,yy分别记录选取点的行列坐标xzero1 = fzero('sin(x) .^2 .*exp ( -0.1*x) -0.5*abs(x)', tt(1)) ; %这里的函数必须用单引号加函数名,不能用单引号加yxzero2 = fzero('sin(x) .^2 .*exp ( -0.1*x) -0.5*abs(x)', tt(2)) ;xzero3 = fzero('sin(x) .^2 .*exp ( -0.1*x) -0.5*abs(x)', tt(3)) ; %求这三个点附近的零点disp('零点的横坐标')disp( [xzero1 xzero2 xzero3] )%hold onplot(xzero1 , y ,'bp', xzero2 , y,'bp', xzero3, y ,'bp') %把零点在图中画出来legend('y(x)','y = 0','零点') 


求极值

fminbnd

%求极小值 极大值clf;x = -2:0.1: 2;y = gg(x) ; %写的函数文件xmin = fminbnd('gg', -1, 1); %求函数gg在[-1,1]附近极小值%如果需要求极大值,只需要对原函数取负号求极小值,然后便是原函数的极大值plot (x , y ,'b', xmin, gg(xmin) ,'rp'); %把极小值在图像中画出来legend('f(x)','极小点');

上述的函数文件

function y = gg(x)y = 3*2 .^(5*x) .*( x .^2 + cos(x)) - 40;


fminsearch

%fminsearch 求f(x,y) = 100*( y -x^2 )^2 + ( 1 - x))^2在[-1,3]附近极小值ff = inline('100*( x(2) -x(1)^2 )^2 + ( 1 - x(1))^2 ','x') ; %内联函数,有些类似于c++里面的inline,在这是可以不单独写在函数问价里面,直接写在脚本文件发挥函数的作用x0 = [-1, 3]; %对x0区间稍微改动一点就会发现最小值会发生细微变化,解释见下面图像[x,val] = fminsearch(ff, x0)%画出图像可以看出稍微变一下区间,最小值便会发生变化x = -10 : 0.1 : 10;y = -10 : 0.1 : 10;plot3(x, y, 100*( y - x.^2 ).^2 + ( 1 - x).^2 );

%求f(x,y,z) = x^4 + sin(y) - cos(z);在[0,5,4]处极小值x0 = [0, 5, 4 ] ;%与上面相比,x0范围的改动的较大也不会影响下面的最小值,主要由于图形趋势比较明显,所以不会出现上面的稍微改动区间最小值便发生改变ff = inline('x(1)^4 + sin(x(2) ) - cos(x(3))','x') ;[x, fval] = fminsearch(ff, x0);