三次样条函数:n个支撑点的分段多项式插值
几何画板及绘图内容加载中,请稍等……
该范例演示了如何通过GeoGebra构建三次样条(Cubic Spline)插值曲线,在给定n个支撑点(Stützstellen)上生成光滑的分段三次多项式函数。核心数学概念是样条插值,即每个区间用三次多项式连接,并保证节点处函数值、一阶导数和二阶导数连续,从而得到整体光滑的曲线。作图要点包括:使用Sequence命令生成支撑点序列,Join命令组合分段表达式,UnicodeToText和Textfield用于动态显示样条函数文本,通过滑块n控制支撑点数量,并利用按钮交互切换显示完整样条或各分段函数。该范例适合高中至大学阶段的数学教学,用于理解插值、分段函数、多项式逼近以及数值分析中的样条方法,也可作为GeoGebra高级交互设计的参考。
GeoGebra 命令及参数
Sequence(((1, 0) * Element[L, i]), i, 1, n + 1) → X, {-6, -2, 1, 4, 7}Sequence(((0, 1) * Element[L, i]), i, 1, n + 1) → Y, {0, -2, 2, -1, 6}Join({{0}, Sequence[Element[Y, i], i, 1, n], Sequence[Element[Y, i], i, 2, n + 1], Sequence[0, i, 1, (4 * n) - (2 * n) - 1]}) → bSequence(Take[Join[{If[k > 1, Sequence[0, i, 1, (4 * (k - 1))], {}], {(6 * Element[X, k + 1]), 2}, {0, 0}, {(-6 * Element[X, k + 1]), -2}, {0, 0}, Sequence[0, i, 1, (4 * (n - k))]}], 1, (4 * n)], k, 1, n - 1) → s5, {{-12, 2, 0, 0, 12, -2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 6, 2, 0, 0, -6, -2, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 24, 2, 0, 0, -24, -2, 0, 0}}Sequence(Take[Join[{If[k > 1, Sequence[0, i, 1, (4 * (k - 1))], {}], {(3 * Element[X, k + 1]^(2)), (2 * Element[X, k + 1]), 1}, {0}, {(-3 * Element[X, k + 1]^(2)), (-2 * Element[X, k + 1]), -1}, {0}, Sequence[0, i, 1, (4 * (n - k))]}], 1, (4 * n)], k, 1, n - 1) → s4, {{12, -4, 1, 0, -12, 4, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 3, 2, 1, 0, -3, -2, -1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 48, 8, 1, 0, -48, -8, -1, 0}}Sequence(Join[{Sequence[0, i, 1, (4 * (k - 1))], Sequence[Element[X, k + 1]^(i), i, 3, 0, -1], Sequence[0, i, 1, (4 * (n - k))]} \ {}], k, 1, n) → s3, {{-8, 4, -2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 64, 16, 4, 1, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 343, 49, 7, 1}}Sequence(Join[{Sequence[0, i, 1, (4 * (k - 1))], Sequence[Element[X, k]^(i), i, 3, 0, -1], Sequence[0, i, 1, (4 * (n - k))]} \ {}], k, 1, n) → s2, {{-216, 36, -6, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, -8, 4, -2, 1, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 16, 4, 1}}Join({s1, s2, s3, s4, s5, s6}) → MSequence(Sum[(Element[M_{-1}, i] * b)], i, 1, (4 * n)) → a_i, {0.050715488215488234, 0.9128787878787881, 4.165824915824917, 3.0858585858585856, -0.17947998503554058, -0.4682940516273849, 1.40347923681257, 1.2442947998503553, 0.23241676019453797, -1.7039842873176205, 2.639169472502805, 0.8323980546202764, -0.12055742611298159, 2.531705948372614, -14.303591470258127, 23.422745978301514}Join({Sequence["If(x <=" + (Element[X, k + 1]) + "," + (Sum[(Take[a_i, (4 * (k - 1)) + 1, (4 * k)] * {x^(3), x^(2), x, 1})]) + ",", k, 1, n - 1], {Sum[(Take[a_i, (4 * (n - 1)) + 1, (4 * n)] * {x^(3), x^(2), x, 1})] + Take[")))))))))))))))))))))))))))))))))))", 1, n - 1]}}) → SplineFktTxtLstUnicodeToText(Flatten[Sequence[TextToUnicode[SplineFktTxtLst(k)], k, 1, Length[SplineFktTxtLst]]]) → SplineFktFullTxtTextfield(L) → InputBox1Join({Sequence["f" + (k) + "(x)=" + (Sum[(Take[a_i, (4 * (k - 1)) + 1, (4 * k)] * {x^(3), x^(2), x, 1})]), k, 1, n]}) → SplineFktnSequence("Delete(f" + (k) + ")", k, 1, n) → SplinesDel, {"Delete(f1)", "Delete(f2)", "Delete(f3)", "Delete(f4)"}
AI 绘图提示语参考
绘制一条通过给定支撑点的三次样条插值曲线。在坐标平面上,用滑块控制支撑点数量,默认有五个点,横纵坐标分别由列表给出。曲线由多个三次多项式分段拼接而成,整体光滑连续,且在各连接点处保持函数值、一阶导数和二阶导数连续。图中显示完整的样条函数表达式,并可通过按钮切换显示整体曲线或各分段函数。同时提供输入框用于修改支撑点坐标,图形会随之动态更新。
以上提示语为根据原始绘图命令整理而来,仅供参考。