MATLAB在高等数学中的应用
(一)求极限
matlab中求极限的命令为
limit(expr, x, a)
limit(expr, a)
limit(expr)
limit(expr, x, a, 'left')
limit(expr, x, a, 'right')
其中,limit(expr, x, a)表示求符号表达式expr关于符号变量x趋近于a时的极限;limit(expr)表示求默认变量趋近于0时的极限。
关于left和right则表示左极限和右极限。
clc,clear;
syms x
b = limit(sqrt(1+x^2)-1)/(1-cos(x))
b =
0
clc,clear;
syms x a
b = limit((1+a/x)^x,x, inf)
b =
exp(a)
(二)求导数
matlab的求导数命令为
diff(expr)
diff(expr, v)
diff(expr, sym('v'))
diff(expr, n)
diff(expr, v, n)
diff(expr, n, v)
其中:diff(expr)表示求表达式expr,关于默认变量的1阶导数;diff(expr, v, n)和diff(expr, n, v)都表示求表达式expr关于符号变量v的n阶导数。
clc, clear;
syms y(x)
y = log((x+2)/(1-x));
d3y = diff(y,3)
d3y = simplify(d3y)%对符号函数进行化简
pretty(d3y)%分数线居中显示
d3y =
(2*(1/(x - 1) - (x + 2)/(x - 1)^2)*(x - 1))/(x + 2)^3 - (2*(2/(x - 1)^2 - (2*(x + 2))/(x - 1)^3))/(x + 2) - (2*(1/(x - 1) - (x + 2)/(x - 1)^2))/(x + 2)^2 + (2*(2/(x - 1)^2 - (2*(x + 2))/(x - 1)^3)*(x - 1))/(x + 2)^2 + ((6/(x - 1)^3 - (6*(x + 2))/(x - 1)^4)*(x - 1))/(x + 2)
d3y =
-(18*(x^2 + x + 1))/(x^2 + x - 2)^3
2
(x + x + 1) 18
- ---------------
2 3
(x + x - 2)
(2)求向量a = [0 0.5 2 4]的一阶向前差分。
clc, clear;
a = [0 0.5 2 4];
da = diff(a)
da =
0.500000000000000 1.500000000000000 2.000000000000000
(3)求矩阵b=的一阶差分。
b = [1 2 3;9 8 7;4 5 6];
diff(b)
ans =
8 6 4
-5 -3 -1
关于矩阵元素的差分运算理解如下:
顾名思义,就是在矩阵中,一行(一列)的元素与上一行(上一列)对应元素的差值,依次排列在上一行(上一列)元素对应所在位置。矩阵元素的差分分为行差分和列差分,第一行和第一列不做差分计算。
上述的定义是定义一介差分计算,若进行多介矩阵元素的差分计算,仅需要进行迭代计算即可。
在matlab中差分运算的理解如下:
Y = diff(X) 对数组的第一维来计算相邻 X的差值(要求长度不能为1)
- (1)如果 X 是一个 m长度的向量, 那么Y = diff(X) 返回一个 m-1长度的向量。 Y 的元素是相邻 X的差值。Y = [X(2)-X(1) X(3)-X(2) ... X(m)-X(m-1)]。
- (2)如果X是一个非空,非向量的p*m 矩阵,那么Y = diff(X) 返回(p-1)*m的矩阵,矩阵的元素是X每一行元素间的差值。Y = [X(2,:)-X(1,:); X(3,:)-X(2,:); ... X(p,:)-X(p-1,:)](X(2,:)-X(1,:)代表第2行减第1行)。
- (3)如果X 是一个零矩阵, 那么Y = diff(X) 返回零矩阵。Y = diff(X,n) 通过迭代计算diff(X) n次来计算第n次的差值。事实上,这就意味着diff(X,2) 等价于diff(diff(X))。Y = diff(X,n,dim) 对 dim所指定的维来计算n次差值。 这个dim参数是一个正整数标量。
(三)求极值
求函数f(x) = x^3+6*x^2+8*x-1的极值点,并画出函数的图形。
解:对这类问题一般的求解方式为对f(x)求导,然后令导函数等于零,解方程则可求得函数f(x)的极值点。
clc,clear;
syms x
y = x^3+6*x^2+8*x-1;
dy = diff(y);
dy_zero = solve(dy)
dy_zero_num = double(dy_zero)%变成数值类型
ezplot(y)%符号函数画图
dy_zero =
- (2*3^(1/2))/3 - 2
(2*3^(1/2))/3 - 2
dy_zero_num =
-3.154700538379252
-0.845299461620748
(四)求积分
1.求不定积分
Matlab求符号函数不定积分的命令为
int(expr)
int(expr, v)
例:求不定积分
clc,clear;
syms x
I = int(1/(1+sqrt(1-x^2)))
pretty(I)
结果为:
I =
(x*asin(x) + (1 - x^2)^(1/2) - 1)/x
2
x asin(x) + sqrt(1 - x ) - 1
----------------------------
x
2.求定积分
1)求定积分的符号解
Matlab求fuha符号函数的定积分命令为
int(expr, a, b)
int(expr, v, a, b)
例:求定积分
clc,clear;
syms x
I = int(cos(x)*cos(2*x), -pi/2, pi/2)
结果为:
I =
2/3
2)求定积分的数值解
例:求下列积分的数值解
(1)做变量替换x = 1/t,dx = -1/t^2dt, 得
clc, clear;
I = quadl(@(t)(t-3*t.^2+2*t.^3).^(-1/3),eps,0.5)
结果为
I =
1.439615969001624
(2)
clc, clear;
I = dblquad(@(x,y)sqrt(1-x.^2-y.^2).*(x.^2+y.^2<=x), 0, 1, -0.5, 0.5)
结果为
I =
0.602782455784300
(3)
clc, clear;
fun3 = @(x,y,z)z.^2*log(x.^2+y.^2+z.^2+1)./(x.^2+y.^2+z.^2+1).*(z>=0&z<=sqrt(1-x.^2-y.^2));
I = triplequad(fun3, -1, 1, -1, 1, 0, 1)
结果为
I =
0.127302323127225
(五)级数求和
Matlab级数求和的命令为
r = symsum(expr, v)
r = symsum(expr, v, a, b)
其中:expr为级数的tong通项表达式;v是求和变量;a和b分别为求和变量的起始点和终止点,若没有zhim指明a和b,则a的默认值为0,b的默认值为v-1.
例:求如下级数的和
clc, clear;
syms n
f1 = (2*n-1)/2^n;
s1 = symsum(f1, n, 1, inf)
结果为
s1 =
3
clc, clear;
syms n
f2 = 1/n^2;
s2 = symsum(f2, n, 1, inf)
结果为
s2 =
pi^2/6