【问题标题】:Octave - gradients of a circle function do not plot correctly八度 - 圆形函数的梯度不能正确绘制
【发布时间】:2017-01-20 04:53:31
【问题描述】:

问题

尝试关注Gradients, Gradient Plots and Tangent Planes

(X^2 + Y^2) 的梯度向量在 Windows 上的 Octave 4.2.0 中无法正确显示。使用代码,预期圆的梯度从中心向外发散。然而实际是对角线。

请协助了解问题所在。

syms x y
f1 = x^2 + y^2; 
gradf1 = jacobian(f1,[x,y]);

f1fun  = function_handle(f1);
f1xfun = function_handle(gradf1(1));
f1yfun = function_handle(gradf1(2));

[xx, yy] = meshgrid(-1:.1:1,-1:.1:1);

hold on

contour(xx, yy, f1fun(xx, yy), 10)
quiver(xx, yy, f1xfun(xx, yy), f1yfun(xx, yy), 0.5)
axis equal tight

hold off

预期

实际

【问题讨论】:

    标签: octave


    【解决方案1】:

    当你表演时:

    f1xfun = function_handle(gradf1(1));
    f1yfun = function_handle(gradf1(2));
    

    输出是:

    f1xfun = 
      @(x) 2 * x        % note: single-argument function
    f1yfun =
      @(y) 2 * y        % note: single-argument function
    

    那是反对

    f1xfun = 
      @(x,y) 2 * x      % two-argument function
    f1yfun = 
      @(x,y) 2 * y      % two-argument function
    

    这就是你认为正在发生的事情。 (即生成的函数实际上只接受 single 输入,而不是 xy)。

    因此,稍后当您使用两个输入调用f1yfun 时,第二个输入(即y)只是默默地丢弃,而您实际上是在计算@ 987654328@ 在两个轴上,因此是对角线箭头。


    tl;dr 您对 quiver 的调用应该是:
    quiver(xx, yy, f1xfun(xx), f1yfun(yy), 0.5);
    

    【讨论】:

      【解决方案2】:

      我认为您的代码中有错误,应该调用 quiver

      quiver(xx, yy, f1xfun(xx), f1yfun(yy), 0.5)
      

      然后给出(colormap("jet")

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-26
        • 1970-01-01
        • 1970-01-01
        • 2012-10-03
        相关资源
        最近更新 更多