问题描述
实际上:f(a)=∫(g−∑0naixi)2=∫g2+∫(∑0naixi)2−2∫g∑0naixif(a)=\int(g-\sum_0^na_ix^i)^2=\int g^2+\int (\sum_0^na_ix^i)^2-2\int g\sum_0^na_ix^if(a)=∫(g−∑0naixi)2=∫g2+∫(∑0naixi)2−2∫g∑0naixi
求偏导数:
∂f(a)∂ak=2∫(∑0naixi)xk−2∫g∗xk=0\frac{\partial f (a)}{\partial a_k} =2\int (\sum_0^na_ix^i)x^k-2\int g*x^k=0∂ak∂f(a)=2∫(∑0naixi)xk−2∫g∗xk=0
等价于:
∑i=0naii+k+1=∫g∗xk,k=0,...,n\sum_{i=0}^n \frac{a_i}{i+k+1}=\int g*x^k,k=0,...,n∑i=0ni+k+1ai=∫g∗xk,k=0,...,n。
写成矩阵格式:
[11/21/3⋯1/(n+1)1/21/31/4⋯1/(n+2)1/31/41/51/(n+3)⋮⋮⋮⋱1/(n+1)1/(n+2)1/(n+3)⋯1/(2n+1)][a0a1a2⋮an]=[g0g1g2⋮gn]\left[ \begin{array}{ccccc}
1 & 1 / 2 & 1 / 3 & \cdots & 1 /(n+1)\\
1 / 2 & 1 / 3 & 1 / 4 & \cdots & 1 / (n + 2)\\
1 / 3 & 1 / 4 & 1 / 5 & & 1 / (n + 3)\\
\vdots & \vdots & \vdots & \ddots & \\
1 / (n+1) & 1 / (n + 2) & 1 / (n + 3) & \cdots & 1 / (2 n +1)
\end{array} \right] \left[ \begin{array}{c}
a_0\\
a_1\\
a_2\\
\vdots\\
a_n
\end{array} \right] = \left[ \begin{array}{c}
g_0\\
g_1\\
g_2\\
\vdots\\
g_n
\end{array} \right]⎣⎢⎢⎢⎢⎢⎡11/21/3⋮1/(n+1)1/21/31/4⋮1/(n+2)1/31/41/5⋮1/(n+3)⋯⋯⋱⋯1/(n+1)1/(n+2)1/(n+3)1/(2n+1)⎦⎥⎥⎥⎥⎥⎤⎣⎢⎢⎢⎢⎢⎡a0a1a2⋮an⎦⎥⎥⎥⎥⎥⎤=⎣⎢⎢⎢⎢⎢⎡g0g1g2⋮gn⎦⎥⎥⎥⎥⎥⎤
其中:gk=∫g∗xk,k=0,...,ng_k=\int g*x^k,k=0,...,ngk=∫g∗xk,k=0,...,n
也就是:AB=GAB=GAB=G。
求解
Mathematica求解如下:
fit[g_, n_] :=
Module[{G = Table[Integrate[g[x]*x^k, {x, 0, 1}], {k, 0, n}],
A = Table[1/(i + j + 1), {i, 0, n}, {j, 0, n}]},
LinearSolve[A, G].Table[x^k, {k, 0, n}]]
测试:
g[x_] := Sin[2.*Pi*x];
n = 3;
l = fit[g, n];
Plot[{l, g[x]}, {x, 0, 1}, PlotLabel -> StringJoin["n=", ToString[n]],
Frame -> True]
输出为
本文详细解析了一种基于积分和偏导数的数学优化方法,通过构建矩阵方程组求解最佳参数,实现函数拟合。利用Mathematica进行编程实现,通过实例验证了该方法的有效性和准确性。
1万+

被折叠的 条评论
为什么被折叠?



