当前位置:首页 > 数值分析上机实验报告总结归纳
else l=l; end end f=f+Rf(s(q))*l;%求插值函数 end plot(x,f,'r')%作出插值函数曲线 grid on hold on 分段线性插值源程序 clear n=input('将区间分为的等份数输入:\\n'); s=[-1+2/n*[0:n]];%%%给定的定点,Rf为给定的函数 m=0; hh=; for x=-1:hh:1; ff=0; for k=1:n+1;%%%求插值基函数 switch k case 1 if x<=s(2); l=(x-s(2))./(s(1)-s(2)); else l=0; end case n+1 if x>s(n); l=(x-s(n))./(s(n+1)-s(n)); else l=0; end otherwise if x>=s(k-1)&x<=s(k); l=(x-s(k-1))./(s(k)-s(k-1)); else if x>=s(k)&x<=s(k+1); l=(x-s(k+1))./(s(k)-s(k+1)); else l=0; end end end ff=ff+Rf(s(k))*l;%%求插值函数值 end m=m+1; f(m)=ff; end %%%作出曲线 x=-1:hh:1; plot(x,f,'r'); grid on hold on 三次样条插值源程序:(采用第一边界条件) clear n=input('将区间分为的等份数输入:\\n'); %%%插值区间 a=-1; b=1; hh=;%画图的步长 s=[a+(b-a)/n*[0:n]];%%%给定的定点,Rf为给定的函数 %%%%第一边界条件Rf\-1),Rf\ v=5000*1/(1+25*a*a)^3-50/(1+25*a*a)^4; for k=1:n;%取出节点间距 h(k)=s(k+1)-s(k); end for k=1:n-1;%求出系数向量lamuda,miu la(k)=h(k+1)/(h(k+1)+h(k)); miu(k)=1-la(k); end %%%%赋值系数矩阵A for k=1:n-1; for p=1:n-1; switch p case k A(k,p)=2; case k-1 A(k,p)=miu(p+1); case k+1 A(k,p)=la(p-1); otherwise A(k,p)=0; end end end %%%%求出d阵 for k=1:n-1; switch k case 1 d(k)=6*f2c([s(k) s(k+1) s(k+2)])-miu(k)*v; case n-1 d(k)=6*f2c([s(k) s(k+1) s(k+2)])-la(k)*v; otherwise d(k)=6*f2c([s(k) s(k+1) s(k+2)]); end end %%%%求解M阵 M=A\\d'; M=[v;M;v]; %%%% m=0; f=0; for x=a:hh:b; if x==a; p=1; else p=ceil((x-s(1))/((b-a)/n)); end ff1=0; ff2=0; ff3=0; ff4=0; m=m+1; ff1=1/h(p)*(s(p+1)-x)^3*M(p)/6; ff2=1/h(p)*(x-s(p))^3*M(p+1)/6; ff3=((Rf(s(p+1))-Rf(s(p)))/h(p)-h(p)*(M(p+1)-M(p))/6)*(x-s(p)); ff4=Rf(s(p))-M(p)*h(p)*h(p)/6; f(m)=ff1+ff2+ff3+ff4 ; end %%%作出插值图形 x=a:hh:b; plot(x,f,'k') hold on grid on 结果分析和讨论: 1本实验采用函数f(x)?进行数值插值,插值区间为[-1,1],给定节点为 21?25xxj=-1+jh,h=,j=0,…,n。下面分别给出Lagrange插值,三次样条插值,线性插值的函数曲线和数据表。图中只标出Lagrange插值的十次多项式的曲线,其它曲线没有标出,从数据表中可以看出具体的误差。 表中,L10(x)为Lagrange插值的10次多项式,S10(x),S40(x)分别代表n=10,40的三次样条插值函数,X10(x),X40(x)分别代表n=10,40的线性分段插值函数。 x f(x) L10(x) S10(x) S40(x) X10(x) X40(x) 0 从以上结果可以看到,用三次样条插值和线性分段插值,不会出现多项式插值是出现的Runge现象,插值效果明显提高。进一步说,为了提高插值精度,用三次样条插值和线性分段插值是可以增加插值节点的办法来满足要求,而用多项式插值函数时,节点数的增加必然会使多项式的次数增加,这样会引起数值不稳定,所以说这两种插值要比多项式插值好的多。而且在给定节点数的条件下,三次样条插值的精度要优于线性分段插值,曲线的光滑性也要好一些。 实验报告四 题目: 多项式最小二乘法 摘要:对于具体实验时,通常不是先给出函数的解析式,再进行实验,而是通过实验的观察和测量给出离散的一些点,再来求出具体的函数解析式。又因为测量误差的存在,实际真实的解析式曲线并不一定通过测量给出的所有点。最小二乘法是求解这一问题的很好的方法,本实验运用这一方法实现对给定数据的拟合。 前言:(目的和意义) 1. 学习使用最小二成法的原理 2. 了解法方程的特性 数学原理: 对于给定的测量数据(xi,fi)(i=1,2,…,n),设函数分布为 特别的,取?j(x)为多项式 ?j(x)?xj (j=0, 1,…,m) 则根据最小二乘法原理,可以构造泛函 令 ?H?0 (k=0, 1,…,m) ?ak则可以得到法方程 求该解方程组,则可以得到解a0,a1,?,am,因此可得到数据的最小二乘解 程序设计: 本实验采用Matlab的M文件编写。其中多项式函数?j?xj写成function的方式,如下 function y=fai(x,j) y=1; for i=1:j y=x.*y; end 写成如上形式即可,下面给出主程序。 多项式最小二乘法源程序 clear %%%给定测量数据点(s,f) s=[3 4 5 6 7 8 9]; f=[ ]; %%%计算给定的数据点的数目 n=length(f); %%%给定需要拟合的数据的最高次多项式的次数 m=10; %%%程序主体 for k=0:m; g=zeros(1,m+1);
共分享92篇相关文档