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

xiaoxiao2021-02-28  149

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

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

%求积 类比上面的求和 a = 1:5 prod(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)) ; %这里的函数必须用单引号加函数名,不能用单引号加y xzero2 = 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 on plot(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);

转载请注明原文地址: https://www.6miu.com/read-41988.html

最新回复(0)