【问题标题】:How can I use the Second Derivative test to find Maxima and Minima in MATLAB如何使用二阶导数测试在 MATLAB 中找到最大值和最小值
【发布时间】:2016-01-25 14:53:36
【问题描述】:

我希望创建一个函数,该函数接受一个方程并在图表上标记最大值和/或最小值以及渐近线。

在 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 值,但我不知道如何将它们绘制为点并将最小值与最大值分开等

我希望能够放入任何函数,例如[-1,1] 上的sin(6*(x^5) + 7*(x^3)+8*(x^2)),它会用一个标记突出显示所有最大值,并用另一个标记突出显示所有最小值。

【问题讨论】:

  • 所以这真的是一个关于绘图的问题,而不是与标题所述的“使用二阶导数测试找到最大值和最小值”有关吗?我建议简化和删除与您的实际问题无关的内容。如果您查看 ezplot 调用的返回值,您应该会看到 'Marker' 属性。
  • 我改写了我的问题并删除了创建图的代码
  • 我看到一些例子,他们使用'marker' 绘制具有特定间距的点,但它们的值不等于存储在数组、向量甚至截距中的值。跨度>

标签: matlab


【解决方案1】:

如果你对根进行排序,你将得到一个最大值和最小值的交替向量。使用二阶导数确定您的根向量是从最大值还是最小值开始,然后拆分向量。

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')

【讨论】:

    猜你喜欢
    • 2021-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-14
    • 2014-12-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多