Julia无法转换Taylor1{Float64}为绘图数据 如何获取一阶泰勒近似值
解决方法
你遇到的报错本质是两个问题:
Taylor1构造函数的入参规则是Taylor1(多项式系数数组, 阶数),你传入的jump_value是离散y值,不是多项式系数,构造出来的多项式本身不符合你的需求。- 就算构造出了正确的泰勒多项式对象,也属于自定义结构,不能直接传入
plot函数作为y轴数据,需要先对x轴的每个采样点计算对应函数值,得到数值数组后再绘图。
一阶泰勒近似需要指定展开中心点x0,我们以x区间中点x0=5为例,你可以根据需求调整展开点,完整可运行代码如下:
using Plots, TaylorSeries # 你的原始数据 jump_value = [-945.0, -287.55589538221216, 19.122751150095354, 113.22912169505338, 96.60890174423561, 39.60661306353262, -14.088053425973683, -42.593904767135726, -40.99191308586612, -16.478882710263225, 16.47888271026317, 40.991913085866095, 42.59390476713573, 14.088053425973682, -39.60661306353257, -96.60890174423555, -113.2291216950534, -19.122751150095276, 287.5558953822114, 945.0] # 原始数据对应的x采样点:20个点均匀分布在0~10区间 x_samples = range(0, 10, length=length(jump_value)) # 定义一阶泰勒展开的中心点x0 x0 = 5.0 # 计算x0处的函数值y0(用最近采样点的值,你也可以用插值得到更精确的结果) y0 = jump_value[argmin(abs.(x_samples .- x0))] # 计算x0处的一阶导数值(用中心差分法) idx_x0 = argmin(abs.(x_samples .- x0)) dy0 = (jump_value[idx_x0+1] - jump_value[idx_x0-1]) / (x_samples[idx_x0+1] - x_samples[idx_x0-1]) # 方法1:不用TaylorSeries库,直接构造一阶泰勒近似函数 taylor1(f, x) = y0 + dy0 * (x - x0) # 方法2:用TaylorSeries库构造多项式 taylor1_poly = Taylor1([y0, dy0], 1) # 定义绘图的x采样间隔,这里设为0.1,你可以替换成你自己定义的jump_interval jump_interval = 0.1 x_plot = 0:jump_interval:10 # 计算对应x的近似y值,两种方法二选一即可 y_plot = taylor1.(x_plot) # y_plot = taylor1_poly.(x_plot) # 用TaylorSeries的话就用这行 # 绘图 plot(x_plot, y_plot, xlabel = "X value", ylabel = "Y value", title = "Freg we love you!", linecolor = :black, linewidth = 3, legend = :bottomright, markershape = :circle, label = "Childhood")
如果你的需求是对整个离散序列做一阶线性拟合而非某点的泰勒近似,可以直接用线性拟合函数替换上面的泰勒计算部分,同样可以得到可直接绘图的数值数组。
内容的提问来源于stack exchange,提问作者Danny Huang
相关产品推荐
相关产品推荐

