MATLAB-插值算法实现

上传人:206****923 文档编号:91849583 上传时间:2019-07-02 格式:DOC 页数:8 大小:25.52KB
返回 下载 相关 举报
MATLAB-插值算法实现_第1页
第1页 / 共8页
MATLAB-插值算法实现_第2页
第2页 / 共8页
MATLAB-插值算法实现_第3页
第3页 / 共8页
MATLAB-插值算法实现_第4页
第4页 / 共8页
MATLAB-插值算法实现_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《MATLAB-插值算法实现》由会员分享,可在线阅读,更多相关《MATLAB-插值算法实现(8页珍藏版)》请在金锄头文库上搜索。

1、1.高斯插值function f = Gauss(x,y,x0)if(length(x) = length(y) n = length(x);else disp(x和y的维数不相等!); return;endxx =linspace(x(1),x(n),(x(2)-x(1);if(xx = x) disp(节点之间不是等距的!); return;endif( mod(n,2) =1) if(nargin = 2) f = GStirling(x,y,n); else if(nargin = 3) f = GStirling(x,y,n,x0); end endelse if(nargin =

2、2) f = GBessel(x,y,n); else if(nargin = 3) f = GBessel(x,y,n,x0); end endendfunction f = GStirling(x,y,n,x0)syms t;nn = (n+1)/2;f = y(nn);for(i=1:n-1) for(j=i+1:n) y1(j) = y(j)-y(j-1); end if(mod(i,2)=1) c(i) = (y1(i+n)/2)+y1(i+n+2)/2)/2; else c(i) = y1(i+n+1)/2)/2; end if(mod(i,2)=1) l = t+(i-1)/2;

3、 for(k=1:i-1) l = l*(t+(i-1)/2-k); end else l_1 = t+i/2-1; l_2 = t+i/2; for(k=1:i-1) l_1 = l_1*(t+i/2-1-k); l_2 = l_2*(t+i/2-k); end l = l_1 + l_2; end l = l/factorial(i); f = f + c(i)*l; simplify(f); f = vpa(f, 6); y = y1; if(i=n-1) if(nargin = 4) f = subs(f,t,(x0-x(nn)/(x(2)-x(1); end endendfuncti

4、on f = GBessel(x,y,n,x0)syms t;nn = n/2;f = (y(nn)+y(nn+1)/2;for(i=1:n-1) for(j=i+1:n) y1(j) = y(j)-y(j-1); end if(mod(i,2)=1) c(i) = y1(i+n+1)/2)/2; else c(i) = (y1(i+n)/2)+y1(i+n+2)/2)/2; end if(mod(i,2)=0) l = t+i/2-1; for(k=1:i-1) l = l*(t+i/2-1-k); end else l_1 = t+(i-1)/2; l_2 = t+(i-1)/2-1; f

5、or(k=1:i-1) l_1 = l_1*(t+(i-1)/2-k); l_2 = l_2*(t+(i-1)/2-1-k); end l = l_1 + l_2; end l = l/factorial(i); f = f + c(i)*l; simplify(f); f = vpa(f, 6); y = y1; if(i=n-1) if(nargin = 4) f = subs(f,t,(x0-x(nn)/(x(2)-x(1); end endend2. Hermite(艾尔米特)插值 function f = Hermite(x,y,y_1,x0)syms t;f = 0.0;if(le

6、ngth(x) = length(y) if(length(y) = length(y_1) n = length(x); else disp(y和y的导数的维数不相等!); return; endelse disp(x和y的维数不相等!); return;endfor i=1:n h = 1.0; a = 0.0; for j=1:n if( j = i) h = h*(t-x(j)2/(x(i)-x(j)2); a = a + 1/(x(i)-x(j); end end f = f + h*(x(i)-t)*(2*a*y(i)-y_1(i)+y(i); if(i=n) if(nargin

7、= 4) f = subs(f,t,x0); else f = vpa(f,6); end endend3拉格朗日插值function f = Language(x,y,x0)syms t;if(length(x) = length(y) n = length(x); else disp(x和y的维数不相等!); return;end %检错f = 0.0;for(i = 1:n) l = y(i); for(j = 1:i-1) l = l*(t-x(j)/(x(i)-x(j); end; for(j = i+1:n) l = l*(t-x(j)/(x(i)-x(j); %计算拉格朗日基函数

8、 end; f = f + l; %计算拉格朗日插值函数 simplify(f); %化简 if(i=n) if(nargin = 3) f = subs(f,t,x0); %计算插值点的函数值 else f = collect(f); %将插值多项式展开 f = vpa(f,6); %将插值多项式的系数化成6位精度的小数 end endend4. 利用均差牛顿插值function f = Newton(x,y,x0)syms t;if(length(x) = length(y) n = length(x); c(1:n) = 0.0;else disp(x和y的维数不相等!); return

9、;endf = y(1);y1 = 0;l = 1; for(i=1:n-1) for(j=i+1:n) y1(j) = (y(j)-y(i)/(x(j)-x(i); end c(i) = y1(i+1); l = l*(t-x(i); f = f + c(i)*l; simplify(f); y = y1; if(i=n-1) if(nargin = 3) f = subs(f,t,x0); else f = collect(f); %将插值多项式展开 f = vpa(f, 6); end endend5.向后牛顿插值function f = Newtonback(x,y,x0)syms t

10、;if(length(x) = length(y) n = length(x); c(1:n) = 0.0;else disp(x和y的维数不相等!); return;endf = y(n);y1 = 0;xx =linspace(x(1),x(n),(x(2)-x(1);if(xx = x) disp(节点之间不是等距的!); return;endfor(i=1:n-1) for(j=i+1:n) y1(j) = y(j)-y(j-1); end c(i) = y1(n); l = t; for(k=1:i-1) l = l*(t+k); end; f = f + c(i)*l/factorial(i); simplify(f); y = y1; if(i=n-1) if(nargin = 3) f = subs(f,t,(x0-x(n)/(x(2)-x(1); else f = collect(f); f = vpa(f, 6); end endend5.向前牛顿插值function f = Newtonforward(x,y,x0)syms t;if(length(x) = length(y)

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 中学教育 > 其它中学文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号