matlab编程:最小二乘法拟合多项式,题目如图

2020-11-25 13:26:08 字数 5293 阅读 8786

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实现最小二乘法拟合直线 - 豆丁网