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

时间:2015-09-30 20:22:46

标签: matlab function symbolic-math differentiation

我是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

但在最近的两个案例中,我无法获得价值,区分或绘制f。

1 个答案:

答案 0 :(得分:1)

根据您的具体情况,您希望提供一个函数并找到它的分析导数。一旦找到这个,你想确定此时的导数是什么,然后绘制与原始函数重合的切线。

最好的方法是使用syms来定义符号变量,然后与diff区别开来。现在,剩下的就是我们想用它来代替实际价值。您可以使用精心设计的matlabFunction函数为您完成此操作。这将采用符号数学定义的等式并返回可接受数字输入的函数句柄。我想补充一点,从这个句柄返回的所有运算符都是元素

获得分析导数后,通过将该点替换为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. 计算切线方程并确定此线的适当域
  12. 绘制此行并强调兴趣点
  13. 以下是代码在每一步中的样子......让我们使用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 .... easy。

    步骤#4

    我们为原始函数和派生函数创建数值函数句柄,以便我们可以替换点...它们是否存储在数组或矩阵中...以便我们可以评估此​​数组中每个值的含义尊重他们所代表的职能。

    基本上,您需要使用matlabFunction,以便您可以使用这些来替换您想要的任何数字。

    步骤#5

    我定义了-4 <= x <= 4的域名,但这取决于您正在绘制的功能。你必须根据适当​​的域名改变它。我还选择了步长为0.01,因为当你在MATLAB中绘制东西时,你会绘制一个点数组。这允许我以0.01的步长生成从-4到4的值列表。

    步骤#6

    我生成一个新的数字,使用hold on,这样当我们多次调用plot时,它会附加到新数字上。然后我们继续绘制原始曲线。请注意我正在使用MATLAB创建的函数句柄来存储yh中的原始曲线。

    步骤#7

    我选择了我想要的兴趣点,即x0 = 2,然后我确定此时的输出值是什么......存储在y0中。

    步骤#8

    一旦我计算出所需的点,我用导数函数计算此点所见的斜率,然后我重新排列切线的方程,以便在给定我们创建的原始域的情况下产生输出值,以及{先前已创建{1}}。这个输出将是切线点的输出。请注意,我将关注点放在感兴趣点(x0,y0)所在的位置周围,并定义一个名为(x0,y0)的变量,该变量将绘制以{{1}为中心的行tol }。具体来说,它将绘制+/- tol(x0,y0)之间的线。我在这里设置x0 - tol,但是根据适合你的方式进行更改。

    步骤#9

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

    这是我得到的:

    enter image description here