分享
分销 收藏 举报 申诉 / 23
播放页_导航下方通栏广告

类型matlab插值计算.doc

  • 上传人:丰****
  • 文档编号:3104372
  • 上传时间:2024-06-18
  • 格式:DOC
  • 页数:23
  • 大小:369KB
  • 下载积分:10 金币
  • 播放页_非在线预览资源立即下载上方广告
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    matlab 计算
    资源描述:
    插值方法 晚上做一个曲线拟合,结果才开始用最小二乘法拟合时,拟合出来的东西太难看了! 于是尝试用其他方法。 经过一番按图索骥,终于发现做曲线拟合的话,采用插值法是比较理想的方法。尤其是样条插值,插完后线条十分光滑。 方法付后,最关键的问题是求解时要积分,放这里想要的时候就可以直接过来拿,不用死去搜索啦。呵呵 插值方法的Matlab实现 一维数据插值 MATLAB中用函数interp1来拟合一维数据,语法是YI = INTERP1(X,Y,XI,方法) 其中(X, Y) 是已给的数据点, XI 是插值点,  其中方法主要有       'linear'   -线性插值,默认       'pchip'   -逐段三次Hermite插值       'spline'   -逐段三次样条函数插值 其中最后一种插值的曲线比较平滑 例: x=0:.12:1; x1=0:.02:1;%(其中x=0:.12:1表示显示的插值点,x1=0:.02:1表示插值的步长) y=(x.^2-3*x+5).*exp(-5*x).*sin(x); plot(x,y,'o'); hold on; y1=interp1(x,y,x1,'spline'); plot(x1,y1,':') 如果要根据样本点求函数的定积分,而函数又是比较光滑的,则可以用样条函数进行插值后再积分,在MATLAB中可以编写如下程序: function y=quadspln(x0,y0,a,b) f=inline('interp1(x0,y0,x,''spline'')','x','x0','y0'); y=quadl(f,a,b,1e-8,[],x0,y0);  现求sin(x)在区间[0,pi]上的定积分,只取5点 x0=[0,0.4,1,2,pi]; y0=sin(x0); I=quadspln(x0,y0,0,pi) 结果得到的值为 2.01905, 精确值为2 求一段matlab插值程序 悬赏分:20 - 解决时间:2009-12-26 19:57 已知5个数据点:x=[0.25 0.5 0.75 1] y=[0 0.3104 0.6177 0.7886 1] ,求一段matlab插值程序,求过这5个数据点的插值多项式,并在x-y坐标中画出y=f(x)图形,并且求出f(x)与x轴围成图形的面积(积分),不胜感激! 使用Lagrange 插值多项式的方法: 首先把下面的代码复制到M文件中,保存成lagran function [C,L]=lagran(X,Y) % input - X is a vector that contains a list of abscissas % - Y is a vector that contains a list of ordinates % output - C is a matrix that contains the coefficients of the lagrange interpolatory polynomial %- L is a matrix that contains the lagrange coefficients polynomial w=length(X); n=w-1; L=zeros(w,w); for k=1:n+1 V=1; for j=1:n+1 if k~=j V=conv(V,poly(X(j)))/(X(k)-X(j)); end end L(k,:)=V; end C=Y*L; 然后在命令窗口中输入以下内容: x=[0 0.25 0.5 0.75 1]; y=[0 0.3104 0.6177 0.7886 1]; lagran(x,y) ans = 3.3088 -6.3851 3.3164 0.7599 0 得到的数据就是多项式各项的系数,注意最后一个是常数项,即x^0, 所以表达式为:f=3.3088*x.^4-6.3851*x.^3+3.3164*x.^2 +0.7599*x 求面积就是积分求解 >> f=@(x)3.3088*x.^4-6.3851*x.^3+3.3164*x.^2 +0.7599*x; >> quad(f,0,1) ans = 0.5509 这些点肯定是通过这个多项式的! MATLAB插值与拟合   §1曲线拟合 实例:温度曲线问题 气象部门观测到一天某些时刻的温度变化数据为: t 0 1 2 3 4 5 6 7 8 9 10 T 13 15 17 14 16 19 26 24 26 27 29 试描绘出温度变化曲线。 曲线拟合就是计算出两组数据之间的一种函数关系,由此可描绘其变化曲线及估计非采集数据对应的变量信息。 曲线拟合有多种方式,下面是一元函数采用最小二乘法对给定数据进行多项式曲线拟合,最后给出拟合的多项式系数。 1.线性拟合函数:regress() 调用格式:  b=regress(y,X)                      [b,bint,r,rint,stats]= regress(y,X)                      [b,bint,r,rint,stats]= regress(y,X,alpha) 说明:b=regress(y,X)返回X与y的最小二乘拟合值,及线性模型的参数值β、ε。该函数求解线性模型: y=Xβ+ε β是p´1的参数向量;ε是服从标准正态分布的随机干扰的n´1的向量;y为n´1的向量;X为n´p矩阵。 bint返回β的95%的置信区间。r中为形状残差,rint中返回每一个残差的95%置信区间。Stats向量包含R2统计量、回归的F值和p值。 例1:设y的值为给定的x的线性函数加服从标准正态分布的随机干扰值得到。即y=10+x+ε ;求线性拟合方程系数。 程序: x=[ones(10,1) (1:10)'];       y=x*[10;1]+normrnd(0,0.1,10,1);       [b,bint]=regress(y,x,0.05) 结果:  x =      1     1      1     2      1     3      1     4      1     5      1     6      1     7      1     8      1     9      1    10 y =    10.9567    11.8334    13.0125    14.0288    14.8854    16.1191    17.1189    17.9962    19.0327    20.0175 b =               9.9213               1.0143 bint =             9.7889   10.0537             0.9930    1.0357 即回归方程为:y=9.9213+1.0143x 2.多项式曲线拟合函数:polyfit( ) 调用格式:  p=polyfit(x,y,n)                      [p,s]= polyfit(x,y,n) 说明:x,y为数据点,n为多项式阶数,返回p为幂次从高到低的多项式系数向量p。矩阵s用于生成预测值的误差估计。(见下一函数polyval) 例2:由离散数据 x 0 .1 .2 .3 .4 .5 .6 .7 .8 .9 1 y .3 .5 1 1.4 1.6 1.9 .6 .4 .8 1.5 2 拟合出多项式。 程序:               x=0:.1:1;             y=[.3 .5 1 1.4 1.6 1.9 .6 .4 .8 1.5 2];             n=3;             p=polyfit(x,y,n)             xi=linspace(0,1,100);%linspace用于创建向量,如:x=linspace(a1,a2,a3); a1为第一个元素,a2为最末一个元素,a3表示x共有a3个元素,每个元素间距相等。 z=polyval(p,xi); %多项式求值             plot(x,y,'o',xi,z,'k:',x,y,'b')             legend('原始数据','3阶曲线') 结果: p =    16.7832  -25.7459   10.9802   -0.0035 多项式为:16.7832x3-25.7459x2+10.9802x-0.0035 曲线拟合图形: 如果是n=6,则如下图:   也可由函数给出数据。 例3:x=1:20,y=x+3*sin(x) 程序:        x=1:20;        y=x+3*sin(x);        p=polyfit(x,y,6)        xi=linspace(1,20,100);        z=polyval(p,xi);     %多项式求值函数        plot(x,y,'o',xi,z,'k:',x,y,'b')        legend('原始数据','6阶曲线') 结果: p = 0.0000   -0.0021    0.0505   -0.5971    3.6472   -9.7295   11.3304   再用10阶多项式拟合       程序:x=1:20; y=x+3*sin(x); p=polyfit(x,y,10) xi=linspace(1,20,100); z=polyval(p,xi); plot(x,y,'o',xi,z,'k:',x,y,'b') legend('原始数据','10阶多项式') 结果:p =   Columns 1 through 7     0.0000   -0.0000    0.0004   -0.0114    0.1814   -1.8065   11.2360   Columns 8 through 11   -42.0861   88.5907  -92.8155   40.2671   可用不同阶的多项式来拟合数据,但也不是阶数越高拟合的越好。 3.         多项式曲线求值函数:polyval( ) 调用格式:  y=polyval(p,x)                      [y,DELTA]=polyval(p,x,s) 说明:y=polyval(p,x)为返回对应自变量x在给定系数P的多项式的值。 [y,DELTA]=polyval(p,x,s) 使用polyfit函数的选项输出s得出误差估计Y DELTA。它假设polyfit函数数据输入的误差是独立正态的,并且方差为常数。则Y DELTA将至少包含50%的预测值。 (未完) 4.         多项式曲线拟合的评价和置信区间函数:polyconf( ) 调用格式:  [Y,DELTA]=polyconf(p,x,s)                      [Y,DELTA]=polyconf(p,x,s,alpha) 说明:[Y,DELTA]=polyconf(p,x,s)使用polyfit函数的选项输出s给出Y的95%置信区间Y DELTA。它假设polyfit函数数据输入的误差是独立正态的,并且方差为常数。1-alpha为置信度。 例4:给出上面例1的预测值及置信度为90%的置信区间。 程序:   x=0:.1:1;         y=[.3 .5 1 1.4 1.6 1.9 .6 .4 .8 1.5 2]         n=3;         [p,s]=polyfit(x,y,n)         alpha=0.05;        [Y,DELTA]=polyconf(p,x,s,alpha)        结果:    p =    16.7832  -25.7459   10.9802   -0.0035 s =    R: [4x4 double]   df: 7 normr: 1.1406 Y =   Columns 1 through 9    -0.0035    0.8538    1.2970    1.4266    1.3434    1.1480    0.9413    0.8238    0.8963   Columns 10 through 11     1.2594    2.0140 5.         稳健回归函数:robust( ) 稳健回归是指此回归方法相对于其他回归方法而言,受异常值的影响较小。 调用格式:  b=robustfit(x,y)                      [b,stats]=robustfit(x,y)                      [b,stats]=robustfit(x,y,’wfun’,tune,’const’) 说明:b返回系数估计向量;stats返回各种参数估计;’wfun’指定一个加权函数;tune为调协常数;’const’的值为’on’(默认值)时添加一个常数项;为’off ’时忽略常数项。 例5:演示一个异常数据点如何影响最小二乘拟合值与稳健拟合。首先利用函数y=10-2x加上一些随机干扰的项生成数据集,然后改变一个y的值形成异常值。调用不同的拟合函数,通过图形观查影响程度。 程序:x=(1:10)’; y=10-2*x+randn(10,1); y(10)=0; bls=regress(y,[ones(10,1) x]) %线性拟合 brob=robustfit(x,y) %稳健拟合 scatter(x,y) hold on plot(x,bls(1)+bls(2)*x,’:’) plot(x,brob(1)+brob(2)*x,’r’) 结果 : bls =                     8.4452                    -1.4784 brob =                    10.2934                    -2.0006   分析:稳健拟合(实线)对数据的拟合程度好些,忽略了异常值。最小二乘拟合(点线)则受到异常值的影响,向异常值偏移。 6.         向自定义函数拟合 对于给定的数据,根据经验拟合为带有待定常数的自定义函数。 所用函数:nlinfit( ) 调用格式:  [beta,r,J]=nlinfit(X,y,’fun’,beta0) 说明:beta返回函数’fun’中的待定常数;r表示残差;J表示雅可比矩阵。X,y为数据;‘fun’自定义函数;beta0待定常数初值。 例6:在化工生产中获得的氯气的级分y随生产时间x下降,假定在x≥8时,y与x之间有如下形式的非线性模型:        现收集了44组数据,利用该数据通过拟合确定非线性模型中的待定常数。 x            y                   x            y                   x            y 8            0.49               16           0.43               28           0.41 8            0.49               18           0.46               28           0.40 10           0.48               18           0.45               30           0.40 10           0.47               20           0.42               30           0.40 10           0.48               20           0.42               30           0.38 10           0.47               20           0.43               32           0.41 12           0.46               20           0.41               32           0.40 12           0.46               22           0.41               34           0.40 12           0.45               22           0.40               36           0.41 12           0.43               24           0.42               36           0.36 14           0.45               24           0.40               38           0.40 14           0.43               24           0.40               38           0.40 14           0.43               26           0.41               40           0.36 16           0.44               26           0.40               42           0.39 16           0.43               26           0.41        首先定义非线性函数的m文件:fff6.m function yy=model(beta0,x)   a=beta0(1);   b=beta0(2);   yy=a+(0.49-a)*exp(-b*(x-8));        程序: x=[8.00 8.00 10.00 10.00 10.00 10.00 12.00 12.00 12.00 14.00 14.00 14.00...       16.00 16.00 16.00 18.00 18.00 20.00 20.00 20.00 20.00 22.00 22.00 24.00...        24.00 24.00 26.00 26.00 26.00 28.00 28.00 30.00 30.00 30.00 32.00 32.00...      34.00 36.00 36.00 38.00 38.00 40.00 42.00]';    y=[0.49 0.49 0.48 0.47 0.48 0.47 0.46 0.46 0.45 0.43 0.45 0.43 0.43 0.44 0.43...      0.43 0.46 0.42 0.42 0.43 0.41 0.41 0.40 0.42 0.40 0.40 0.41 0.40 0.41 0.41...      0.40 0.40 0.40 0.38 0.41 0.40 0.40 0.41 0.38 0.40 0.40 0.39 0.39]';      beta0=[0.30 0.02]; betafit = nlinfit(x,y,@model ,beta0) 结果:betafit =                 0.3896 0.1011        即:a=0.3896 ,b=0.1011 拟合函数为: yy=0.3896+0.1004*exp(-0.1011*(x-8)) excell数据调入matlab中的方法:import data→data→x=data(:,所调出数据的列数) 如果想调出某列数据中间隔相等的数据则:x=data(1:2:10,colume2)则调用原始数据的第二列中前十个数据中1、3、5、7、9行数据。 §2 插值问题 在应用领域中,由有限个已知数据点,构造一个解析表达式,由此计算数据点之间的函数值,称之为插值。 实例:海底探测问题 某公司用声纳对海底进行测试,在5×5海里的坐标点上测得海底深度的值,希望通过这些有限的数据了解更多处的海底情况。并绘出较细致的海底曲面图。 一、一元插值 一元插值是对一元数据点(xi,yi)进行插值。 1.  线性插值:由已知数据点连成一条折线,认为相临两个数据点之间的函数值就在这两点之间的连线上。一般来说,数据点数越多,线性插值就越精确。 调用格式:yi=interp1(x,y,xi,’linear’)  %线性插值 zi=interp1(x,y,xi,’spline’)  %三次样条插值 wi=interp1(x,y,xi,’cubic’)  %三次多项式插值 说明:yi、zi、wi为对应xi的不同类型的插值。x、y为已知数据点。 例1:已知数据: x 0 .1 .2 .3 .4 .5 .6 .7 .8 .9 1 y .3 .5 1 1.4 1.6 1.9 .6 .4 .8 1.5 2 求当xi=0.25时的yi的值。 程序: x=0:.1:1; y=[.3 .5 1 1.4 1.6 1 .6 .4 .8 1.5 2]; yi0=interp1(x,y,0.025,'linear') xi=0:.02:1; yi=interp1(x,y,xi,'linear'); zi=interp1(x,y,xi,'spline'); wi=interp1(x,y,xi,'cubic'); plot(x,y,'o',xi,yi,'r+',xi,zi,'g*',xi,wi,'k.-') legend('原始点','线性点','三次样条','三次多项式') 结果:yi0 =  0.3500   要得到给定的几个点的对应函数值,可用: xi =[ 0.2500  0.3500  0.4500] yi=interp1(x,y,xi,'spline') 结果: yi =1.2088  1.5802  1.3454 (二) 二元插值 二元插值与一元插值的基本思想一致,对原始数据点(x,y,z)构造见世面函数求出插值点数据(xi,yi,zi)。 一、单调节点插值函数,即x,y向量是单调的。 调用格式1:zi=interp2(x,y,z,xi,yi,’linear’) ‘liner’ 是双线性插值 (缺省) 调用格式2:zi=interp2(x,y,z,xi,yi,’nearest’) ’nearest’ 是最近邻域插值 调用格式3:zi=interp2(x,y,z,xi,yi,’spline’) ‘spline’是三次样条插值 说明:这里x和y是两个独立的向量,它们必须是单调的。z是矩阵,是由x和y确定的点上的值。z和x,y之间的关系是z(i,:)=f(x,y(i)) z(:,j)=f(x(j),y) 即:当x变化时,z的第i行与y的第i个元素相关,当y变化时z的第j列与x的第j个元素相关。如果没有对x,y赋值,则默认x=1:n, y=1:m。n和m分别是矩阵z的行数和列数。 例2:已知某处山区地形选点测量坐标数据为: x=0  0.5  1  1.5  2  2.5  3  3.5  4  4.5  5 y=0  0.5  1  1.5  2  2.5  3  3.5  4  4.5  5  5.5  6 海拔高度数据为: z=89 90 87 85 92 91 96 93 90 87 82    92 96 98 99 95 91 89 86 84 82 84    96 98 95 92 90 88 85 84 83 81 85    80 81 82 89 95 96 93 92 89 86 86    82 85 87 98 99 96 97 88 85 82 83    82 85 89 94 95 93 92 91 86 84 88    88 92 93 94 95 89 87 86 83 81 92    92 96 97 98 96 93 95 84 82 81 84    85 85 81 82 80 80 81 85 90 93 95    84 86 81 98 99 98 97 96 95 84 87    80 81 85 82 83 84 87 90 95 86 88    80 82 81 84 85 86 83 82 81 80 82    87 88 89 98 99 97 96 98 94 92 87 其地貌图为: 对数据插值加密形成地貌图。 程序: x=0:.5:5; y=0:.5:6; z=[89 90 87 85 92 91 96 93 90 87 82    92 96 98 99 95 91 89 86 84 82 84    96 98 95 92 90 88 85 84 83 81 85    80 81 82 89 95 96 93 92 89 86 86    82 85 87 98 99 96 97 88 85 82 83    82 85 89 94 95 93 92 91 86 84 88    88 92 93 94 95 89 87 86 83 81 92    92 96 97 98 96 93 95 84 82 81 84    85 85 81 82 80 80 81 85 90 93 95    84 86 81 98 99 98 97 96 95 84 87    80 81 85 82 83 84 87 90 95 86 88    80 82 81 84 85 86 83 82 81 80 82    87 88 89 98 99 97 96 98 94 92 87]; mesh(x,y,z)  %绘原始数据图 xi=linspace(0,5,50);  %加密横坐标数据到50个 yi=linspace(0,6,80);  %加密纵坐标数据到60个 [xii,yii]=meshgrid(xi,yi);  %生成网格数据 zii=interp2(x,y,z,xii,yii,'cubic');  %插值 mesh(xii,yii,zii)  %加密后的地貌图 hold on     % 保持图形 [xx,yy]=meshgrid(x,y);  %生成网格数据 plot3(xx,yy,z+0.1,'ob')  %原始数据用‘O’绘出   2、二元非等距插值 调用格式:zi=griddata(x,y,z,xi,yi,’指定插值方法’) 插值方法有: linear          % 线性插值   (默认)              bilinear     % 双线性插值              cubic        % 三次插值              bicubic      % 双三次插值              nearest      % 最近邻域插值 例:用随机数据生成地貌图再进行插值 程序: x=rand(100,1)*4-2; y=rand(100,1)*4-2; z=x.*exp(-x.^2-y.^2); ti=-2:.25:2; [xi,yi]=meshgrid(ti,ti); % 加密数据 zi=griddata(x,y,z,xi,yi);% 线性插值 mesh(xi,yi,zi) hold on plot3(x,y,z,’o’)
    展开阅读全文
    提示  咨信网温馨提示:
    1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
    2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
    3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
    4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
    5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
    6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

    开通VIP折扣优惠下载文档

    自信AI创作助手
    关于本文
    本文标题:matlab插值计算.doc
    链接地址:https://www.zixin.com.cn/doc/3104372.html
    页脚通栏广告

    Copyright ©2010-2025   All Rights Reserved  宁波自信网络信息技术有限公司 版权所有   |  客服电话:0574-28810668    微信客服:咨信网客服    投诉电话:18658249818   

    违法和不良信息举报邮箱:help@zixin.com.cn    文档合作和网站合作邮箱:fuwu@zixin.com.cn    意见反馈和侵权处理邮箱:1219186828@qq.com   | 证照中心

    12321jubao.png12321网络举报中心 电话:010-12321  jubao.png中国互联网举报中心 电话:12377   gongan.png浙公网安备33021202000488号  icp.png浙ICP备2021020529号-1 浙B2-20240490   


    关注我们 :微信公众号  抖音  微博  LOFTER               

    自信网络  |  ZixinNetwork