用Julia逐步绘制函数

用Julia逐步绘制函数,julia,Julia,我很难和朱莉娅一起做动画 我有一个从tmin=0到tmax=40的函数sf(t)=t^(1/2),我不知道如何逐步显示从tmin到tmax的解。我在网上找到了Julia docs和Tuto,尝试了多种方法,但它们几乎都使用预定义函数(主要是sin和cos)。Julia返回的错误和下面的代码是MethodError:没有与getindex(::typeof(sf),::Int64)匹配的方法。。我有两个问题:为什么会出现这个错误?和创建动画比访问循环中的索引更简单吗? 谢谢 using Plots

我很难和朱莉娅一起做动画

我有一个从tmin=0到tmax=40的函数sf(t)=t^(1/2),我不知道如何逐步显示从tmin到tmax的解。我在网上找到了Julia docs和Tuto,尝试了多种方法,但它们几乎都使用预定义函数(主要是sin和cos)。Julia返回的错误和下面的代码是
MethodError:没有与getindex(::typeof(sf),::Int64)匹配的方法。
。我有两个问题:为什么会出现这个错误?创建动画比访问循环中的索引更简单吗?

谢谢

using Plots
tmin=0
tmax=40
tvec= range(tmin,tmax,length=100) 

# I define the function here, but I'm not sure this is really needed
function sf(t) 
    t^(1/2)
end

# I create an "empty" plot to use it in animation
p=plot(sf,0)

# To create the animation, I do a loop over all t's present in tvec
anim = @animate for i ∈ 0:length(tvec)-1
    push!(p,tvec(i),sf(i))
    frame(anim)
end

# And finally I (try to) display the result
gif(anim,"scale_factor.gif",fps=30)

IIRC
@animate
@gif
宏希望在循环结束时有一个绘图,因此您需要执行以下操作:

anim = @animate for i ∈ eachindex(tvec)
           plot(sf, tvec[begin:i])
       end
gif(anim,"scale_factor.gif",fps=30)

需要注意的是,您可以100%推送!()到绘图中,这是通常更新的方式。另外,根据原始代码,值得一提的是Julia使用了基于1的索引,请记住这一点,以备将来的代码使用。
Julia>p=plot(sf,0:1)Julia>push!(p,0.5,0.8)([0.0,1.0,0.5],[0.0,1.0,0.8])julia>p显示类型图的值时出错。图{Plots.GRBackend}:
可能
推!()
可以工作,但它似乎完全不稳定(而且令人困惑?)谢谢你的回答和评论,现在它工作得很好。然而,在for循环中调用一个新的绘图不是比在外部创建它并用push更新它更消耗资源吗?制作一个“绘图”的内部表示非常便宜,最重要的部分是用GR渲染它,你必须用任何方式为每个“帧”渲染它,没有在适当的地方更新渲染的魔力