MATLAB与高等数学--导数计算与极值的求解
diff命令
通过调用diff
命令来计算符号导数:
octave:2> syms x t;
Symbolic pkg v2.8.0: Python communication link active, SymPy v1.5.
octave:3> f = x^2;
octave:4> g = sin(10*t);
octave:5> diff(f)
ans = (sym) 2⋅x
octave:6> diff(g)
ans = (sym) 10⋅cos(10⋅t)
要想得到高阶导数,使用:
diff(f,n);
让我们来看一个例子,求它的二阶导数:
octave:8> clear
octave:9> syms t;
octave:10> f = t.*exp(-3*t);
octave:11> diff(f,2)
ans = (sym)-3⋅t3⋅(3⋅t - 2)⋅ℯ
我们可以看到diff
返回求导结果,因此我们可以把结果赋值给另一个变量,以便后面使用,让我们再看一个例题:
首先让我们做一些定义:
octave:13> clear
octave:14> syms x;
octave:15> f = x.^2;
octave:16> g = 2*x;
接下来让我们计算所需的导数:
octave:17> h = diff(f)
h = (sym) 2⋅x
最后检验:
octave:18> -h+g
ans = (sym) 0
例题:
定义函数:
octave:20> syms t;
octave:21> y = 3*sin(t)+7;
octave:22> f = -5*cos(2*t);
然后检查两边是否相等:
octave:23> a = diff(y,2)+y
a = (sym) 7
octave:24> isequal(a,f)
ans = 0
由于返回0,所以y
不是此方程的解。
例题:
octave:26> clear
octave:27> syms x;
octave:28> f = x.^3-3*x.^2+3*x;
octave:29> ezplot(f,[0 2])
要求出最大值和最小值,我们要对函数求导并找出零点:
octave:30> g = diff(f)
g = (sym)2 3⋅x - 6⋅x + 3
可以使用pretty
命令来让表达式更好看一点:
octave:31> pretty(g)2 3⋅x - 6⋅x + 3
由于我使用的是Octave Oline
所以可能看着没有差别。
接下来我们求出导数等于0的根:
octave:32> s = solve(g)
s = (sym) 1
接下来我们使用subs
命令来带入函数中的某个值,我们想知道x = 0,1,2
时函数f的值:
octave:33> subs(f,0)
ans = (sym) 0
octave:34> subs(f,1)
ans = (sym) 1
octave:35> subs(f,2)
ans = (sym) 2
导数在这些点的值:
octave:36> subs(g,0),subs(g,1),subs(g,2)
ans = (sym) 3
ans = (sym) 0
ans = (sym) 3
导数的临界点:
octave:37> h = diff(g)
h = (sym) 6⋅x - 6
octave:38> solve(h)
ans = (sym) 1
三阶导:
octave:39> y=diff(h)
y = (sym) 6
g(x)
的图像:
让我们再看一个例子:
绘制
的图像并显示最大值和最小值。
首先我们定义函数并且绘制它的图像:
syms x;
f = x.^4-2*x.^3;
ezplot(f,[-2 3])
hold on
现在计算一阶导数:
h = (sym)3 24⋅x - 6⋅x
我们把导数设置为0然后求临界值:
s = (sym 2×1 matrix)⎡ 0 ⎤⎢ ⎥⎣3/2⎦
下一步我们计算二阶导数:
g = (sym) 12⋅x⋅(x - 1)
现在我们来将一阶导数等于0的点带入二阶导数来判断是极大值还是极小值:
a = (sym) 0
b = (sym) 9
我们可以看到,x = 3/2时二阶导数大于0,所以f(3/2)是极小值。
现在我们修改图像来让它显示最小值点:
我们还可以使用text命令来做一些个性化的操作:
text(0.8,3.2,'局部最小值')
发布评论