如何在Julia中访问Roots包find_zero的内部Track对象获取迭代数据
操作方法
你直接调用find_zero返回的只有求解得到的根数值,无法直接获取迭代轨迹,需要显式传入轨迹存储对象来记录数据,操作步骤如下:
- 先创建空的
Roots.Tracks实例,用于存储迭代过程数据 - 调用
find_zero时新增tracks关键字参数,将刚才创建的实例传入 - 求解完成后,直接从
Tracks实例的xs、fs字段中分别读取迭代自变量值和对应函数值
完整代码示例
using Roots # 示例函数与导数,匹配你的测试场景 f(x) = sin(x - 1) f_derivative(x) = cos(x - 1) initial_guess = 0.8 # 1. 创建轨迹存储对象 tr = Roots.Tracks() # 2. 求解时传入tracks参数,保留verbose=true可同时在控制台输出轨迹 root = find_zero((f, f_derivative), initial_guess, Roots.Newton(), verbose=true, tracks=tr) # 3. 读取迭代数据 # xs字段对应所有迭代x值,顺序和Trace输出的x_0、x_1...完全一致,Julia为1索引,tr.xs[1]即x_0 x_list = tr.xs # fs字段对应所有迭代的f(x)值,顺序和Trace输出的fx_0、fx_1...完全一致 fx_list = tr.fs
补充说明
- 如果你不需要控制台打印轨迹,删掉
verbose=true参数即可,tracks参数会独立记录迭代数据不受影响 - 除了
xs和fs字段外,Tracks实例还可以通过tr.alphas、tr.falphas等字段获取其他算法中间值,可根据需求自行取用
内容的提问来源于stack exchange,提问作者ale laera
相关产品推荐
相关产品推荐

