Matlab用最小二乘法直线拟合此题(要写出完整的程序过程,急用,求高手!!!)

Matlab用最小二乘法直线拟合此题(要写出完整的程序过程,急用,求高手!!!),第1张

写在前面:

喵。。也就我这么好心。。。只有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 = Σ(xiyi)

aΣxi + bN = Σ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(XY); % 求Σ(xiyi)

y1=sum(Y); % 求Σ(yi)

a=(nx1y1-x1y1)/(nx2-x1x1); %解出直线斜率b=(y1-ax1)/n

b=(y1-ax1)/n; %解出直线截距

%作图

% 先把原始数据点用蓝色十字描出来

figure

plot(X,Y,'+');

hold on

% 用红色绘制拟合出的直线

px=linspace(120,165,45);

py=apx+b;

plot(px,py,'r');

结果 a=15555 b=-66365

喵~希望对你有帮助。。眼泪汪汪。。啪嗒啪嗒。。。

1、打开matlab软件。

2、找到指定的m文件,并打开。

3、在菜单栏找到“%”。

4、选中不需要运行的代码全部选中。

5、选中后点击“%”。

6、这是看到代码变成了绿色,说明已经注释好,即不会运行。

7、再次点击运行,会发现绿色部分的程序不再运行。

第一题:

x=0:001:2pi;

y1=sin(x);

y2=cos(x);

plot(x,y1);

hold on;

plot(x,y2);

hold off

第二题:

将以下代码保存为m文件,文件名为offm

function outputprice = off (price)

if price<200 % 没有折扣

outputprice=price;

else if (price<500) % 3%折扣

outputprice=price(1-003);

else if (price<1000) % 5%折扣

outputprice=price(1-005)

else if (price<2500) % 8%折扣

outputprice=price(1-008);

else if (price<5000) % 10%折扣

outputprice=price(1-010);

else if (price>=5000) % 14%折扣

outputprice=price(1-014);

end

end

end

end

end

end

用法举例:命令行输入off(6000),回车,即可求出6000的折扣后价格。

第三题:

%定义自变量符号x

syms x

%求f(x)

fx=3x^5-x^4+2x^2+x+3;

%求g(x)

gx=1/3x^3+x^2-3x-1;

%求积和商

ji=fxgx;

shang=fx/gx;

%用collect函数化简,输出结果

ji=collect(ji)

shang=collect(shang)

LZ你要是不给分就太对不起我了。

function [x,y,m,n]=br2(x0,xf,y0,yf,h)

x=x0:h:xf;

y=y0:h:yf;

a=randn(size(x));

b=randn(size(y));

m(1)=0;

n(1)=0;

for k=1:length(x)-1;

m(k+1)=m(k)+a(k);

n(k+1)=n(k)+b(k);

end;

再在命令窗口键入

x0=0;

xf=10;

h=001;

y0=0;

可以用YALMIP工具箱解整数规划

定义变量:

sqdvar()实型

intvar()整型

binvar()0-1型

设定目标函数 :

f=目标函数

设定限定条件:

F=set(限定条件)

多个限定条件用加号相连:

F=set(限定条件)+set(限定条件1)+set(限定条件2)……

求解: solvesdp(F,f)

这里解得是F条件下目标函数f的最小值,要求最大值f前面加个负号

求解之后查看数值 :

double(f) double(变量)

intvar(m,n):生成整数型变量;

sdpvar(m,n):生产变量;

solvesdp(F,f):求解最优解(最小值),其中F为约束条件(用set连接),f为目标函数

double:显示求解的答案

有个例子:

已知非线性整数规划为:

Max z=x1^2+x2^2+3x3^2+4x4^2+2x5^2-8x1-2x2-3x3-x4-2x5

st

0<=xi<=99(i=1,2,,5)

x1+x2+x3+x4+x5<=400

x1+2x2+2x3+x4+6x5<=800

2x1+x2+6x3<=800

x3+x4+5x5<=200

matlab中输入

>> x=intvar(1,5);

f=[1 1 3 4 2](x'^2)-[8 2 3 1 2]x';F=set(0<=x<=99);

F=F+set([1 1 1 1 1]x'<=400)+set([1 2 2 1 6]x'<=800)+set(2x(1)+x(2)+6x(3)<=800);

F=F+set(x(3)+x(4)+5x(5)<=200);solvesdp(F,-f);

max=double(f)

sx=double(x)

Starting YALMIP integer branch & bound

Lower solver : fmincon-standard

Upper solver : rounder

Max iterations : 300

Warning : The relaxed problem may be nonconvex This means

that the branching process not is guaranteed to find a

globally optimal solution, since the lower bound can be

invalid Hence, do not trust the bound or the gap

Node Upper Gap(%) Lower Open

1 : -8020E+004 003 -8025E+004 2

2 : -8020E+004 003 -8025E+004 1

3 : -8020E+004 000 -8020E+004 2

+ 3 Finishing Cost: -80199

max =

80199

sx =

53 99 99 99 0

以上就是关于Matlab用最小二乘法直线拟合此题(要写出完整的程序过程,急用,求高手!!!)全部的内容,包括:Matlab用最小二乘法直线拟合此题(要写出完整的程序过程,急用,求高手!!!)、如何运行matlab程序、matlab程序设计问题,请赐教,越详细越好,谢谢,完整的追加财富等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/zz/9329733.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-27
下一篇2023-04-27

发表评论

登录后才能评论

评论列表(0条)

    保存