找回密码
 注册
Simdroid-非首页
查看: 1280|回复: 17

【求助】关于最小二乘的拟合

[复制链接]
vincnetpan 该用户已被删除
发表于 2002-6-3 12:09:54 | 显示全部楼层 |阅读模式 来自 福建厦门
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2002-6-5 13:22:30 | 显示全部楼层 来自 河北石家庄

回复: 【求助】关于最小二乘的拟合

Simdroid开发平台
%跟你举个例子  
%X有8个采集点,对应x1,x2,x3,...y8(你可以可用矩阵来表示)
%Y有8个X的对应点(即Y=f(X)):y1,y2,y3,...y8
%所求得Y=f(X)=a0+a1*x+a2*x^2
%最后结果为y=12.9518-6.5688*x+0.9373*x^2
%还绘出了原始点的图形和拟合后的:y=12.9518-6.5688*x+0.9373*x^2的图形
%这里只作了到x^2,更高阶的继续写A矩阵..:  1, x1, x1^2,x1^3...x1^n... ;
%但是采用这种方法拟合多项式方次高时,会导致很大误差,
%你可以采用正交多项式拟合,我还没有加以研究过,对不起。。
syms x1 x2 x3 x4 x5 x6 x7 x8
syms y1 y2 y3 y4 y5 y6 y7 y8
x1=0.5;  y1=10;
x2=1.5;  y2=5;
x3=2;  y3=4;
x4=2.5;  y4=2;
x5=3.5;  y5=1;
x6=4;  y6=2;
x7=5;  y7=4;
x8=6;  y8=7;
XX=[x1,x2,x3,x4,x5,x6,x7,x8]
YY=[y1,y2,y3,y4,y5,y6,y7,y8]
A=[ 1, x1, x1^2;
    1, x2, x2^2;
    1, x3, x3^2;
    1, x4, x4^2;
    1, x5, x5^2;
    1, x6, x6^2;
    1, x7, x7^2;
    1, x8, x8^2
]
Y=[y1;
   y2;
   y3;
   y4;
   y5;
   y6;
   y7;
   y8
]
AT=A.'
W=AT*A
R=AT*Y
T=W^(-1)
a=T*R
x=0:0.1:6;
plot(XX,YY,'r+')
hold on
plot(x,a(1)+a(2)*x+a(3)*x.^2)

评分

1

查看全部评分

发表于 2002-6-5 19:27:07 | 显示全部楼层 来自 哈尔滨工程大学

回复: 【求助】关于最小二乘的拟合

matlab有曲线拟合函数: polyfit
如:
x=[0 .1 .2 .3 .4 .5 .6 .7 .8 .9 1];
y=[.44 1.978 3.28 6.16 7.08 7.34 7.66 9.56 9.48 9.30 11.2];
n=2;%多项式阶次
p=polyfit(x,y,n)
  
p= -9.8108 20.1293 -0.0317
  
p即为系数a0、a1.....

评分

1

查看全部评分

vincnetpan 该用户已被删除
 楼主| 发表于 2002-6-10 10:09:47 | 显示全部楼层 来自 福建厦门
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2002-6-10 11:08:16 | 显示全部楼层 来自 河北石家庄

回复: 【求助】关于最小二乘的拟合

大海龟:请原谅使用你的铁子回答别人的问题。。
matlab有曲线拟合函数: polyfit  
如:  
x=[0 .1 .2 .3 .4 .5 .6 .7 .8 .9 1];  
y=[.44 1.978 3.28 6.16 7.08 7.34 7.66 9.56 9.48 9.30 11.2];  
n=2;%多项式阶次 (你把这里改成 n=5;就可以喽!)
p=polyfit(x,y,n)  
  
p= -9.8108 20.1293 -0.0317  
  
p即为系数a0、a1.....  
  
molidong: 我的程序也告诉你了怎样改成5次方,你认真看一下。。
也就是改动A=为
A=[ 1, x1, x1^2,x1^3,x1^4,x1^5;  
    1, x2, x2^2,x2^3,x2^4,x2^5;  
    1, x3, x3^2,x3^3,x3^4,x3^5;  
    1, x4, x4^2,x4^3,x4^4,x4^5;  
    1, x5, x5^2,x5^3,x5^4,x5^5;  
    1, x6, x6^2,x6^3,x6^4,x6^5;  
    1, x7, x7^2,x7^3,x7^4,x7^5;  
    1, x8, x8^2,x8^3,x8^4,x8^5  
]  
就可以了,但是会出现的问题我给你也说过了。。。

评分

1

查看全部评分

vincnetpan 该用户已被删除
 楼主| 发表于 2002-6-10 11:22:13 | 显示全部楼层 来自 福建厦门
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2002-6-10 19:59:14 | 显示全部楼层 来自 河北石家庄

回复: 【求助】关于最小二乘的拟合

对不起,我再试试,其实我并没有试,只是我猜想的,另外,我给你的程序只适合阶数少的情况(二阶),阶数多了拟合的就不好了,误差很大。。
发表于 2002-6-10 20:59:02 | 显示全部楼层 来自 河北石家庄

回复: 【求助】关于最小二乘的拟合

%跟你举个例子  
%X有8个采集点,对应x1,x2,x3,...y8(你可以可用矩阵来表示)
%Y有8个X的对应点(即Y=f(X)):y1,y2,y3,...y8
%所求得Y=f(X)=a0+a1*x+a2*x^2
%最后结果为y=12.9518-6.5688*x+0.9373*x^2
%还绘出了原始点的图形和拟合后的:y=12.9518-6.5688*x+0.9373*x^2的图形
%这里只作了到x^2,更高阶的继续写A矩阵..:  1, x1, x1^2,x1^3...x1^n... ;
%但是采用这种方法拟合多项式方次高时,会导致很大误差,
%你可以采用正交多项式拟合,我还没有加以研究过,对不起。。
clear all
syms x1 x2 x3 x4 x5 x6 x7 x8
syms y1 y2 y3 y4 y5 y6 y7 y8
clc  
clf
x1=0.5;  y1=10;
x2=1.5;  y2=5;
x3=2;  y3=4;
x4=2.5;  y4=2;
x5=3.5;  y5=1;
x6=4;  y6=2;
x7=5;  y7=4;
x8=6;  y8=7;
XX=[x1,x2,x3,x4,x5,x6,x7,x8];
YY=[y1,y2,y3,y4,y5,y6,y7,y8];
A=[
    1, x1, x1^2, x1^3, x1^4, x1^5;
    1, x2, x2^2, x2^3, x2^4, x2^5;
    1, x3, x3^2, x3^3, x3^4, x3^5;
    1, x4, x4^2, x4^3, x4^4, x4^5;
    1, x5, x5^2, x5^3, x5^4, x5^5;
    1, x6, x6^2, x6^3, x6^4, x6^5;
    1, x7, x7^2, x7^3, x7^4, x7^5;
    1, x8, x8^2, x8^3, x8^4, x8^5
];
Y=[y1;
   y2;
   y3;
   y4;
   y5;
   y6;
   y7;
   y8
];
AT=A.';
W=AT*A;
R=AT*Y;
T=inv(W);
a=T*R
x=0:0.1:6;
plot(XX,YY,'r+');
hold on;
plot(x,a(1)+a(2)*x+a(3)*x.^2+a(4)*x.^3+a(5)*x.^4+a(6)*x.^5,'y');
%好像拟合的很不错。。。你试试
hold on;
  
% %大海龟的程序你应该成这样。。。
x=[0.5,1.5,2,2.5,3.5,4,5,6];
y=[10,5,4,2,1,2,4,7];
n=5;%(五次方)
a=polyfit(x,y,n)
plot(x,y,'y+')
hold on
xx=0:0.1:6;  
plot(xx,a(6)+a(5)*xx+a(4)*xx.^2+a(3)*xx.^3+a(2)*xx.^4+a(1)*xx.^5,'r')
% %拟合的也很不错,如果阶数更多的话(10次),比我的要好。。
% %注意,跟我的系数方向上是相反的。。。
%这是大海龟的系数a(行阵) -0.0077    0.0909   -0.3309    1.3270   -6.6915   13.0273
%这是我的系数a,完全一样(列阵)
   %13.0273
   %-6.6915
    %1.3270
   %-0.3309
   % 0.0909
   %-0.0077
%再有问题再问。。。
发表于 2002-6-16 23:13:19 | 显示全部楼层 来自 福建三明

回复: 【求助】关于最小二乘的拟合,呵呵,给我加分啊

原理很简单
        原理1、利用各点到拟和线的平方和最小,也即可以求导数的方法来解
  
       原理2、最小二乘法的解实际是向量空间中的最接近的解,是最优化的解
  
在MATLAB中可以这样,
   FOREXAMPLE :  
      解  A B=E    A为3行2列系数阵,B为3行向量,E为3行向量,B为待计算的二乘法解
   
   FIRST 计算系数矩阵A,
   NEXT  计算A的转置阵D,
   THEN  C=AXD
   THEN  计算B=E/C
   一切OK!

评分

1

查看全部评分

发表于 2002-6-16 23:14:56 | 显示全部楼层 来自 福建三明

回复: 【求助】关于最小二乘的拟合,加分啊

在EXCEL中也可以曲线拟和哦
发表于 2002-7-18 14:37:55 | 显示全部楼层 来自 美国

回复: 【求助】关于最小二乘的拟合

Theory on least square fitting:
  
The following link from the mathworld, company who developing Mathematica, a competitor of matlab:)
  
You are going to find out how to use polynomial fitting up to any orders.
This is written in English, give yourself a chance to go over English.
  
http://mathworld.wolfram.com/LeastSquaresFitting.html

评分

1

查看全部评分

发表于 2002-8-11 18:06:33 | 显示全部楼层 来自 北京交通大学

Re:【求助】关于最小二乘的拟合

若采用常规LS精度欠佳,可以试试用神经网络拟合,也不太复杂的。

评分

1

查看全部评分

发表于 2002-9-1 10:04:40 | 显示全部楼层 来自 北京航空航天大学

Re:【求助】关于最小二乘的拟合

其实用origin专业拟和,里面就有最小二乘这一项
帮帮我 该用户已被删除
发表于 2002-9-11 08:59:35 | 显示全部楼层 来自 广东深圳
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2004-3-28 16:00:27 | 显示全部楼层 来自 北京

回复: 【求助】关于最小二乘的拟合

对于简单的拟和,可以使用CFTOOL,里面提供了一些常见函数作为拟和函数
,也可以用自己定义的函数(比如一些基本函数的组合)来拟和,看一个例子的DEMO就可以学会了。
  对于复杂一些的拟和,就要考虑优化的问题,如何选取优化函数和选择目标函数是关键,目标函数里你可以自己写不同的算法(比如最小二乘法),看一个例子就能弄明白了,这是我以前做拟和的一点经验。
发表于 2004-3-28 21:26:36 | 显示全部楼层 来自 新加坡

回复: 【求助】关于最小二乘的拟合

这么老的帖子都让你给翻出来了,算你恨!:D
  
不过还是谢谢分享经验!:I
发表于 2004-4-21 10:57:15 | 显示全部楼层 来自 湖南长沙

回复: 【求助】关于最小二乘的拟合

原理:用最小二乘法求解超静定线性方程组的算法
kangtao_101 该用户已被删除
发表于 2006-3-30 10:44:50 | 显示全部楼层 来自 湖北武汉
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-4-29 00:33 , Processed in 0.069881 second(s), 15 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表