Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.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
如何使用Julia查找根(在一维情况下)_Julia - Fatal编程技术网

如何使用Julia查找根(在一维情况下)

如何使用Julia查找根(在一维情况下),julia,Julia,假设我有以下问题 让它更简单: n=3 z1=1;z2=2;z3=3 \tau=1 u是1D中的变量 目标:求解f(u)=0 注:假设我必须在函数中写入上述内容 以下是我的工作: 我的问题是: 看起来对吗 $u$是根,如果我不知道我的根的先验知识,我怎么能做“max()” 因为我使用fzero(),所以我必须首先估计根的位置;否则,我必须给出一个范围并使用fzero(f,a,b)。对吗 fzero要求一个单变量1D函数作为第一个参数,初始猜测作为第二个参数。定义f(u)并将其传递给fzero

假设我有以下问题

让它更简单:

  • n=3
  • z1=1;z2=2;z3=3
  • \tau=1
  • u是1D中的变量 目标:求解f(u)=0

    注:假设我必须在函数中写入上述内容


    以下是我的工作:

    我的问题是:

  • 看起来对吗
  • $u$是根,如果我不知道我的根的先验知识,我怎么能做“max()”
  • 因为我使用fzero(),所以我必须首先估计根的位置;否则,我必须给出一个范围并使用fzero(f,a,b)。对吗
    fzero
    要求一个单变量1D函数作为第一个参数,初始猜测作为第二个参数。定义
    f(u)
    并将其传递给
    fzero
    的方式不正确:定义常量函数
    f(u)=0
    ,然后用新的(递归)定义覆盖该定义。然后将值
    f(u)
    而不是函数
    f
    传递到
    fzero

    您可能想要的是以下内容:

    using Roots
    function findroot(z, tau)
        function f(u)
            res = 0
            for i = 1:3
                res += max(abs(z[i]) - u, 0)
            end
            res -= tau
            return res
        end
        fzero(f, 3)
    end
    
    首先,上面的代码定义了一个函数
    f
    (闭包),它依赖于封闭环境中的
    z
    tau
    (外部函数
    findroot
    )。然后,函数
    f
    和初始猜测被传递到
    fzero

    我更喜欢在全局范围内定义函数,并将参数作为参数显式传递。较短的功能实现是:

     f(u, z, tau) =  sum(max(abs(zi) - u, 0) for zi in z) - tau
    
    通过这种方式,可以调查其行为,例如,通过绘制不同参数的曲线图:

    using Plots
    plot(u->f(u, [0,1,2], 1), 0, 4)
    
    语法
    args->body
    定义了一个匿名函数。然后可以使用相同的语法定义
    findroot

    findroot(z, tau) = fzero(u->f(u, z, tau), 0)