matlab在科学计算中应用062.ppt
文本预览下载声明
6.2.5样条插值的MATLAB表示 - 定义三次样条函数类: S=csapi(x,y) 其中x=[x1,x2,….,xn], y=[y1,y2,…,yn]为样本点。 S返回样条函数对象的插值结果,包括子区间点、各区间点三次多项式系数等。 - 可用 fnplt()绘制出插值结果,其调用格式: fnplt(S) - 对给定的向量xp, 可用fnval()函数计算, 其调用格式: yp=fnval(S,xp) 其中得出的yp是xp上各点的插值结果。 例:已知y0=sin(x0),x0= =[0,0.4,1,2,pi], 求该函数 三次样条插值结果 解法: x0=[0,0.4,1,2,pi]; y0=sin(x0); sp=csapi(x0,y0), fnplt(sp, r:); hold on, sp = form: pp breaks: [0 0.4000 1 2 3.1416] coefs: [4x4 double] pieces: 4 order: 4 dim: 1 ezplot(sin(t),[0,pi]); plot(x0,y0,o) 例: 解法: x=0:.12:1; y=(x.^2-3*x+5).*exp(-5*x).*sin(x); sp=csapi(x,y); fnplt(sp) Columns 7 through 12 0.4800 0.6000 -0.2404 0.7652 -0.5776 0.1588 0.6000 0.7200 -0.4774 0.6787 -0.4043 0.1001 0.7200 0.8400 -0.4559 0.5068 -0.2621 0.0605 0.8400 0.9600 -0.4559 0.3427 -0.1601 0.0356 - 格式 S=csapi({x1,x2,…,xn},z) 例:对函数 x0=-3:.6:3; y0=-2:.4:2; [x,y]=ndgrid(x0,y0); % 注意这里只能用 ndgrid, 否则生成的 z 矩阵 顺序有问题 z=(x.^2-2*x).*… exp(-x.^2-y.^2-x.*y); sp=csapi({x0,y0},z); fnplt(sp); 三次样条数据插值 -Matlab实现: 函数spline 格式 yy = spline(x,y,xx) 例:对离散分布在y=exp(x)sin(x)函数曲线上的数据点进行样条插值计算: x = [0 2 4 5 8 12 12.8 17.2 19.9 20]; y = exp(x).*sin(x); xx = 0:.25:20; yy = spline(x,y,xx); plot(x,y,o,xx,yy) B样条函数及其MATLAB表示 S=spapi(k,x,y) x0=[0,0.4,1,2,pi]; y0=sin(x0); ezplot(sin(t),[0,pi]); hold on sp1=csapi(x0,y0); fnplt(sp1,--); % 三次分段多项式样条插值 x=0:.12:1; y=(x.^2-3*x+5).*exp(-5*x).*sin(x); ezplot((x^2-3*x+5)*exp(-5*x)*sin(x),[0,1]), hold on sp1=csapi(x,y); fnplt(sp1,--); sp2=spapi(5,x,y); fnplt(sp2,r:) 6.2.6 基于样条插值的数值微积分运算 基于样条插值的数值微分运算 格式: Sd=fnder(S,k) 该函数可以求取S的k阶导数。 格式: Sd=fnder(S,[k1,…,kn]) 可以求取多变量函数的偏导数 例: 例: 解法: Step1:拟合曲面 x0=-3:.3:3; y0=-2:.2:2; [x,y]=ndgrid(x0,y0); z=(x.^2-2*x).*exp(-x.^2-y.^2-x.*y); sp=spapi({5,5},… {x0,y0},z); %B样条 dspxy=fnder(sp,[1,1]); fnplt(dspxy) %生成样条图 理论方法: syms x y; z=(x^
显示全部