决策支持系统及其开发实验报告模板(3)

2019-03-27 22:53

实验四 程序模型

一、实验目的

掌握程序模型的实现方法

二、实验内容

编制模型的计算机算法程序。 思考实现计算机算法的要求。

三、方案设计与要求

1、任选一个数学模型。

2、配置编程环境。

3、明确模型的人工解法,转变为计算机算法,进行必要的数据管理,并编程实现。

四、实验结果(结论)

1.数学模型

最小二乘法:一种数学优化技术,它通过最小化误差的平方和找到一组数据的最佳函数匹配。最小二乘法是用最简的方法求得一些绝对不可知的真值,而令误差平方之和为最小。最小二乘法通常用于曲线拟合。

设已知列表函数yi?f(xi)(i?0,1,?,m),并且我们想用一个通常的n(?m)次多项式去近似它。

pn(x)?a0?a1x???anxn---(1.1)

问题是应该如何选择a0,a1,?,an使pn(x)能较好地近似列表函数f(x)。按最小二乘法,应该选择a0,a1,?,an使得

S(a0,a1,?,an)??(f(xi)?pn(xi))2

i?0m取最小。注意到S是非负的,且是a0,a1,?,an的2次多项式,它必有最小值。 2.人工算法

求S对a0,a1,?,an的偏导数,并令其等于零,得到

?(yi?0mi?a0?a1xi???anxi)xi?0nk(k?0,1,?,n).

进一步,可以将它们写成

?yixi?a0?xi?a1?xikki?0i?0i?0mmmk?1???an?xii?0mk?n(k?0,1,?,n).

10

引进记号

sk??xi 和 uk??yixi,

kki?0i?0mm则上述方程组为

?s0a0?s1a1???snan?u0,?sa?sa???sa?u,?1021n?1n1 (1.3) ????????????????sna0?sn?1a1???s2nan?un.它的系数行列式是

s0Xn?1?s1?sns1s2?sn?1??sn?s2n.

?sn?1由si(i?0,1,?,2n)的定义及行列式性质,可以断言

Xn?1?1(W(?0,?1,?,?n))2. (1.4) ?(n?1)!此处符号W表Vandermonde行列式,而?是对所有可能的?i(i?0,1,?,n)求和(每个?i可

???j以取值x0,x1,?,xm,并且当i?j时i)。

由(1.4)式及Vandermonde行列式的性质可知,当x0,x1,?,xm互异时,

11?1?0?1??n W(?0,?1,?,?n)??02?12??n2?0.

????0n?1n??nn从而,Xn?1?0??0?,方程组?1.3?有唯一解a0,a1,?,an,且它们使?1.2?取极小值.如此,我们应用最小二乘法找到了f?x?的近似多项式pn?x?.

在利用最小二乘法组成和式?1.2?时,所有点xi都起到了同样的作用,但是有时依据某种理由认为?中的某些项的作用大些,而另外一些作用小些(例如,一些yi是由精度较高的仪器或操作上比较熟练的人员获得的,自然应该予以较大的信任),这在数学上表现为用和

11

2???????fx?px?inini i?0?i?1,??i通常称之为权;而?1.5?为加权和。 替代和?1.2?取最小值.?i?0,且i?1m

3.编程环境

在window7电脑系统,使用visual Basic 6.0编写调用程序。 4.详细计算机算法

使用vb输入数据控件模拟最小二乘法的二次多项式曲线拟合,以下是二次的算法解法:

2y?ax?bx?c 最小二乘法的二次多项式曲线拟合:

计算值?xi,yt?到实际值?xi,yi?的距离di

di?yt?yi?axi2?bxi?c?yi

误差的平方和为

Q??di2??(axi2?bxi?c?yi)2

求a、b、c使得Q的值最小。平方差Q大于0,因此函数存在大于或等于0的极小值,极小值为无穷大。

对a、b、c求偏导,令偏导等于0,得到极值点,比较所有极值点的函数值即可得到最小值。 ?Q??2?axi2?bxi?c?yi?xi2?0 ② ?a?Q??2?axi2?bxi?c?yi?xi?0 ③ ?b?Q??2?axi2?bxi?c?yi??0 ④ ?c解此方程组,先消去c

②*N - ④*

?x2i

N*?axi2?bxi?c?yixi2??axi2?bxi?c?yi*?xi2?0 N*?axi2?bxi?yixi2??axi2?bxi?yi*?xi2?0

?????????N?x??x*?x?a??N?x??x*?x?b???y*?x4i2i2i3ii2ii2i?N?xi2yi?0

?③*N - ④*

?x

iN*?axi2?bxi?c?yixi??axi2?bxi?c?yi*?xi?0 N*?axi2?bxi?yixi??axi2?bxi?yi*?xi?0

12

?????????N?x??x*?x?a??N?x??x*?x?b???y*?x?N?xy??0

3i2ii2iiiiiii令:

C?N?xi4??xi2*?xi2 D?N?xi3??xi*?xi2 E???????y*?xi2i?N?xi2yi

?G?N?xi2??xi*?xi H???yi*?xi?N?xiyi?

可解得

???Ca?Db?E?0 ??Da?Gb?H?0HD?EG

CG?D2HC?EDb?2

D?GCa?c??a?xi2?b?xi??yiN

2y?ax?bx?c。 最终拟合出来的结果二次多项式为

计算机算法:

1、输入所需解算的数据(也可用数据倒入数据);

2、运用最小二乘法处理数据,得到近似结果,并进行对结果的显示输出; 3、对模型计算得出的结果进行检验和评价。 5.完整源程序清单

在vb工程中,创有一个窗体,并在窗体上有一个按钮控件启动数据处理,以及一个文本控件来输入数据量。

Option Explicit

Private Sub Command1_Click()

Dim n As Integer, xy() As Double, i As Integer Dim a As Double, b As Double Form1.Cls

Print \从这开始计算!\If Text1.Text = \

MsgBox \请输入n的值!\注意\用文本框输入n的值!

13

Else

n = CInt(Text1.Text) If n <= 1 Then Exit Sub End If

ReDim xy(4, n)

Print \一共有\对数据!\For i = 1 To n

xy(1, i) = Val(InputBox(\自变量 X 的值:\ xy(2, i) = Val(InputBox(\因变量 Y 的值:\

xy(3, i) = xy(1, i) * xy(2, i) '求出每一对x与y的乘积 xy(4, i) = xy(1, i) ^ 2 '求出每一个x的平方值

Print \ xy(1, 0) = xy(1, 0) + xy(1, i) '所有x值的和' xy(2, 0) = xy(2, 0) + xy(2, i) '所有y值的和'

xy(3, 0) = xy(3, 0) + xy(3, i) 'x,y的乘积之和' xy(4, 0) = xy(4, 0) + xy(4, i) 'x的平方之和' Next i

a = (n* xy(3, 0) - xy(1, 0)* xy(2, 0)) / (n* xy(4, 0) - xy(1, 0) ^ 2) b = xy(2, 0) / n - a / n * xy(1, 0) '计算a,b的值 Print \拟合公式为:\

Print \ If a >= 0 Then Print \ Print a; \End Sub

Private Sub Form_Load()

Form1.AutoRedraw = True '运行界面 Form1.Caption = \最小二乘法拟合程序\ Print

Print \、输入数据数量;\

Print \、逐个输入各组数据;\

Print \、输出拟合公式。\ Print

Form1.Print \单击开始计算按钮运行...\End Sub

某组数据计算结果图:

14


决策支持系统及其开发实验报告模板(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:中国养老保险制度的历史沿革与改革现状

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: