初始化函数以在 Matlab 中区分和绘制它的最佳方法

Best way to initialize a function to differentiate and plot it in Matlab

我是 Matlab 的新手,我正在寻找您的建议,以了解什么是初始化函数(= vs =@ 或其他选项)以便能够区分它的合适或最佳方法,找到一个特定参数的值并绘制它以及特定点的切线。

我发现的东西:

f = my function(x) % but needs x initalized; returns values
diff(f, x)
plot(x, f)

f = @(x) my function
diff(f, x) % doesn't work
fplot(f, x)

并象征性地

syms x
f = my function

但在最后 2 种情况下,我无法获取值、微分或绘制 f。

鉴于您的特殊情况,您想提供一个函数并找到它的解析导数。一旦你找到这个,你想确定这个点的导数是什么,然后绘制与原函数重合的切线。

最好的方法是使用 syms 定义一个符号变量,然后像您一样用 diff 进行区分。现在,剩下的就是我们要用它来代替实际值。您可以使用精心设计的 matlabFunction 函数为您完成此操作。这将采用符号数学定义的方程式和 return 可以接受数字输入的函数句柄。我想补充一点,从这个句柄 return 编辑的所有运算符都是 element-wise

一旦你有了解析导数,你可以很容易地找到切线的斜率,方法是将点代入 matlabFunction 中新创建的函数,然后你必须使用 matlabFunction 再次将您的原始函数转换为函数句柄,以便您可以在此切线上找到一个点。然后你就有了点和斜率,你可以很容易地通过以下方式找到切线的方程:

y -y0 = m*(x - x0)

x0 是您想要的点,y0 是使用原始函数看到的输出,m 是使用导数找到的斜率。

我将执行以下步骤来实现您想要的效果:

  1. 定义一个符号变量xt,随便什么
  2. 定义原函数
  3. 通过diff
  4. 计算导数
  5. 通过matlabFunction
  6. 将2和3都转换成函数句柄
  7. 定义一个好的域来代表函数
  8. 绘制原始函数
  9. 选择一个你想求斜率的点
  10. 计算切线方程并确定该线的适当域
  11. 绘制这条线并强调兴趣点

下面是代码在每个步骤中的样子...让我们使用 y = x^3 并以 x = 2 处的斜率为例进行分析:

%// Step #1
syms t;

%// Step #2
y = t^3;

%// Step #3
dy = diff(y, t);

%// Step #4
yh = matlabFunction(y);
dyh = matlabFunction(dy);

%// Step #5
x = -4:0.01:4;

%// Step #6
figure;
hold on;
plot(x, yh(x));

%// Step #7
x0 = 2;
slope = dyh(x0);

%// Step #8
%// y - y0 = m*(x-x0)
%// y = m*(x - x0) + y0
tol = 1;
x2 = x0-tol:0.01:x0+tol;
y0 = yh(x0);
out = slope*(x2 - x0) + y0;

%// Step #9
plot(x0, y0, 'r.');
plot(x2, out, 'g');

让我们慢慢地完成每一步。

第 1 步

非常直接。我在这里使用 t 作为感兴趣的变量。

第 2 步

我使用之前定义的符号变量定义了一个 y = t^3 函数。同样,非常简单。

第 3 步

我们计算在步骤 #2 中定义的函数 y 关于 t 的解析导数...简单。

第 4 步

我们为原始函数和导数创建数值函数句柄,以便我们可以替换点...无论它们存储在数组还是矩阵中...以便我们可以评估此​​数组中的每个值是关于它们所代表的功能。

基本上,您需要使用 matlabFunction,这样您就可以使用它们来替换您想要的任何数字。

第 5 步

我定义了 -4 <= x <= 4 的域,但这取决于您要绘制的函数。您必须根据正确的域是什么来更改它。我还选择了 0.01 作为步长,因为当你在 MATLAB 中绘制东西时,你绘制了一个点数组。这允许我以 0.01 的步长生成从 -4 到 4 的值列表。

第 6 步

我生成一个新图形,使用hold on,这样当我们多次调用plot时,它会附加到新图形上。然后我们继续绘制原始曲线。请注意,我正在使用 MATLAB 为存储在 yh.

中的原始曲线创建的函数句柄

第 7 步

我选择了我想要的兴趣点,也就是x0 = 2,然后我确定此时的输出值是多少...存储在y0.

第 8 步

一旦我计算出所需的点,我就用导数函数计算在该点看到的斜率,然后我重新安排切线方程以在给定我们创建的原始域的情况下产生输出值,以及之前创建的(x0,y0)。其输出将是切线点的输出。请注意,我将线居中放置在兴趣点 (x0,y0) 周围,我定义了一个名为 tol 的变量,它将绘制线 +/- tol 以 [=38= 为中心].具体来说,它将绘制 x0 - tolx0 + tol 之间的线。我这里设置的是tol = 1,大家根据自己的情况改吧

第 9 步

用红色绘制兴趣点,用绿色绘制切线方程。请记住,切线的点数与原始域的点数不匹配,因此请确保为正确的点使用正确的数组。


这是我得到的: