
写在前面:
喵。。也就我这么好心。。。只有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程序设计问题,请赐教,越详细越好,谢谢,完整的追加财富等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)