繁体   English   中英

Matlab 在 x 轴上绘制特定点

[英]Matlab plotting specific points on x-axis

我想要 plot 和 function,标记为 f(x)=0。 我有一个 function findmanyzeros ,它返回一个 x 值数组,其中 f(x)=0 在一个范围内。 例如:

findmanyzeros(@(x)sin(x)-exp(-x), 0, 10, 50, 1e-10);
ans = [0.5885 3.0964 6.2850 9.4247]

我正在尝试 plot f(x) 的图形和位于 x 轴上的 f(x) 的零点,但是当我运行下面的代码时,结果图不显示零点。 如何沿 x 轴正确显示 f(x) 的零点? 另外,我该怎么做才能不硬编码值的数量 ( [ 0 0 0 0] )?

% Find zeros of f(x)
f = @(x)sin(x)-exp(-x);
zeros = findmanyzeros(f, 0, 10, 50, 1e-10);

% Plot f(x)
fplot(f, [0 10], 'linewidth', 2, 'color', 'b');
hold on

% Plot the x-axis
yline(0, 'linewidth', 2, 'color', 'r');
hold on

% Plot the zeros of f(x)
plot(zeros, [0 0 0 0], 'color', 'g', 'MarkerSize',20);
hold off

grid on
ylim([-1.5 1])

没有显示零的 f(x) 图

编辑:我希望我的身材看起来像这样: 具有正确组件的 f(x) 图

首先,强烈建议避免使用现有函数的名称命名变量,因此将值向量称为“zeros”不是一个好主意,最好将其称为“my_func_zeros”或类似名称。zeros是一个内置的 matlab function 用于创建零填充的向量/矩阵。

至于你的问题:

  1. 我相信你只是忘了指定想要的标记类型,所以默认情况下它是一个不会出现的无限小点。 此外,当使用 MATLAB 的基本颜色\标记之一时,无需指定选项名称(在我将附加的代码行中会更清楚)。
  2. 您可以使用 function长度来创建具有相关大小的向量。

因此,您的代码应该看起来像这样:

my_func_zeros = findmanyzeros(f, 0, 10, 50, 1e-10);
...
plot(my_func_zeros, zeros(1,length(my_func_zeros)), '*g', 'MarkerSize',20);

在哪里:

零(1,长度(my_func_zeros))

创建一个包含 my_func_zeros 向量大小的零的向量,并且:

'*G'

指定标记类型 (*) 和颜色 (g)。

顺便说一句,没有必要在每 plot 之后添加hold on - 在你写完之后,你 plot 将被绘制在同一个图形上,直到下一个hold offfigure命令。

祝你好运!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM