假设我有以下问题
简化:
答案 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
(一个闭包),它依赖于封闭环境中的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