您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > HermiteMatlab
1.导数完全的情况下Hermite插值多项式拟合Matlab程序functionf=Hermite(x,y,y_1,x0)symst;f=0.0;if(length(x)==length(y))if(length(y)==length(y_1))n=length(x);elsedisp('y和y的导数的维数不相等!');return;endelsedisp('x和y的维数不相等!');return;endfori=1:nh=1.0;a=0.0;forj=1:nif(j~=i)h=h*(t-x(j))^2/((x(i)-x(j))^2);a=a+1/(x(i)-x(j));endendf=f+h*((x(i)-t)*(2*a*y(i)-y_1(i))+y(i));if(i==n)if(nargin==4)f=subs(f,'t',x0);elsef=vpa(f,6);endendend2.更具一般性的Hermite插值公式的Matlab程序function[h,yy]=HermiteInt1(x,y,x1,y1,xx)%求Hermite插值.x为插值节点,y为相应的函数值;在节点x1的一阶导数为y1;xx为插值点.%输出Hermite插值函数的表达式h,若输入参数中有插值点xx时,再输出xx相应的插值函数值yy.n=length(x);m=length(x1);symstyy=0;fori=1:n%下面求y(i)前的系数I=0;%下面这个循环是要找出x(i)在数组x1中的位置forj=1:mifx(i)==x(j)I=j;break;endendl1=1;l2=0;forj=1:nifj~=il1=l1*(t-x(j))/(x(i)-x(j));l2=l2+1/(x(i)-x(j));endendforj=1:mifj~=Il1=l1*(t-x1(j))/(x(i)-x1(j));l2=l2+1/(x(i)-x1(j));endendifI==0l2=0;endyy=yy+l1*(-l2*(t-x(i))+1)*y(i);endfori=1:m%下面求y1(i)前的系数l3=1;forj=1:nifx(j)~=x1(i)l3=l3*(t-x(j))/(x1(i)-x(j));endendforj=1:mifx1(j)~=x1(i)l3=l3*(t-x1(j))/(x1(i)-x1(j));endendyy=yy+l3*(t-x1(i))*y1(i);endh=simplify(yy);ifnargin==5yy=eval(subs(h,'xx','t'));end
本文标题:HermiteMatlab
链接地址:https://www.777doc.com/doc-2876137 .html