求助:麻烦大家帮我看看这个报错改怎么解决

我尝试通过程序来强行求解一个超越方程,方程如下:

80·x·tan(80·x)-48=0

根据这个方程写出的如下的程序,但运行过程中报错了。

global h = 1
n = 3000
bata = zeros(0)
for i = 0:1e-8:5
    a = i
    b = i + 1e-8
    if (a*80*tan(a*80)-48 <= 0) & (b*80*tan(b*80)-48 >= 0)
        bata[h] = i
        global h = h + 1
    end
end

报错信息

Error evaluating untitled-152b43ac87db176a4c7d54dc6b80bac7

LoadError: BoundsError: attempt to access 0-element Array{Float64,1} at index [1]
in expression starting at untitled-152b43ac87db176a4c7d54dc6b80bac7:8
setindex!(::Array{Float64,1}, ::Float64, ::Int64) at array.jl:826
top-level scope at untitled-152b43ac87db176a4c7d54dc6b80bac7:12

我对于编程并不熟悉,所以请教下大家,这个错误该怎么解决?
还有就是Julia有没有专门用来解方程的包呢?是不是用相关的包来进行求解比较好?
在这里先谢谢大家了。

你的 bata 是 0 元数组。所以 bata[1] 不存在。但是我也不知道你需要多少维的数组。另外可以使用牛顿法求解。速度比较快。
这样可以同时控制 xy 的精度。

f(x)=80x*tan(80-x)-48
df(x)=80tan(80-x)-80x*sec(x)^2 # f'(x), 手算的
eps_y=1e-8
eps_x=1e-8
max_iter=100
cnt=0
x0=0.0
while (abs(f(x0)) > eps_y || abs(f(x0)/df(x0))>eps_x)  && cnt <max_iter
    global x0=x0-f(x0)/df(x0)
    global cnt+=1
end
x0 # 0.17840780600946252
cnt # 47
f(x0) # -7.54849338591157e-9

非常感谢您的解答。我这编程不熟悉,犯下这么简单的错误。

京ICP备17009874号-2