最小二乘法(又称最小平方法)是一种数学优化技术。它通过最小化误差的平方和寻找数据的最佳函数匹配。
成都一家集口碑和实力的网站建设服务商,拥有专业的企业建站团队和靠谱的建站技术,10余年企业及个人网站建设经验 ,为成都上千多家客户提供网页设计制作,网站开发,企业网站制作建设等服务,包括成都营销型网站建设,品牌网站制作,同时也为不同行业的客户提供成都做网站、网站制作、成都外贸网站建设的服务,包括成都电商型网站制作建设,装修行业网站制作建设,传统机械行业网站建设,传统农业行业网站制作建设。在成都做网站,选网站制作建设服务商就选创新互联公司。
利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小。最小二乘法还可用于曲线拟合。其他一些优化问题也可通过最小化能量或最大化熵用最小二乘法来表达。
在回归过程中,回归的关联式不可能全部通过每个回归数据点(x1,y1. x2,y2...xm,ym),为了判断关联式的好坏,可借助相关系数“R”,统计量“F”,剩余标准偏差“S”进行判断;“R”越趋近于 1 越好;“F”的绝对值越大越好;“S”越趋近于 0 越好。
扩展资料:
对于平面中的这n个点,可以使用无数条曲线来拟合。要求样本回归函数尽可能好地拟合这组值。综合起来看,这条直线处于样本数据的中心位置最合理。 选择最佳拟合曲线的标准可以确定为:使总的拟合误差(即总残差)达到最小。
最小二乘法的原则是以“残差平方和最小”确定直线位置。用最小二乘法除了计算比较方便外,得到的估计量还具有优良特性。这种方法对异常值非常敏感。
用离差的平方和,即作为总离差,并使之达到最小,这样回归直线就是所有直线中Q取最小值的那一条,这种使“离差平方和最小”的方法,叫做最小二乘法:
由于绝对值使得计算不变,在实际应用中人们更喜欢用:Q=(y1-bx1-a)²+(y2-bx2-a)²+······+(yn-bxn-a)²,这样,问题就归结于:当a,b取什么值时Q最小,即到点直线y=bx+a的“整体距离”最小。
参考资料来源:百度百科——最小二乘法
这个是高等数学里的。做实验常用的方法。
最小二乘法原理
在我们研究两个变量(x, y)之间的相互关系时,通常可以得到一系列成对的数据(x1, y1、x2, y2... xm , ym);将这些数据描绘在x -y直角坐标系中(如图1), 若发现这些点在一条直线附近,可以令这条直线方程如(式1-1)。
Y计= a0 + a1 X (式1-1)
其中:a0、a1 是任意实数
为建立这直线方程就要确定a0和a1,应用《最小二乘法原理》,将实测值Yi与利用(式1-1)计算值(Y计=a0+a1X)的离差(Yi-Y计)的平方和〔∑(Yi - Y计)2〕最小为“优化判据”。
令: φ = ∑(Yi - Y计)2 (式1-2)
把(式1-1)代入(式1-2)中得:
φ = ∑(Yi - a0 - a1 Xi)2 (式1-3)
当∑(Yi-Y计)平方最小时,可用函数 φ 对a0、a1求偏导数,令这两个偏导数等于零。
(式1-4)
(式1-5)
亦即:
m a0 + (∑Xi ) a1 = ∑Yi (式1-6)
(∑Xi ) a0 + (∑Xi2 ) a1 = ∑(Xi, Yi) (式1-7)
得到的两个关于a0、 a1为未知数的两个方程组,解这两个方程组得出:
a0 = (∑Yi) / m - a1(∑Xi) / m (式1-8)
a1 = [n∑Xi Yi - (∑Xi ∑Yi)] / [n∑Xi2 - (∑Xi)2 )] (式1-9)
这时把a0、a1代入(式1-1)中, 此时的(式1-1)就是我们回归的元线性方程即:数学模型。
在回归过程中,回归的关联式是不可能全部通过每个回归数据点(x1, y1、 x2, y2...xm,ym),为了判断关联式的好坏,可借助相关系数“R”,统计量“F”,剩余标准偏差“S”进行判断;“R”越趋近于 1 越好;“F”的绝对值越大越好;“S”越趋近于 0 越好。
R = [∑XiYi - m (∑Xi / m)(∑Yi / m)]/ SQR{[∑Xi2 - m (∑Xi / m)2][∑Yi2 - m (∑Yi / m)2]} (式1-10) *
在(式1-1)中,m为样本容量,即实验次数;Xi、Yi分别任意一组实验X、Y的数值。微积分应用课题一 最小二乘法
从前面的学习中, 我们知道最小二乘法可以用来处理一组数据, 可以从一组测定的数据中寻求变量之间的依赖关系, 这种函数关系称为经验公式. 本课题将介绍最小二乘法的精确定义及如何寻求 与 之间近似成线性关系时的经验公式. 假定实验测得变量之间的 个数据 , , …, , 则在 平面上, 可以得到 个点 , 这种图形称为“散点图”, 从图中可以粗略看出这些点大致散落在某直线近旁, 我们认为 与 之间近似为一线性函数, 下面介绍求解步骤.
考虑函数 , 其中 和 是待定常数. 如果 在一直线上, 可以认为变量之间的关系为 . 但一般说来, 这些点不可能在同一直线上. 记 , 它反映了用直线 来描述 , 时, 计算值 与实际值 产生的偏差. 当然要求偏差越小越好, 但由于 可正可负, 因此不能认为总偏差 时, 函数 就很好地反映了变量之间的关系, 因为此时每个偏差的绝对值可能很大. 为了改进这一缺陷, 就考虑用 来代替 . 但是由于绝对值不易作解析运算, 因此, 进一步用 来度量总偏差. 因偏差的平方和最小可以保证每个偏差都不会很大. 于是问题归结为确定 中的常数 和 , 使 为最小. 用这种方法确定系数 , 的方法称为最小二乘法.
应该是多元回归,公式形式为:y=a+bx1+cx2,没有d项的.根据一系列的y与x1,x2资料,可以用矩阵法,主元消去法通过回归分析求得a,b,c参数
首先表示一下同情。不过,这学校真这么过分吗?什么都不教就考?
最小二乘法的原理还是要明白一点的:
在已知有限数量的结果数据对时,推导出最可能的函数匹配。
而事实上,在实际应用过程中大多数情况是先预设了一个可能的函数模型的。
比如说有10对数据,你可以假定它是一个直线模型,也可以假定它是一个弧度较大的抛物线。
由此产生的结果函数自然是天差地远,完全不一致的。
所以,用计算机实现最小二乘法基本都是根据猜测的函数模型而编写相应程序。没通用的!
了解了上面这些,你再看考题就很清楚了:要求你写出两段程序,分别对应两个猜测函数。
这种程度的要求,不应该交给新手去做的。所以我开头说你学校过分。
这个题目太麻烦,我没时间把它实现出来。给你几个链接供你参考吧:
它们都不是这个问题的解答,因为对应的猜测函数是不一样的,提供个思路吧。
'新建窗体,添加text1,command1,picture1
Private Sub Command1_Click()
If Text1.Text = "" Then Exit Sub
Dim x() As Single, y() As Single, cnt As Integer
Dim xmax As Single, xmin As Single, ymax As Single, ymin As Single
Dim p() As String, z() As String
Dim xyh As Single, xh As Single, yh As Single, xph As Single, k As Single, b As Single
p = Split(Text1.Text, "/")
For i = 0 To UBound(p)
If p(i) "" Then
z = Split(p(i), "*")
If UBound(z) = 1 Then
If IsNumeric(z(0)) And IsNumeric(z(1)) Then
If cnt = 0 Then xmax = z(0): xmin = z(0): ymax = z(1): ymin = z(1)
If xmax z(0) Then xmax = z(0)
If xmin z(0) Then xmin = z(0)
If ymax z(1) Then ymax = z(1)
If ymin z(1) Then ymin = z(1)
xyh = xyh + z(0) * z(1): xh = xh + z(0): yh = yh + z(1): xph = xph + z(0) ^ 2
ReDim Preserve x(cnt), y(cnt)
x(cnt) = z(0): y(cnt) = z(1): cnt = cnt + 1
End If
End If
End If
Next
Picture1.Cls
Picture1.DrawWidth = 1
If xmax = xmin And ymax = ymin Then
MsgBox "单点无法拟合"
ElseIf xmax = xmin Then
Picture1.Scale (xmin * 0.5, ymax + 0.2 * (ymax - ymin))-(xmin * 1.5, ymin - 0.2 * (ymax - ymin))
zuobiaozhou xmin * 0.5, ymax + 0.2 * (ymax - ymin), xmin * 1.5, ymin - 0.2 * (ymax - ymin)
Picture1.Line (xmax, ymax + 0.2 * (ymax - ymin))-(xmax, ymin - 0.2 * (ymax - ymin)), vbBlue
ElseIf ymax = ymin Then
Picture1.Scale (xmin - 0.2 * (xmax - xmin), ymax * 1.5)-(xmax + 0.2 * (xmax - xmin), ymin * 0.5)
zuobiaozhou xmin - 0.2 * (xmax - xmin), ymax * 1.5, xmax + 0.2 * (xmax - xmin), ymin * 0.5
Picture1.Line (xmin - 0.2 * (xmax - xmin), ymax)-(xmax + 0.2 * (xmax - xmin), ymax), vbBlue
Else
Picture1.Scale (xmin - 0.2 * (xmax - xmin), ymax + 0.2 * (ymax - ymin))-(xmax + 0.2 * (xmax - xmin), ymin - 0.2 * (ymax - ymin))
zuobiaozhou xmin - 0.2 * (xmax - xmin), ymax + 0.2 * (ymax - ymin), xmax + 0.2 * (xmax - xmin), ymin - 0.2 * (ymax - ymin)
k = (xyh - (xh * yh) / cnt) / (xph - xh ^ 2 / cnt)
b = yh / cnt - k * xh / cnt
Picture1.Line (xmin - 0.2 * (xmax - xmin), k * (xmin - 0.2 * (xmax - xmin)) + b)-(xmax + 0.2 * (xmax - xmin), k * (xmax + 0.2 * (xmax - xmin)) + b), vbBlue
End If
Picture1.DrawWidth = 5
For i = 0 To cnt - 1
Picture1.PSet (x(i), y(i)), vbRed
Next
Text1.SetFocus
End Sub
Private Sub Form_Activate()
Text1.SetFocus
End Sub
Private Sub Form_Load()
Text1.Text = ""
Text1.ToolTipText = "横纵坐标间以乘号*分隔,各点间以除号/分隔。例如:100*100/200*200"
Command1.Caption = "绘图"
Picture1.AutoRedraw = True
End Sub
Private Sub Text1_KeyPress(KeyAscii As Integer)
If Not (IsNumeric(Chr(KeyAscii)) Or KeyAscii = 8 Or KeyAscii = 42 Or KeyAscii = 45 Or KeyAscii = 46 Or KeyAscii = 47) Then KeyAscii = 0
End Sub
Function zuobiaozhou(ByVal x1 As Single, y1 As Single, x2 As Single, y2 As Single)
For i = x1 + (x2 - x1) / 5 To x2 Step (x2 - x1) / 5
Picture1.Line (i, y2 + 100 * (y1 - y2) / Picture1.Height)-(i, y2)
Picture1.CurrentX = i - 250 * (x2 - x1) / Picture1.Width
Picture1.CurrentY = y2 + 350 * (y1 - y2) / Picture1.Height
Picture1.Print i
Next
For i = y2 + (y1 - y2) / 5 To y1 Step (y1 - y2) / 5
Picture1.Line (x1, i)-(x1 + 100 * (x2 - x1) / Picture1.Width, i)
Picture1.CurrentX = x1 + 150 * (x2 - x1) / Picture1.Width
Picture1.CurrentY = i + 80 * (y1 - y2) / Picture1.Height
Picture1.Print i
Next
End Function
稍等好吗?
好了,但愿没有耽误你!代码如下(注意不用任何控件即可):
Private Sub Form_click()
Dim N As Integer, U() As Double, I As Integer
Dim A As Single, B As Single
Form1.Cls
Print "数据:";
N = Val(InputBox("原始数据个数", "输入", 7))
If N = 1 Then Exit Sub
ReDim U(4, N)
Print "共"; N; "组:"
For I = 1 To N
U(1, I) = Val(InputBox("自变量 X 的值:", "第一组", I))
U(2, I) = Val(InputBox("因变量 Y 的值:", "第一组", I * 5))
U(3, I) = U(1, I) * U(2, I)
U(4, I) = U(1, I) ^ 2
Print "x("; I; ") = "; U(1, I); " y("; I; ") = "; U(2, I)
U(1, 0) = U(1, 0) + U(1, I)
U(2, 0) = U(2, 0) + U(2, I)
U(3, 0) = U(3, 0) + U(3, I)
U(4, 0) = U(4, 0) + U(4, I)
Next I
U(1, 0) = U(1, 0) / N
U(2, 0) = U(2, 0) / N
B = (U(3, 0) - N * U(1, 0) * U(2, 0)) / (U(4, 0) - N * U(1, 0) ^ 2)
A = U(2, 0) - B * U(1, 0)
Print "拟合公式为:"
Print " y = "; A;
If B = 0 Then Print " + ";
Print B; "x"
End Sub
Private Sub Form_Load()
Form1.AutoRedraw = True
Form1.Caption = "最小二乘法拟合程序"
Print "本程序执行的顺序为:"
Print "1、输入数据数量;"
Print "3、逐个输入各组数据;"
Print "2、输出拟合公式。"
Print "特别说明:本程序不用任何控件!只要把窗口拉的足够大就行了。"
Form1.Print "单击窗体开始..."
End Sub
已经运行过。