三次样条插值作业题_第1页
三次样条插值作业题_第2页
三次样条插值作业题_第3页
三次样条插值作业题_第4页
三次样条插值作业题_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精选优质文档-倾情为你奉上例1 设为定义在0,3上的函数,有下列函数值表:xi0123yi00.521.5且,试求区间0,3上满足上述条件的三次样条插值函数本算法求解出的三次样条插值函数将写成三弯矩方程的形式:其中,方程中的系数,将由Matlab代码中的变量Coefs_1、Coefs_2、Coefs_3以及Coefs_4的值求出。以下为Matlab代码:%=% 本段代码解决作业题的例1%=clear allclc % 自变量x与因变量y,两个边界条件的取值IndVar = 0, 1, 2, 3;DepVar = 0, 0.5, 2, 1.5; LeftBoun = 0.2;RightBoun

2、= -1; % 区间长度向量,其各元素为自变量各段的长度h = zeros(1, length(IndVar) - 1);for i = 1 : length(IndVar) - 1 h(i) = IndVar(i + 1) - IndVar(i);end % 为向量赋值mu = zeros(1, length(h);for i = 1 : length(mu) - 1 mu(i) = h(i) / (h(i) + h(i + 1);endmu(i + 1) = 1; % 为向量赋值lambda = zeros(1, length(h);lambda(1) = 1;for i = 2 : le

3、ngth(lambda) lambda(i) = h(i) / (h(i - 1) + h(i);end % 为向量d赋值d = zeros(1, length(h) + 1);d(1) = 6 * ( (DepVar(2) - DepVar(1) ) / ( IndVar(2) - IndVar(1) ) - LeftBoun) / h(1);for i = 2 : length(h) a = ( DepVar(i) - DepVar(i - 1) ) / ( IndVar(i) - IndVar(i - 1) ); b = ( DepVar(i + 1) - DepVar(i) ) / (

4、 IndVar(i + 1) - IndVar(i) ); c = (b - a) / ( IndVar(i + 1) - IndVar(i - 1) ); d(i) = 6 * c;endd(i + 1) = 6 *( RightBoun - ( DepVar(i + 1) - DepVar(i) ) / ( IndVar(i + 1) - IndVar(i) ) ) / h(i); % 为矩阵A赋值% 将主对角线上的元素全部置为2A = zeros( length(d), length(d) );for i = 1 : length(d) A(i, i) = 2;end% 将向量的各元素赋

5、给主对角线右侧第一条对角线for i = 1 : length(d) - 1 A(i, i + 1) = lambda(i);end% 将向量d的各元素赋给主对角线左侧第一条对角线for i = 1 : length(d) - 1 A(i + 1, i) = mu(i);end % 求解向量MM =A d' % 求解每一段曲线的函数表达式 for i = 1 : length(h) Coefs_1 = M(i) / (6 * h(i); Part_1 = conv( Coefs_1, . conv( -1, IndVar(i + 1), . conv( -1, IndVar(i + 1

6、), -1, IndVar(i + 1) ) ) ); S_1 = polyval (Part_1, IndVar(i) : 0.01 : IndVar(i + 1); Coefs_2 = M(i + 1)/(6 * h(i); Part_2 = conv( Coefs_2, . conv( 1, -IndVar(i), . conv( 1, -IndVar(i), 1, -IndVar(i) ) ) ); S_2 = polyval (Part_2, IndVar(i) : 0.01 : IndVar(i + 1); Coefs_3 = (DepVar(i) - M(i) * h(i)2 /

7、 6) / h(i); Part_3 = conv(Coefs_3, -1, IndVar(i + 1); S_3 = polyval (Part_3, IndVar(i) : 0.01 : IndVar(i + 1); Coefs_4 = (DepVar(i + 1) - M(i + 1) * h(i)2 / 6) / h(i); Part_4 = conv(Coefs_4, 1, -IndVar(i); S_4 = polyval (Part_4, IndVar(i) : 0.01 : IndVar(i + 1); S = S_1 + S_2 + S_3 + S_4; plot (IndV

8、ar(i) : 0.01 : IndVar(i + 1), S, 'LineWidth', 1.25) % 在样条插值曲线的相应位置标注该段曲线的函数表达式 text(i - 1, polyval(Part_1, 3), . 'itS', num2str(i), '(x)=', num2str(Coefs_1), '(', num2str( IndVar(i + 1) ), '-x)3+', . num2str(Coefs_2), '(x-', num2str( IndVar(i) ), '

9、)3+', num2str(Coefs_3), . '(', num2str( IndVar(i + 1) ), '-x)+', num2str(Coefs_4), '(x-', num2str( IndVar(i) ), ')', . 'FontName', 'Times New Roman', 'FontSize', 14) hold onend % 过x=1和x=2两个横轴点作垂线 %line(1, 1, 2.5, -0.5, 'LineStyle',

10、'-');line(2, 2, 2.5, -0.5, 'LineStyle', '-'); % 为x轴和y轴添加标注xlabel( 'itx', 'FontName', 'Times New Roman', . 'FontSize', 14, 'FontWeight', 'bold');ylabel( 'its(x)', 'FontName', 'Times New Roman', .'Rotat

11、ion', 0, 'FontSize', 14, 'FontWeight', 'bold');最终,三次样条插值函数s(x)表达式为:曲线的图像如图所示:专心-专注-专业例2 已知函数值表:xi1245yi1342试求在区间1,5上满足上述函数表所给出的插值条件的三次自然样条插值函数本算法求解出的三次样条插值函数将写成三弯矩方程的形式:其中,方程中的系数,将由Matlab代码中的变量Coefs_1、Coefs_2、Coefs_3以及Coefs_4的值求出。以下为Matlab代码:%=% 本段代码解决作业题的例2%=clear allclc

12、 % 自变量x与因变量y的取值IndVar = 1, 2, 4, 5;DepVar = 1, 3, 4, 2; % 区间长度向量,其各元素为自变量各段的长度h = zeros(1, length(IndVar) - 1);for i = 1 : length(IndVar) - 1 h(i) = IndVar(i + 1) - IndVar(i);end % 为向量赋值mu = zeros(1, length(h);for i = 1 : length(mu) - 1 mu(i) = h(i) / (h(i) + h(i + 1);endmu(i + 1) = 0; % 为向量赋值lambda

13、 = zeros(1, length(h);lambda(1) = 0;for i = 2 : length(lambda) lambda(i) = h(i) / (h(i - 1) + h(i);end % 为向量d赋值d = zeros(1, length(h) + 1);d(1) = 0;for i = 2 : length(h) a = ( DepVar(i) - DepVar(i - 1) ) / ( IndVar(i) - IndVar(i - 1) ); b = ( DepVar(i + 1) - DepVar(i) ) / ( IndVar(i + 1) - IndVar(i)

14、 ); c = (b - a) / ( IndVar(i + 1) - IndVar(i - 1) ); d(i) = 6 * c;endd(i + 1) = 0; % 为矩阵A赋值% 将主对角线上的元素全部置为2A = zeros( length(d), length(d) );for i = 1 : length(d) A(i, i) = 2;end% 将向量的各元素赋给主对角线右侧第一条对角线for i = 1 : length(d) - 1 A(i, i + 1) = lambda(i);end% 将向量d的各元素赋给主对角线左侧第一条对角线for i = 1 : length(d)

15、- 1 A(i + 1, i) = mu(i);end % 求解向量MM =A d' % 求解每一段曲线的函数表达式 for i = 1 : length(h) Coefs_1 = M(i) / (6 * h(i); Part_1 = conv( Coefs_1, . conv( -1, IndVar(i + 1), . conv( -1, IndVar(i + 1), -1, IndVar(i + 1) ) ) ); S_1 = polyval (Part_1, IndVar(i) : 0.01 : IndVar(i + 1); Coefs_2 = M(i + 1)/(6 * h(i

16、); Part_2 = conv( Coefs_2, . conv( 1, -IndVar(i), . conv( 1, -IndVar(i), 1, -IndVar(i) ) ) ); S_2 = polyval (Part_2, IndVar(i) : 0.01 : IndVar(i + 1); Coefs_3 = (DepVar(i) - M(i) * h(i)2 / 6) / h(i); Part_3 = conv(Coefs_3, -1, IndVar(i + 1); S_3 = polyval (Part_3, IndVar(i) : 0.01 : IndVar(i + 1); C

17、oefs_4 = (DepVar(i + 1) - M(i + 1) * h(i)2 / 6) / h(i); Part_4 = conv(Coefs_4, 1, -IndVar(i); S_4 = polyval (Part_4, IndVar(i) : 0.01 : IndVar(i + 1); S = S_1 + S_2 + S_3 + S_4; plot (IndVar(i) : 0.01 : IndVar(i + 1), S, 'LineWidth', 1.25) % 在样条插值曲线的相应位置标注该段曲线的函数表达式 text(i, polyval(Part_1, 5

18、), . 'itS', num2str(i), '(x)=', num2str(Coefs_1), '(', num2str( IndVar(i + 1) ), '-x)3+', . num2str(Coefs_2), '(x-', num2str( IndVar(i) ), ')3+', num2str(Coefs_3), . '(', num2str( IndVar(i + 1) ), '-x)+', num2str(Coefs_4), '(x-'

19、, num2str( IndVar(i) ), ')', . 'FontName', 'Times New Roman', 'FontSize', 14) hold onend % 过x=2和x=4两个横轴点作垂线 %line(2, 2, 4.5, 0.5, 'LineStyle', '-');line(4, 4, 4.5, 0.5, 'LineStyle', '-'); % 为x轴和y轴添加标注xlabel( 'itx', 'FontName

20、', 'Times New Roman', . 'FontSize', 14, 'FontWeight', 'bold');ylabel( 'its(x)', 'FontName', 'Times New Roman', .'Rotation', 0, 'FontSize', 14, 'FontWeight', 'bold');最终,三次自然样条插值函数s(x)表达式为:曲线的图像如图所示:例3 课后习题与思考题

21、第7题xi0.250.300.390.450.53yi0.50000.54770.62450.67080.7280试求在区间0.25,0.53上满足上述函数表所给出的插值条件的三次自然样条插值函数s(x)求解出的三次样条插值函数将写成三弯矩方程的形式:本题采用和例2基本相同的Matlab代码,只改变初始条件。最终,三次自然样条插值函数s(x)表达式为:曲线的图像如图所示:例4 课后习题与思考题第6题求的二次插值式,使:并计算的近似值并估计误差。本题采用拉格朗日二次插值法进行计算:以下为Matlab代码:%=% 本段代码解决课本第2章习题与思考题第6题%=clear allclc % 自变量x与

22、因变量y的取值IndVar = 100, 121, 144;DepVar = 10, 11, 12; % 构造拉格朗日插值函数Coefs_1 = DepVar(1) /. ( ( IndVar(1) - IndVar(2) ) * ( IndVar(1) - IndVar(3) ) );Part_1 = conv( Coefs_1,. conv( 1, -IndVar(2), 1, -IndVar(3) ) );f_1 = polyval (Part_1, IndVar(1) : 0.01 : IndVar(3); Coefs_2 = DepVar(2) /. ( ( IndVar(2) -

23、IndVar(1) ) * ( IndVar(2) - IndVar(3) ) );Part_2 = conv( Coefs_2,. conv( 1, -IndVar(1), 1, -IndVar(3) ) );f_2 = polyval (Part_2, IndVar(1) : 0.01 : IndVar(3); Coefs_3 = DepVar(3) /. ( ( IndVar(3) - IndVar(1) ) * ( IndVar(3) - IndVar(2) ) );Part_3 = conv( Coefs_3,. conv( 1, -IndVar(1), 1, -IndVar(2)

24、) );f_3 = polyval (Part_3, IndVar(1) : 0.01 : IndVar(3); f = f_1 + f_2 + f_3; plot (IndVar(1) : 0.01 : IndVar(3), f, 'LineWidth', 1.25); % 在样条插值曲线的相应位置标注该段曲线的函数表达式text(110, polyval(Part_1, 110) + polyval(Part_2, 110) + polyval(Part_3, 110), .'itP_2(x)=', num2str(Coefs_1), '(x-', num2str(IndVar(2), .')(x-', num2str(IndVar(3), ')+', num2str(Coefs_2),

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论