Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 如何找到沿等高线的最小梯度?_Algorithm_Matlab_Gradient_Contour - Fatal编程技术网

Algorithm 如何找到沿等高线的最小梯度?

Algorithm 如何找到沿等高线的最小梯度?,algorithm,matlab,gradient,contour,Algorithm,Matlab,Gradient,Contour,有六个电荷,两个负电荷(黄色)和四个正电荷(蓝色)限制在一个平面内,如下所示 我画出了等电位线。现在,我想画几条线,沿着最小的势能梯度(黑线)。这些线具有这样的特性,即它们不接触任何正电荷,但始终以负电荷结束 我在MATLAB中这样做了,我发现对于黑线上的任何一点,如果我计算垂直于该点切线的线段上的电势分布,在该点上总是能得到最小的电势 虽然在电荷不多的情况下,用手可以找到这样的点,然后我可以把它们连接起来,画出黑色曲线。我想知道是否有办法使这个过程自动化?当处理不同的方向时,我如何选择“正确的

有六个电荷,两个负电荷(黄色)和四个正电荷(蓝色)限制在一个平面内,如下所示

我画出了等电位线。现在,我想画几条线,沿着最小的势能梯度(黑线)。这些线具有这样的特性,即它们不接触任何正电荷,但始终以负电荷结束

我在MATLAB中这样做了,我发现对于黑线上的任何一点,如果我计算垂直于该点切线的线段上的电势分布,在该点上总是能得到最小的电势

虽然在电荷不多的情况下,用手可以找到这样的点,然后我可以把它们连接起来,画出黑色曲线。我想知道是否有办法使这个过程自动化?当处理不同的方向时,我如何选择“正确的区域”来找到最小的潜在点?如果我看整个区域,最小的势能点通常位于远离电荷的地方

非常感谢您花时间研究这个问题。如果您有任何想法,请在下面发表评论

干杯, 迈克

以下是我的情节:

  • 等电位线与场线:

  • 具有边界的等电位线:

  • 这是密码

    [X, Y] = meshgrid(0:.1:20, 0:.1:20);
    x = [ 5 15 10 7 9 2];
    y = [ 10 10 17 4 13 18];
    q = [ 2 1 -2 2 -3 2];
    
    U = zeros(201, 201, 2);
    UU = zeros(201, 201);
    
    for i = 1:6
        r = sqrt((X-x(i)).^2 + (Y-y(i)).^2 + 0.01);   % to avoid NaN
        U(:,:,i) = q(i)./r;
        UU = UU + U(:,:,i);
    end
    
    [dx, dy] = gradient(-UU); 
    %quiver(X, Y, dx, dy,2 );
    
    
    % define the starting point of stremlines (electric field lines)
    % originating from positive charges
    
    th = linspace(0,360,19)*pi/180;
    x0 = 0.1 * cos(th); 
    y0 = 0.1 * sin(th); 
    
    x1 = 1 * cos(th);
    y1 = 1 * sin(th);
    
    hold on 
    
    for i = 1:6
        if q(i) > 0 
        streamline(X, Y, dx, dy, x0 + x(i), y0 + y(i));
        end       
    end
    
    % plot the boundaries, starting points picked by trial and error
    
    streamline(X, Y, dx, dy, 13.20, 6.73)
    streamline(X, Y, dx, dy, 13.19, 6.75)
    
    streamline(X, Y, dx, dy, 1.85, 13.36)
    streamline(X, Y, dx, dy, 1.84, 13.36)
    
    streamline(X, Y, dx, dy, 5.58, 7.05)
    streamline(X, Y, dx, dy, 5.58, 7.04)
    
    hold off
    

    你们不是真的找到了势能梯度最高的曲线吗?最小梯度的曲线就是等高线本身。或者我对这个问题有些误解?我猜,你在寻找可以用微分方程计算的流线。你确定你的图片是正确的吗?你的场线看起来不错。最陡的梯度在不同的电荷之间,零梯度沿着等势线(正如特德所说)。您所画的线似乎与电位/场没有任何共同关系(该“分支点”看起来特别可疑!)@anon0909是的,您是对的。左上角和左中角正电荷之间的“边界”只指向较低的负电荷。我已经更新了上面的图。@NicoSchertler实际上,我在寻找流线。我已经更新了原始问题中的情节。我绘制这些“边界”的方法是在两个相邻正电荷之间的某处找到一个点,然后使用
    流线
    函数绘制一条以负电荷结尾的流线和另一条以无限远结尾的流线。你不是真的找到了电位梯度最高的曲线吗?最小梯度的曲线就是等高线本身。或者我对这个问题有些误解?我猜,你在寻找可以用微分方程计算的流线。你确定你的图片是正确的吗?你的场线看起来不错。最陡的梯度在不同的电荷之间,零梯度沿着等势线(正如特德所说)。您所画的线似乎与电位/场没有任何共同关系(该“分支点”看起来特别可疑!)@anon0909是的,您是对的。左上角和左中角正电荷之间的“边界”只指向较低的负电荷。我已经更新了上面的图。@NicoSchertler实际上,我在寻找流线。我已经更新了原始问题中的情节。我绘制这些“边界”的方法是在两个相邻正电荷之间的某处找到一个点,并使用
    流线
    函数绘制一条以负电荷结尾的流线和另一条以无限远结尾的流线。