用多项式近似函数
导言
在计算数学和实验数据处理中,关键任务之一是恢复对离散观测集的分析依赖性。 通常,描述物理过程的真实定律是未知的或对于直接分析来说太复杂,并且源数据包含不可避免的测量误差。 在这样的情况下,找到在最小标准偏差的意义上最好地描述可用点的相对简单的函数变得必要。 经典的最小二乘法解决了这个问题。
导入库
在这个例子中,我们需要一个库 LinearAlgebra 对于与矩阵运算和 Printf用于结果的表格输出。
using LinearAlgebra, Printf
函数定义
让我们定义所研究的函数。 在这个例子中,我们正在检查sinc函数(基数正弦)。
f(x) = x == 0 ? 1.0 : sin(x)/x
函数值表
为了选择最能描述所研究函数行为的多项式,首先需要在特定点设置此函数的特定值。 让我们定义步骤和间隔,并建立一个函数值表。
a = 0
b = 16
步骤=1.0
X=收集(a:步骤:b)
Y = [f(x) for x in X]
println("函数初始值的表:\n")
for i in eachindex(X)
@printf("X = %.4f, Y = %.6f\n", X[i], Y[i])
end
最小二乘法
我们实施最小二乘法来选择给定程度的多项式的系数。 要做到这一点,有必要解决一个系统的正常方程组:
哪里:
结果,我们获得了所需多项式的系数数组,其最好地近似原始数据(在标准偏差的意义上)。
MNC功能(x,y,度)
M=[x[i]^j for i in1:length(x),j in0:degree]
return (M' * M) \ (M' * y)
end
多项式的定义
一般来说,一个多项式的程度 要使用最小二乘法近似函数,它看起来像这样:
让我们定义和比较不同程度的多项式来近似所研究的函数。 结果,我们得到了多项式的系数表,我们将在未来使用它来计算新点的值,并与原始函数进行直观比较。 这使我们能够评估增加多项式的程度如何影响近似的质量。
学位= [1, 3, 5, 7, 9]
N=Dict()
println("最佳均方根近似的多项式的系数:")
以d为单位
K=MNC(X,Y,d)
N[d]=K
println("\nstep=$d")
对于i in1:长度(K)
@printf("a%d = %.6f\n", i-1, К[i])
end
end
让我们将原始函数与获得的多项式进行比较,以详细分析近似质量。 因此,我们将看到每个多项式在整个区间内如何近似原始函数。
w=0.1
X=收集(a:w:b)
函数值(K,x)
sum(K[i]*x^(i-1)for i in1:length(K))
end
println("函数值和多项式的表:")
for x in X
@printf("\nx = %.4f | f(x)=%.6f", x, f(x))
以d为单位
值=值(N[d],x)
@printf(" | P%d=%.6f", d, значение)
end
end
由一阶多项式近似
让我们通过一阶多项式来构建函数及其近似值的可视化比较图。
d = 1
график = plot(X, [f(x) for x in X], label="f(x)=sin(x)/x", lw=2)
plot!(X, [Значение(П[d], x) for x in X], label="$D阶多项式",
xlabel="X", ylabel="Y", lw=2, legend=:right)
显示(图表)
一阶多项式是线性函数。 显然,与所研究的功能没有重叠。
三阶多项式近似
让我们通过三阶多项式构建函数及其近似值的可视化比较图。
d = 3
график = plot(X, [f(x) for x in X], label="f(x)=sin(x)/x", lw=2)
plot!(X, [Значение(П[d], x) for x in X], label="$D阶多项式",
xlabel="X", ylabel="Y", lw=2, legend=:right)
显示(图表)
一个3阶多项式是一个三次函数,并且匹配越来越接近。
通过5阶多项式近似
让我们通过五阶多项式来构建函数及其近似值的可视化比较图。
d = 5
график = plot(X, [f(x) for x in X], label="f(x)=sin(x)/x", lw=2)
plot!(X, [Значение(П[d], x) for x in X], label="$D阶多项式",
xlabel="X", ylabel="Y", lw=2, legend=:right)
显示(图表)
当用5阶多项式近似时,匹配变得更接近。
通过7阶多项式近似
让我们通过七阶多项式构建函数及其近似值的可视化比较图。
d = 7
график = plot(X, [f(x) for x in X], label="f(x)=sin(x)/x", lw=2)
plot!(X, [Значение(П[d], x) for x in X], label="$D阶多项式",
xlabel="X", ylabel="Y", lw=2, legend=:right)
显示(图表)
当用7阶多项式近似时,匹配变得比用5阶多项式近似时更接近。
由9阶多项式近似
让我们通过九阶多项式构建函数及其近似值的可视化比较图。
d = 9
график = plot(X, [f(x) for x in X], label="f(x)=sin(x)/x", lw=2)
plot!(X, [Значение(П[d], x) for x in X], label="$D阶多项式",
xlabel="X", ylabel="Y", lw=2, legend=:right)
显示(图表)
当用9阶多项式近似时,所研究的函数实际上与多项式一致。 因此,可以得出结论,多项式的阶数越高,其与所研究函数的重合度越高。
结论
在本例中,对经典最小二乘多项式近似问题进行了数值实施和研究,这是在需要恢复对噪声或离散数据的依赖性的各种活动领域中的基本工具。:
*物理和工程-实验结果的处理(例如,伏安特性的近似,传感器的校准,信号的平滑)。
*经济和金融-构建时间序列趋势,预测价格和分析市场指标。
*生物学和医学-剂量依赖性建模,人口增长分析,临床试验数据的处理。
*地球物理学和天文学-在噪声背景下提取有用信号,插值卫星数据。
*机器学习-数据泛化(线性和多项式回归)作为许多更复杂算法的基础。
因此,示例中考虑的方法不限于纯粹的教育任务,而是形成了各种应用数值方法的基础。 选择Engee可以让您进一步将计算扩展到大量数据,而不会损失性能,这在解决真正的工程和科学问题时尤为重要。
.png)
.png)
.png)
.png)
.png)