三次、五次多项式插值(附代码)

您所在的位置:网站首页 三次多项式求解公式 三次、五次多项式插值(附代码)

三次、五次多项式插值(附代码)

2024-07-15 14:58| 来源: 网络整理| 查看: 265

文章目录 一、三次多项式插值二、五次多项式插值三、matlab代码   三次、五次多项式插值在工程实践中很常见。求解多项式的系数最直接的方法是根据端点处的约束条件,列出线性方程组,再写成矩阵方程AX=B,然后用通用的方法(如高斯消元法、LU分解等)解矩阵方程。   本博文利用matlab符号计算的功能,给出三次、五次多项式插值的系数解析解(不需要解矩阵方程),并尽可能减少运算量。

一、三次多项式插值

  设三次多项式的表达式: f ( u ) = a 0 + a 1 ( u − u s ) + a 2 ( u − u s ) 2 + a 3 ( u − u s ) 3 (1) f(u)=a_0+a_1(u-u_s)+a_2(u-u_s)^2+a_3(u-u_s)^3 \tag 1 f(u)=a0​+a1​(u−us​)+a2​(u−us​)2+a3​(u−us​)3(1)   这里为什么不设三次多项式表达式为 f ( u ) = a 0 + a 1 u + a 2 u 2 + a 3 u 3 f(u)=a_0+a_1u+a_2u^2+a_3u^3 f(u)=a0​+a1​u+a2​u2+a3​u3呢?采用式(1)的表达式,可以大大减少求取多项式系数的计算量,读者可以自行尝试加以对比。

  插值的端点条件为: { f ( u s ) = p s f ′ ( u s ) = v s f ( u e ) = p e f ′ ( u e ) = v e (2) \begin{cases} f(u_s)=p_s\\ f'(u_s)=v_s\\ f(u_e)=p_e\\ f'(u_e)=v_e\\ \tag 2 \end{cases} ⎩ ⎨ ⎧​f(us​)=ps​f′(us​)=vs​f(ue​)=pe​f′(ue​)=ve​​(2)   利用matlab符号计算功能,解得: { a 0 = p s a 1 = v s a 2 = [ 3 ( p e − p s ) + ( 2 v s + v e ) ( u s − u e ) ] / ( u e − u s ) 2 a 3 = − [ 2 ( p e − p s ) + ( v s + v e ) ( u s − u e ) ] / ( u e − u s ) 3 (3) \begin{cases} a_0=p_s\\ a_1=v_s\\ a_2=[3(p_e-p_s)+(2v_s+v_e)(u_s-u_e)]/(u_e-u_s)^2\\ a_3=-[2(p_e-p_s) + (v_s+v_e)(u_s-u_e)]/(u_e-u_s)^3\\ \tag 3 \end{cases} ⎩ ⎨ ⎧​a0​=ps​a1​=vs​a2​=[3(pe​−ps​)+(2vs​+ve​)(us​−ue​)]/(ue​−us​)2a3​=−[2(pe​−ps​)+(vs​+ve​)(us​−ue​)]/(ue​−us​)3​(3)

二、五次多项式插值

  设五次多项式的表达式: f ( u ) = a 0 + a 1 ( u − u s ) + a 2 ( u − u s ) 2 + a 3 ( u − u s ) 3 + a 4 ( u − u s ) 4 + a 5 ( u − u s ) 5 (4) f(u)=a_0+a_1(u-u_s)+a_2(u-u_s)^2+a_3(u-u_s)^3+a_4(u-u_s)^4+a_5(u-u_s)^5 \tag 4 f(u)=a0​+a1​(u−us​)+a2​(u−us​)2+a3​(u−us​)3+a4​(u−us​)4+a5​(u−us​)5(4)

  插值的端点条件为: { f ( u s ) = p s f ′ ( u s ) = v s f ′ ′ ( u s ) = a s f ( u e ) = p e f ′ ( u e ) = v e f ′ ′ ( u e ) = a e (5) \begin{cases} f(u_s)=p_s\\ f'(u_s)=v_s\\ f''(u_s)=a_s\\ f(u_e)=p_e\\ f'(u_e)=v_e\\ f''(u_e)=a_e\\ \tag 5 \end{cases} ⎩ ⎨ ⎧​f(us​)=ps​f′(us​)=vs​f′′(us​)=as​f(ue​)=pe​f′(ue​)=ve​f′′(ue​)=ae​​(5)

  利用matlab符号计算功能,解得: { a 0 = p s a 1 = v s a 2 = a s / 2 a 3 = [ ( 20 ( p e − p s ) + ( 8 v e + 12 v s ) ( u s − u e ) + ( a e − 3 a s ) ( u e 2 + u s 2 ) + ( 6 a s − 2 a e ) u e u s ) ] / [ 2 ( u e − u s ) 3 ] a 4 = [ − ( 30 ( p e − p s ) + ( 14 v e + 16 v s ) ( u s − u e ) + ( 2 a e − 3 a s ) ( u e 2 + u s 2 ) + ( 6 a s − 4 a e ) u e u s ) ] / [ 2 ( u e − u s ) 4 ] a 5 = [ ( 12 ( p e − p s ) + ( 6 v e + 6 v s ) ( u s − u e ) + ( a e − a s ) ( u e 2 + u s 2 ) + ( 2 a s − 2 a e ) u e u s ) ] / [ 2 ( u e − u s ) 5 ] (6) \begin{cases} a_0=p_s\\ a_1=v_s\\ a_2=a_s/2\\ a_3=[(20(p_e - p_s) + (8v_e + 12v_s)(u_s - u_e) + (a_e - 3a_s)(u_e^2 + u_s^2) + (6a_s - 2a_e)u_eu_s)]/[2(u_e-u_s)^3]\\ a_4=[ -(30(p_e - p_s) + (14v_e + 16v_s)(u_s - u_e) + (2a_e - 3a_s)(u_e^2 + u_s^2) + (6a_s - 4a_e)u_eu_s)]/[2(u_e-u_s)^4]\\ a_5=[(12(p_e - p_s) + (6v_e + 6v_s)(u_s - u_e) + (a_e - a_s)(u_e^2 + u_s^2) + (2a_s - 2a_e)u_eu_s)]/[2(u_e-u_s)^5]\\ \tag 6 \end{cases} ⎩ ⎨ ⎧​a0​=ps​a1​=vs​a2​=as​/2a3​=[(20(pe​−ps​)+(8ve​+12vs​)(us​−ue​)+(ae​−3as​)(ue2​+us2​)+(6as​−2ae​)ue​us​)]/[2(ue​−us​)3]a4​=[−(30(pe​−ps​)+(14ve​+16vs​)(us​−ue​)+(2ae​−3as​)(ue2​+us2​)+(6as​−4ae​)ue​us​)]/[2(ue​−us​)4]a5​=[(12(pe​−ps​)+(6ve​+6vs​)(us​−ue​)+(ae​−as​)(ue2​+us2​)+(2as​−2ae​)ue​us​)]/[2(ue​−us​)5]​(6)

三、matlab代码 %{ Function: solve_polyInp_coes Description: 求解三次、五次插值多项式的系数 Input: 插值多项式结构体 Output: 三次、五次插值多项式的系数a,状态sta(1表示成功,0表示失败) Author: Marc Pony([email protected]) %} function [a, sta] = solve_polyInp_coes(polyInp) sta = 1; us = polyInp.us; ue = polyInp.ue; ps = polyInp.ps; pe = polyInp.pe; vs = polyInp.vs; ve = polyInp.ve; as = polyInp.as; ae = polyInp.ae; if abs(ue - us)


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3