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

时间:2017-02-14 02:14:03

标签: julia

假设我有以下问题

enter image description here

简化:

  1. n = 3的
  2. z1 = 1; z2 = 2; z3 = 3
  3. \ tau = 1
  4. u是1D中的变量。
  5. 目标:解决f(u)= 0.

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

    以下是我的工作:enter image description here

    我的问题是:

    1. 看起来是否正确?
    2. $ u $是根,如果我不知道我的root先验,我怎么能做“max()”?
    3. 因为我使用fzero(),所以我必须首先估计根的位置;否则,我必须给出一个范围并使用fzeros(f,a,b)。正确?

1 个答案:

答案 0 :(得分:4)

shape_fill = input ("Which color do you want to fill your shape? Please enter an RGB value. ") ) shape_pen = input ("Which color do you want the outline of your shape to be? Please enter an RGB value. ") 期望将单变量1D函数作为其第一个参数,将初始猜测作为第二个参数。定义fzero并将其传递给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 (一个闭包),它依赖于封闭环境中的fz(外部函数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