中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档 | 网通镜像
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > 综合其它
用离散正交多项式求三次拟合多项式[MATLAB版本]
作者:未知 时间:2005-07-27 23:18 出处:CSDN 责编:chinaitpower
              摘要:用离散正交多项式求三次拟合多项式[MATLAB版本]

已知观察数据如下表所示,按下属方案求最小二乘拟合函数,并求出偏差平方和 ,比较拟合曲线的优劣。
  x:0 0.2 0.6 1.0 1.3 1.6 1.7 1.8 1.9 2.2 2.3 2.5 2.6
  y:0 -2.5 -4.0 -5.7 -3.5 -2.0 -1.0 2.0 3.5 4.0 7.0 7.5 9.9
  
x:2.9 3.1 3.4 3.8 4.1 4.4 4.7 4.8 4.9 5.0 5.1 5.3 
  y:10.9 11.9 13.5 13.0 11.9 9.0 6.5 4.0 1.5 0.0 -2.5 -5.0
 

 

 

%用离散正交多项式求三次拟合多项式
% x,y--表示原始数据的节点坐标
% w--表示权重系数
% N--表示要拟合的离散正交多项式的最高次数
% polyapproximate()--是自定义函数,可以求解多项式的系数
% 其返回值c为多项式系数,error为偏差平方和
x=[0 0.2 0.6 1.0 1.3 1.6 1.7 1.8 1.9 2.2 2.3 2.5 2.6 2.9 3.1 3.4 3.8 4.1 4.4 4.7 4.8 4.9 5.0 5.1 5.3];
nn=length(x);
for i=1:nn
    w(i)=1;
end
y=[0 -2.5 -4.0 -5.7 -3.5 -2.0 -1.0 2.0 3.5 4.0 7.0 7.5 9.9 10.9 11.9 13.5 13.0 11.9 9.0 6.5 4.0 1.5 0.0 -2.5 -5.0];
N=3;%此处可取3 or 4.
[c,error]=polyapproximate(x,y,w,N)
t=0:0.1:5.3;
u=polyval(c,t);
plot(t,u,x,y,'+')

 

%自定义函数polyapproximate(),用来做离散正交多项式拟合
% 此函数的作用是做不同次数的离散正交多项式的拟合
% X,Y 为原始数据的坐标值矩阵
% w 为权重系数
% N 为离散正交多项式的最高次数
function [C,E]=polyapproximate(X,Y,w,N)
M=length(X);
for i=1:N+1
    for j=1:i
        if j~=i
            P(i,j)=0;
        else
            P(i,j)=1;
        end
    end
end
S=0;
d(1)=0;
for i=1:M
    d(1)=d(1)+w(i);
    S=S+w(i)*X(i);
end
AF(1)=S/d(1);
P(2,1)=-AF(1);
for i=1:M
    PX(i,1)=1;
    PX(i,2)=X(i)-AF(1);
end
BA(1)=0;
for k=2:N+1
    S=0;
    dd=0;
    for i=1:M
        S=S+w(i)*X(i)*PX(i,k)*PX(i,k);
        dd=dd+w(i)*PX(i,k)*PX(i,k);
    end
    d(k)=dd;
    AF(k)=S/d(k);
    BA(k-1)=d(k)/d(k-1);
    P(k+1,1)=-AF(k-1)*P(k,1)-BA(k-1)*P(k-1,1);
    for i=1:k-1
        j=k-i+1;
        if j>=k
            t=0;
        else
            t=P(k-1,j);
        end
        P(k+1,j)=P(k,j-1)-AF(k-1)*P(k,j)-BA(k-1)*t;
    end
    for i=1:M
        PX(i,k+1)=PX(i,k)*(X(i)-AF(k-1))-BA(k-1)*PX(i,k-1);
    end
end
d(N+1)=0;
for i=1:M
    d(N+1)=d(N+1)+w(i)*PX(i,N+1)*PX(i,N+1);
end
for i=1:N+1
    FM=0;
    for k=1:M
        FM=FM+w(k)*Y(k)*PX(k,i);
    end
    gp(i)=FM/d(i);
end
for i=1:N+1
    C(i)=0;
    for j=i:N+1
        C(i)=C(i)+gp(j)*P(j,i);
    end
end
C=flipud(C');
%C=C'
U=0;
for i=1:M
    U=U+w(i)*Y(i)*Y(i);
end
V=0;
for k=1:N+1
    V=V+gp(k)*gp(k)*d(k);
end
E=U-V;


关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有