拉格朗日插值

算是一个小技巧,前段时间看到一个恶臭函数计算用了这个,感兴趣就学了下。

OI 里的用法,我看 OI-wiki 没看懂,之后补。

问题:我们现在有 \(n\) 个点 \((x_i, y_i)\),我们需要求出一个函数(多项式)\(f(x)\) 满足 \(\forall i, f(x_i) = y_i\)

拉格朗日伯爵提出了一个很有意思的做法,我之前也考虑过类似的东西,但是没有实现出来,可能这就是我和神之间的差距吧。

就是说,我们考虑一个做法,解方程不好搞的话,我们是否可以考虑构造一些类似"开关"1的东西。

相当于是,有一个函数 \(g_i(x)\),只有在 \(x = x_i\) 的时候会取到 \(y_i\),其他时候都只会取到 \(0\)

然后我们对于这样的 \(n\) 个函数分别求和就行了。

更一般的形式长成这样:\(f(x) = \sum\limits_{i = 1}^n y_if_i(x)\)\(f_i(x)\) 就是我们构造的“开关”,这东西也叫做基函数。

不难想到 \(f_i(x)\) 的一种构造:\(\prod\limits_{j = 1\land j\not=i}^n\dfrac{x - x_j}{x_i - x_j}\)

展开可能更直观:\(f_1(x) = \dfrac{(x - x_2)(x - x_3)\dots(x - x_n)}{(x_1 - x_2)(x_1 - x_3)\dots(x_1 - x_n)}\)

然后带回原函数解出即可。

小练习:

\(f(x)\) 满足:\(f(1) = 1, f(2) = 3, f(3) = 5, f(4) = a_1, f(5) = a_2\)

那么 \(a_1, a_2 = ?\)

答案:\(a_1 = 114514, a_2 = 1919810\)

构造基函数:

\[ \begin{aligned} f_1(x) &= 439686176034x^4-894467657863599288x^3+96670016881119792168198x^2-773316306253317660861720x+1449942917421022589993400 \\ f_2(x) &= -219839019377\,x^4+447225112289212410\,x^3-48333219453900921255953 \,x^2+289985452779219448973820\,x-241652680550210977910900 \\ f_3(x) &= \dfrac{219834950745\,x^4-447216395679174360\,x^3+48331430503867261481055 \,x^2-193319908211118614687340\,x+144988924923427197429900}{2} \\ f_4(x) &= -\dfrac{23672016190564304\,x^4-45445986450952971540976\,x^3+ 409012505081637691139152\,x^2-1045253143344809757096080\,x+ 681686601042108846933600}{114513} \\ f_5(x) &= {{6653698369034154960\,x^4-762001498316898528484080\,x^3+ 6857627570346682775369040\,x^2-17524756951201811597381520\,x+ 11429124225473658316341600}\over{1919809}} \end{aligned} \]

所以当 \(f(x)\) 满足:

\[ f(x) = \dfrac{855711694412849661824705}{219843088017}x^4 -\dfrac{49153001818340526730091159410}{219843088017}x^3 + \dfrac{31881493579541826570550093377433241}{439686176034} x^2 -\dfrac{85010938062374872741332328977740390}{219843088017}x + \dfrac{93858093625853837594397793694159950}{73281029339} \]

时,\(f(4) = 114514, f(5) = 1919810\)

哇,真有逻辑,数学真是有趣!这个可以有!


最后更新: June 20, 2023