如何使用二阶导数测试在MATLAB中找到Maxima和Minima

时间:2016-01-24 21:18:34

标签: matlab

我正在寻找创建一个函数,该函数采用方程式并在图表上标记最大值和/或最小值以及渐近线。

从Calc 1,我记得使用二阶导数测试。

我开始解决一阶导数的根源 - 但我不确定如何绘制此向量中的点与原始方程相交的位置。

syms x;         %// 
f = sin(x)      %// Define equation as a function
df=diff(f)      %// First derivatives
ddf=diff(df)    %// Second Derivatives

我用dfRoots = solve(df)

找到了这些点的x值的根

然后创建了一个名为dfRoots_realDouble

的向量
dfRoots_double = double(dfRoots);
dfRoots_realDouble = real(dfRoots_double);

dfRoots_realDouble表示我需要的x值,但我不知道如何将它们绘制为点并将最小值与最大值等分开

我希望能够在sin(6*(x^5) + 7*(x^3)+8*(x^2))上添加任何功能,例如[-1,1],并使用一个标记突出显示所有最大值,并使用另一个标记突出显示所有最小值。

1 个答案:

答案 0 :(得分:0)

如果对根进行排序,则会有一个最大值和最小值的交替向量。使用二阶导数确定您的根矢量是以最大值还是最小值开始,然后拆分矢量。

roots = sort([-3 4 2 -5]);
is_max = (subs(ddf, x, roots(1)) < 0)
if is_max
    max_points = roots(1:2:end)
    min_points = roots(2:2:end)
else
    max_points = roots(2:2:end)
    min_points = roots(1:2:end)   
end
% plot with two different symbols
plot(max_points, subs(f, x, max_points), 'or',...
     min_points, subs(f, x, min_points), '*k')