1楼:风儿lamp沙儿
最小二乘法拟合程序如下:
x=1:8;
y=[2,3,6,7,5,3,2];
p=polyfit(x,y,2);
y1=polyval(p,x);
plot(x,y1);
matlab用最小二乘法直线拟合此题(要写出完整的程序过程,急用,求高手!!!)
2楼:匿名用户
写在前面:
喵。。也就我这么好心。。
。只有15分还帮你写程序。。。。
如果你将来做技术,你就会经常要搭建数学模型,那么就会大量运用各种的最小二乘法来拟合模型参数,所以要好好学哦,亲~
希望通过这个例子,能够让你对最小二乘法入门。。。
开始:最小二乘法,通常用在,我们已知数学模型,但是不知道模型参数的情况下,通过实测数据,计算数学模型,例如,在题目中,数学模型就是直线方程y=ax+b,但是不知道直线方程的a和b。
本来呢,我们只需要两组(xi,yi),就可以解得a和b,但是由于实测数据都存在误差,所以,我们很容易想到一个办法,我们测很多组数据来让我的a和b更加准确。
“我们测很多组数据来让我的a和b更加准确” ,那么我从数学角度如何体现这句话呢?
比如在此例中,已知数学模型 y=ax+b
我们有很多组数据,那么我们要找一条直线,使得我们测得的每个数据,到这条直线的偏离量的总和最小。(这句话有点拗口,慢慢理解下 = =)
那么怎么用数学描述“偏离量总和最小”这个概念呢?
数学家运用了方差!
数学模型 y=ax+b
设f=ax+b-y
那么对于模型上的点(注意是模型上的点,也就是理论值),f=ax+b-y=0
但是对于实际值来说,f=axi+b-yi 一定不等于0。那么我们就要找到一对a和b,使得f尽可能接近于0。
也就是说,“偏离量总和最小”这个概念,在数学上实际上就是要求f的方差最小。
即 σ f^2→0 (f的平方和趋近于0)
即 σ(axi+b-yi)^2→0
那么我们得到一个方程f(a,b)=σ(axi+b-yi)^2,我们要找到合适的a,b使得f(a,b)最小!
也就是说,我们要找到的实际上是f(a,b)的最小值点。(因为方差不可能小于0)
因此我们需要求f(a,b)的极值点。我们借助数学工具偏导。
如果有一组a,b使得
f(a,b)/a=0
f(a,b)/b=0
那么f(a,b)就是极值点,如果a,b只有一对,那么它就是最小值点。
即 ( σ(axi+b-yi)^2 )/a=0
( σ(axi+b-yi)^2 )/b=0
化简得到
a*σxi^2 + b*σxi = σ(xi*yi)
a*σxi + b*n = σyi
其中n是(xi,yi)的个数。即我们测了多少组数据
解上面的二元方程,我们就可以得到唯一的一组a,b啦,这就是我们所需要的a和b
o(∩_∩)o~是不是蛮简单的?
matlab最基础的程序如下。。。= =
%原始数据
x=[163 123 150 123 141];
y=[186 126 172 125 148];
n=5; %一共5个变量
x2=sum(x.^2); % 求σ(xi^2)
x1=sum(x); % 求σ(xi)
x1y1=sum(x.*y); % 求σ(xi*yi)
y1=sum(y); % 求σ(yi)
a=(n*x1y1-x1*y1)/(n*x2-x1*x1); %解出直线斜率b=(y1-a*x1)/n
b=(y1-a*x1)/n; %解出直线截距
%作图% 先把原始数据点用蓝色十字描出来
figure
plot(x,y,'+');
hold on
% 用红色绘制拟合出的直线
px=linspace(120,165,45);
py=a*px+b;
plot(px,py,'r');
结果 a=1.5555 b=-66.365
喵~希望对你有帮助。。眼泪汪汪。。啪嗒啪嗒。。。
有关matlab编程最小二乘法圆拟合的问题
3楼:匿名用户
第一步,根据已知点,描图x=[。。。],y=[。。。],plot(x,y,'p')
第二步,根据已知点拟合圆的一般式方程,利用公式求出圆心和半径首先,用方程x^2+y^2+dx+ey+f=0,拟合出其系数d、e、f,求出圆心(-d/2,-e/2),半径0.5√(d^2+-e^2-4f)
第三步,根据圆的参数方程,求出x,y的点,描点plot(x,y,'r-'),得到拟合圆的图形
给你一个例子。
用最小二乘法求一次和二次拟合多项式的程序流程图
4楼:
要体现二乘原理直接用现函数解决
这是纯面向对象编程语言,拥有基于原型对象的模型。它体积不大,可以在小型便携式虚拟机上运行。
用matlab工具进行最小二乘法圆拟合的程序怎么编
5楼:金毛肉前
可以考虑采用polyfit来拟合,二次多项式polyfit(x,y,2),
x=[0.11 0.13 0.19 0.21 0.27 0.37 0.53 0.59 0.71 0.79 0.89 1.07];
y=[3868-1066 3733-888.3 3659-789.6 3599-710.
7 3508-592.2 3463-533 3335-367.6 3257-266.
5 3215-213.2 3200-193.8 3125-133.
3 3131-106.6];
p=polyfit(x,y,2);
hold on;
plot(x,y,'v')
plot(x,polyval(p,x),'r');
当然,数组中的成员是需要自己写入的,把你的数据带入就行
matlab编程问题、考察点:a) 多项式的表示方法;b) 多项式拟合; c)多项式求值。
6楼:匿名用户
从上图,我们可以看到,当拟合多项式的阶数越高,拟合精度也越精确。
7楼:匿名用户
采用cftool拟合工具,直接可以出来你想要的所有!
matlab中用最小二乘法拟合直线
8楼:mcr董事长
用polyfit函数,(用来多项式拟合的,是用最小二乘法)举个例子
x=[90 91 92 93 94 95 96];
z=[70 122 144 152 174 196 202];
a=polyfit(x,z,1)
结果:a =
1.0e+03 *
0.0205 -1.7551
1表示1次多项式(一次时就是直线,适用于你的情况)a是多项式的系数向量,是从高次项往低次项排的,如果想运用结果,比如想知道当x=97时z等于多少那么有两种方法,
直接用系数
>> a(1)*97+a(2)
ans =
233.4286
或者用polyval函数
>> polyval(a,97)
ans =
233.4286
9楼:吾书桥君雅
首先确认一下
,你这的log是以10为底的对数吧?那么命令如下。(如果是以e为底就不用除以log(10)了,自己改一下。)
>>x=0.01:0.01:1;
>>m=log(x)/log(10);
>>for
i=1:100;
y(i)=log((2^0.5)*(x(i)+1)/(x(i)*x(i)+2*x(i))^0.5)/log(10);
end>>plot(m,y,'r');holdon;>>p
=polyfit(m,y,1)%这个就是拟合的函数p=-0.3600
0.4161
>>pp=poly2sym(p);
>>ezplot(pp,[-2,0]);
红色的是原曲线,蓝色的是拟合直线。拟合直线的斜率就是-0.3600
matlab中polyfit的 二次多项式拟合 是最小二乘拟合吗?
10楼:匿名用户
严格的来说,二次多项式拟合不是最小二乘拟合。
lsqnonlin()、lsqcurvefit()是最小二乘拟合
11楼:匿名用户
是的polyfit用法:p=polyfit(x,y,n) ;x,y为数据点,n为多项式阶数,返回p为幂次从高到低的多项式系数向量p。x必须是单调的。
求教用matlab实现最小二乘法拟合直线
12楼:佪悥
function [a] = funpolyfit(x,y,n)%功能:求已知数据的最小二乘法拟合多项式的各项系数%输入参数 x:已知数
据点x的坐标向量;
% y:已知数据点y的坐标向量;
% n:拟合多项式次数;
%输出参数a:最小二乘法拟合多项式的各项系数 a(1)x2+a(2)x+a(3)
% x = x(:); % 保证为列向量y = y(:);
m = length(x); % 输入数据个数% 构建系数矩阵
% 3 2
% y = [x x x 1] [a3% a2% a1% a0]%v = zeros(m,n+1);
v(:,n+1) = ones(m,1);
for j = n:-1:1
v(:,j) = x.*v(:,j+1);
end% v.'*v*a = v'y;
a = v.'*v;
b = v.'*y;
a = a\b;
a = a.'; % 转换成行向量
13楼:匿名用户
求教用matlab实现最小二乘法拟合直线 - 豆丁网