最小二乘法是一種數學優化技術,他通過最小化誤差平方和尋找資料的最佳函式匹配,利用最小二乘法可以簡便地求得未知資料,並使得這些資料與實際資料之間的誤差平方和為最小,最小二乘法還可用於曲線擬合。在解決實際問題時最小二乘法也有著很多的用處。
一、基本原理
最小二乘法的一般提法為:已知 n 組觀測資料(x1,y1),(x2,y2)...........(xn,yn), 可認為它們滿足某一模型 y=g(x)+ε(x),其中 y=g(x)是函式 ,ε(x)=y-g(x)是觀測值與函式值得誤差,稱為誤差函式。 那麼有 yi是觀測值,εi=yi-g(xi)是觀測誤差。 設 g (x)是含有 p 個引數的擬合函式,則 ε(x)=y- g (x),εi=yi- g (xi),要確定 g (x)中 p 個引數的值,就要使得ni = 1σεi2=ni = 1σ(yi- g (xi))2達到最小。 這一方法稱為最小二乘法。 特別的,假設擬合函式為:
y*=a1φ1(x)+a2φ2(x)+........asφs(x)
其中 φ1(x),φ2(x)............φs(x)為所選定的基函式,ai(i=1,2.....s)為待定係數,要確定係數 ai(i=1,2.....s),使得 y*與 n 組觀測資料的距離的平方和盡可能小,也就是使得一下式子取最小值。
利用距離的定義,也就是 |ax-b|^2,在 文獻[1]中 證明了使得式(1)取最小值的
二、案例分析
這裡將以2023年數學建模繫泊系統的設計為例進行分析
問題1某型傳輸節點擊用ii型電焊錨鏈22.05m,選用的重物球的質量為1200kg。現將該型傳輸節點布放在水深18m、海床平坦、海水密度為1.025×103kg/m3的海域。若海水靜止,分別計算海面風速為12m/s和24m/s時鋼桶和各節鋼管的傾斜角度、錨鏈形狀、浮標的吃水深度和游動區域。海水
深度為h
,h為吃水深度,
則各結構體在
豎直方向上的投影長度需
滿足:
不同的h值所得出的海水深度與標準值之間會有不同的誤差值,合理運用這個誤差值就可以得出我們所需要的值。當誤差值達到最小時,就可得到最合適的h值,即吃水深度,這一點可以通過求極值來實現,不過求極值時需要辨別一下精度是否是你需要的值。
執行程式:
function [depth_error,angle,alpha,theta_top,per_hight,len,sumx,x]=search(b,v)
%b吃水深度;v風速
rho_w=1.025e3; g=9.8;
rho_s=7.9e3;%鋼鐵密度
k=1-rho_w/rho_s;
m0=1000;%浮標質量
m_sphere=1200;
m=m_sphere*k;%m*g為重物球在水中的重力與浮力的合力
s=18;%錨鏈長度
t=[3.2 7 12.5 19.5 28.12];
th=t(5);
w=th*k*g;%錨鏈單位長度水中重力與浮力的合力,7為錨鏈單位長度的質量
v0=0;%v0即海水流速
%% 計算各部分合力
fu=(rho_w*pi*b-m0)*g;%浮標重力與浮力的合力
fw=0.625*2*(2-b)*v*v+374*2*b*v0^2;%浮標水平受力---風荷載即風力+水流力
%fw=0.625*2*(2-b)*v*v;
f0=sqrt(fu^2+fw^2);the0=atan(fw/fu);%f0為浮標對第一節鋼管的拉力,the0為該拉力與海平面的夾角
wind_p=fw;flotage=fu;
result_force=[[10,10,10,10]*k, 100-rho_w*pi*0.15^2, 7*0.105*k];%鋼管非密封,result_force*g表示四節鋼管、鋼桶、錨鏈的重力與浮力的合力
admset=[0,0,0,0,m,0];
sm=pi*power((3*m_sphere/(4*pi*rho_s)),2/3);%重力球在豎直方向上的投影
s_hor=[0.05 0.05 0.05 0.05 0.3 sm];
f_hor=;f_result=;theta=;
%% 對每個節點進行受力分析,由受力平衡得出拉力大小
for i=1:6
newf_wind=wind_p;
newf_reslut=flotage-result_force(i)*g-admset(i)*g;%浮標浮力-每乙個重力單元重力與浮力的合力
newthe=atan((newf_reslut-0.5*result_force(i)*g+admset(i)*g)/newf_wind);%每乙個重力單元與水平面的夾角
f_hor=[f_hor,newf_wind];%水平力
f_result=[f_result,newf_reslut];%重力與浮力的合力
theta=[theta,newthe];%夾角
wind_p=newf_wind+ newthe*s_hor(i);
flotage=newf_reslut;
end
h0=wind_p;%風力
theta_top=theta(end);%錨鏈上端點傾角,theta_top
an_top=h0/w;%錨鏈頂端與豎直方向夾角的正切
alpha=atan(tan(theta_top)-s/an_top);%///***錨鏈與海床夾角***///
%% 計算豎直高度用最小二乘法求解吃水深度;
y=(h0/w)*(cosh(asinh(tan(alpha)))-cosh(asinh(tan(theta_top))));
y=-y;
per_hight=[b,sin(theta(1:5)),y];%每一段實物豎直方向上的高度
%% 計算水平距離確定活動範圍
x=(h0/w)*(asinh(tan(theta_top))-asinh(tan(alpha)));
xs=[cos(theta(1:5)),x];%每一段實物水平方向上的長度
%%sumz=sum(per_hight);sumx=sum(xs);
depth_error=(sumz-18)^2;%在這一步利用了最小二乘法的思想
if alpha<0
len=tan(theta_top)*an_top;
else
len=(tan(theta_top)-tan(alpha))*an_top;
end%% 結果轉化
angle=theta(1:5);
angle=90-180./(pi./angle);
alpha=180./(pi./alpha);
theta_top=180./(pi./theta_top);
函式呼叫:
clear;clc;
v=12;
b=fminbnd(@(b)search(b,v),0.5,2);%求解吃水深度
[1] 北京大學數學系幾何與代數教研室代數小組 ,高 等代數[m].3 版.北京 :高等教育出版社,2003
[2] 劉佳. 最小二乘法基本思想及其應用[j]. 科技視界, 2016(22):186-187.
最小二乘法
include stdafx.h include include const int n 2 const int m 5 int sgn double x void lss double g n 1 int xm,int xn,double x m double p,double w m lss函式...
最小二乘法
在研究兩個變數之間的關係時,可以用回歸分析的方法進行分析。當確定了描述兩個變數之間的回歸模型後,就可以使用最小二乘法估計模型中的引數,進而建立經驗方程.簡單地說,最小二乘的思想就是要使得觀測點和估計點的距離的平方和達到最小.這裡的 二乘 指的是用平方來度量觀測點與估計點的遠近 在古漢語中 平方 稱為...
最小二乘法
最小二乘法 least squares analysis 是一種 數學 優化 技術,它通過 最小化 誤差 的平方和找到一組資料的最佳 函式 匹配。最小二乘法是用最簡的方法求得一些絕對不可知的真值,而令誤差平方之和為最小。最小二乘法通常用於 曲線擬合 least squares fitting 這裡有...