Описание метода наименьших квадратов — КиберПедия 

Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций...

Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого...

Описание метода наименьших квадратов

2019-05-27 130
Описание метода наименьших квадратов 0.00 из 5.00 0 оценок
Заказать работу

 

В общем виде метод наименьших квадратов можно сформулировать так: имеются две переменные x и y, связанные некоторой функциональной зависимостью f, вид которой нам известен. В эту зависимость входят некоторые постоянные a и b, значения которых нам неизвестны, т.е. имеем зависимость y=f(x,a,b)

Для того, чтобы найти эти наиболее вероятные значения a и b, мы провели серию измерений x и y, т.е. нашли n пар значений xi эксп и yiэксп. Требуется найти такие значения a и b, которые при подстановке в зависимость совместно с xi эксп дали бы значения yi расч, наиболее близкие к yi эксп.

За меру близости yi расч и yi эксп чаще всего берут величину

Тогда задача поиска наиболее вероятных значений a и b сводится к поиску таких этих величин, при которых величина S будет наименьшей (наименьшая сумма квадратов отклонений экспериментальных и расчетных значений).

Известно, что минимум функции находится в точке,где соответствующие производные обратятся в нуль. В нашем случае должно быть(для простоты опустим символ «эксп»):

 

Тогда наиболее вероятные значения a и b можно найти,решив систему. Проще всего эта система решается, если x и y связаны линейной зависимостью, т.е.

Тогда   и система примет вид

или

 

Если обозначить , , , ,

то система перейдет в систему

aS3+bS1=S4

aS1+bn=S2

Из этой системы находим наиболее вероятные для данного набора xi и yi значения a и b:

В случая же  формулы для вычисления коэффициентов следующие:

 


БЛОК-СХЕМЫ АЛГОРИТМ ОВ

 

Ниже представлены блок-схемы алгоритмов ввода данных, вычисления коэффициентов уравнения зависимости и сортировки данных по возрастанию аргумента.

 

 

 
Рисунок 1 – Блок-схема алгоритма ввода данных

 


 

 

 
Рисунок 2 – Блок-схема алгоритма вычисления коэффициента уравнения регрессии

 

 


Рисунок 3 – Блок-схема алгоритма сортировки данных по возрастанию аргумента

4 Выполнение задания в Visual Basic

ЭСКИЗ ЭКРАННОЙ ФОРМЫ

Эскизы экранной формы представлены рисунках 4, 5 и 6.

Рисунок 4 – Эскиз экранной формы с изображением ввода данных

 
Рисунок 5 – Эскиз экранной формы с изображением результатов расчета


 
Рисунок 6 – Эскиз экранной формы с изображением построения графика


Программный код

Public Class Form1

Dim N As Integer, t() As Single, m() As Single, mr() As Single, mp() As Single

Sub MNK(ByRef N As Integer, ByRef x() As Single, ByRef y() As Single, ByRef A As Single, ByRef B As Single)

   Dim i As Integer

   Dim s1, s2, s3, s4 As Single

   s1 = 0: s2 = 0: s3 = 0: s4 = 0

   For i = 0 To N - 1

       s1 = s1 + x(i)

       s2 = s2 + x(i) * x(i)

       s3 = s3 + x(i) * y(i)

       s4 = s4 + y(i)

   Next i

   A = (N * s3 - s1 * s4) / (N * s2 - s1 * s1)

   B = (s2 * s4 - s1 * s3) / (N * s2 - s1 * s1)

End Sub


Sub Sortirovka(ByRef N As Integer, ByRef t() As Single, ByRef m() As Single, ByRef mr() As Single, ByRef mp() As Single)

   ReDim t(0 To N - 1), m(0 To N - 1), mr(0 To N - 1), mp(0 To N - 1)

   Dim i As Integer, k As Integer

   Dim x1, x2, x3, x4 As Single

   For i = 0 To N - 2

       For k = i To 0 Step -1

           If t(k) > t(k + 1) Then

               x1 = t(k)

               t(k) = t(k + 1)

               t(k + 1) = x1

               x2 = m(k)

               m(k) = m(k + 1)

               m(k + 1) = x2

               x3 = mr(k)

               mr(k) = mr(k + 1)

               mr(k + 1) = x3

               x4 = mp(k)

               mp(k) = mp(k + 1)

               mp(k + 1) = x4

           End If

       Next k

   Next i

End Sub

 

Private Sub mnuExit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuExit.Click

   End

End Sub

 

Private Sub mnuSaveAs_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuSaveAs.Click

   Dim file1 As Object

   Dim i As Integer, filename1 As String, stroka As String

   SaveFileDialog1.ShowDialog()

   filename1 = SaveFileDialog1.FileName

   file1 = New System.IO.StreamWriter(filename1)

   stroka = "Количество опытов N=" + CStr(N)

   file1.WriteLine(stroka)

   stroka = "Коэффициент A=" + TextBox2.Text

   file1.WriteLine(stroka)

   stroka = "Коэффициент B=" + TextBox1.Text

   file1.WriteLine(stroka)

   stroka = "№ t m mr mp"

   file1.WriteLine(stroka)

   For i = 0 To N - 1

       stroka = CStr(i + 1) + " " + CStr(t(i)) + " " + CStr(m(i)) + " " + CStr(mr(i)) + " " + CStr(mp(i))

       file1.WriteLine(stroka)

   Next i

   file1.Close()

End Sub

 

Private Sub mnuOpen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuOpen.Click

   Dim i, dlin, j As Integer

   Dim dt As New DataTable

   Dim stroka, stroka2, simv, filename1 As String

   Dim file1 As Object

   OpenFileDialog1.ShowDialog()

   filename1 = OpenFileDialog1.FileName

   file1 = New System.IO.StreamReader(filename1)

   stroka = file1.ReadLine()

   N = CInt(stroka)

   ReDim t(0 To N - 1), m(0 To N - 1)

   stroka = file1.ReadLine()

   dlin = Len(stroka)

   j = 0

   stroka2 = ""

   For i = 1 To dlin

       simv = Mid(stroka, i, 1)

       If simv <> " " Then

           stroka2 = stroka2 + simv

       Else

           t(j) = CSng(stroka2)

           stroka2 = ""

           j = j + 1

       End If

   Next i

   t(j) = CSng(stroka2)

   stroka = file1.ReadLine()

   dlin = Len(stroka)

   j = 0

   stroka2 = ""

   For i = 1 To dlin

        simv = Mid(stroka, i, 1)

       If simv <> " " Then

           stroka2 = stroka2 + simv

       Else

           m(j) = CSng(stroka2)

           stroka2 = ""

           j = j + 1

       End If

   Next i

   m(j) = CSng(stroka2)

   DataGridView1.DataSource = dt

   dt.Columns.Add(New DataColumn("t", GetType(String)))

   dt.Columns.Add(New DataColumn("m", GetType(String)))

   For i = 0 To N - 1

       dt.Rows.Add(New String() {t(i), m(i)})

   Next i

   file1.Close()

End Sub

 

Private Sub mnuComputation_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuComputation.Click

   Dim i As Integer, A As Single, B As Single, naim As Single, naib As Single

   Dim x(), y() As Single

   Dim dt As New DataTable

   ReDim x(0 To N - 1), y(0 To N - 1), mr(0 To N - 1), mp(0 To N - 1)

   For i = 0 To N - 1

       x(i) = t(i) + 273

       y(i) = Math.Log(m(i))

   Next i

 

    Call MNK(N, x, y, A, B)

   TextBox1.Text = CStr(B)

   TextBox2.Text = CStr(A)

 

   For i = 0 To N - 1

       mr(i) = Math.Exp(B) * Math.Exp(A * x(i))

       mp(i) = Math.Abs(mr(i) - m(i)) / Math.Abs(m(i))

   Next i

 

   Call Sortirovka(N, t, m, mr, mp)

 

   DataGridView2.DataSource = dt

   dt.Columns.Add(New DataColumn("t", GetType(String)))

   dt.Columns.Add(New DataColumn("m", GetType(String)))

   dt.Columns.Add(New DataColumn("mr", GetType(String)))

   dt.Columns.Add(New DataColumn("mp", GetType(String)))

   For i = 0 To N - 1

       dt.Rows.Add(New String() {t(i), m(i), mr(i), mp(i)})

   Next i

 

   naim = mp(0)

   naib = mp(0)

   For i = 1 To N - 1

       If mp(i) < naim Then

           naim = mp(i)

       End If

   Next i

   For i = 1 To N - 1

       If mp(i) > naib Then

           naib = mp(i)

       End If

   Next i

   TextBox3.Text = CStr(naim)

   TextBox4.Text = CStr(naib)

End Sub

 

Private Sub mnuGraph_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuGraph.Click

   Dim i As Integer

   Chart1.Series.Clear()

   Chart1.Series.Add("m(t)")

   Chart1.Series.Add("mr(t)")

   Chart1.ChartAreas("ChartArea1").AxisX.Title = "t"

   Chart1.ChartAreas("ChartArea1").AxisY.Title = "m(t), mr(t) "

   Chart1.Series("mr(t)").ChartType = DataVisualization.Charting.SeriesChartType.Spline

   Chart1.Series("m(t)").ChartType = DataVisualization.Charting.SeriesChartType.FastPoint

   Chart1.Series("m(t)").Color = Color.Red

   Chart1.Series("mr(t)").Color = Color.Blue

   Chart1.Series("m(t)").BorderWidth = 3

   Chart1.Series("mr(t)").BorderWidth = 2

   For i = 0 To N - 1

       Chart1.Series("m(t)").Points.AddXY(t(i), m(i))

       Chart1.Series("mr(t)").Points.AddXY(t(i), mr(i))

   Next i

End Sub

 

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

   Dim i As Integer

   Dim dt As New DataTable

   N = CInt(InputBox("Введите число опытов N="))

   ReDim t(0 To N - 1), m(0 To N - 1)

   DataGridView1.DataSource = dt

   dt.Columns.Add(New DataColumn("t", GetType(String)))

   dt.Columns.Add(New DataColumn("m", GetType(String)))

   For i = 0 To N - 1

       t(i) = CSng(InputBox("t(" + CStr(i) + ")="))

       m(i) = CSng(InputBox("m(" + CStr(i) + ")="))

       dt.Rows.Add(New String() {t(i), m(i)})

   Next i

End Sub

 

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

   Dim i As Integer, A As Single, B As Single, naim As Single, naib As Single

      Dim x(), y() As Single

   Dim dt As New DataTable

   ReDim x(0 To N - 1), y(0 To N - 1), mr(0 To N - 1), mp(0 To N - 1)

   For i = 0 To N - 1

       x(i) = t(i) + 273

       y(i) = Math.Log(m(i))

   Next i

   Call MNK(N, x, y, A, B)

   TextBox1.Text = CStr(B)

   TextBox2.Text = CStr(A)

   For i = 0 To N - 1

       mr(i) = Math.Exp(B) * Math.Exp(A * x(i))

       mp(i) = Math.Abs(mr(i) - m(i)) / Math.Abs(m(i))

   Next i

   Call Sortirovka(N, t, m, mr, mp)

   DataGridView2.DataSource = dt

   dt.Columns.Add(New DataColumn("t", GetType(String)))

   dt.Columns.Add(New DataColumn("m", GetType(String)))

   dt.Columns.Add(New DataColumn("mr", GetType(String)))

   dt.Columns.Add(New DataColumn("mp", GetType(String)))

   For i = 0 To N - 1

       dt.Rows.Add(New String() {t(i), m(i), mr(i), mp(i)})

   Next i

   naim = mp(0)

   naib = mp(0)

   For i = 1 To N - 1

       If mp(i) < naim Then

           naim = mp(i)

       End If

   Next i

   For i = 1 To N - 1

       If mp(i) > naib Then

           naib = mp(i)

       End If

   Next i

   TextBox3.Text = CStr(naim)

   TextBox4.Text = CStr(naib)

End Sub

 

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click

   Dim i As Integer

   Chart1.Series.Clear()

   Chart1.Series.Add("m(t)")

   Chart1.Series.Add("mr(t)")

    Chart1.ChartAreas("ChartArea1").AxisX.Title = "t"

   Chart1.ChartAreas("ChartArea1").AxisY.Title = "m(t), mr(t) "

   Chart1.Series("mr(t)").ChartType = DataVisualization.Charting.SeriesChartType.Spline

   Chart1.Series("m(t)").ChartType = DataVisualization.Charting.SeriesChartType.FastPoint

   Chart1.Series("m(t)").Color = Color.Red

   Chart1.Series("mr(t)").Color = Color.Blue

   Chart1.Series("m(t)").BorderWidth = 3

   Chart1.Series("mr(t)").BorderWidth = 2

   For i = 0 To N - 1

       Chart1.Series("m(t)").Points.AddXY(t(i), m(i))

       Chart1.Series("mr(t)").Points.AddXY(t(i), mr(i))

   Next i

End Sub

 

Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click

   Dim file1 As Object

   Dim i As Integer, filename1 As String, stroka As String

   SaveFileDialog1.ShowDialog()

   filename1 = SaveFileDialog1.FileName

   file1 = New System.IO.StreamWriter(filename1)

   stroka = "Количество опытов N=" + CStr(N)

   file1.WriteLine(stroka)

   stroka = "Коэффициент A=" + TextBox2.Text

   file1.WriteLine(stroka)

   stroka = "Коэффициент B=" + TextBox1.Text

   file1.WriteLine(stroka)

   file1.WriteLine(stroka)

   stroka = "№ t m mr mp"

   file1.WriteLine(stroka)

   For i = 0 To N - 1

       stroka = CStr(i + 1) + " " + CStr(t(i)) + " " + CStr(m(i)) + " " + CStr(mr(i)) + " " + CStr(mp(i))

       file1.WriteLine(stroka)

    Next i

   file1.Close()

End Sub

 

Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click

   End

End Sub

End Class

РЕЗУЛЬТАТ Ы

Результаты работы программы представлены на рисунках 7, 8 и 9.

 
Рисунок 7 – Эскиз экранной формы с изображением результатов ввода данных

 

 


Рисунок 8 – Эскиз экранной формы с изображением результатов вычислений

 

 

Рисунок 9 – Эскиз экранной формы с изображением результатов построения графиков экспериментальных данных и рассчитанной зависимости

 


Поделиться с друзьями:

Типы сооружений для обработки осадков: Септиками называются сооружения, в которых одновременно происходят осветление сточной жидкости...

История развития пистолетов-пулеметов: Предпосылкой для возникновения пистолетов-пулеметов послужила давняя тенденция тяготения винтовок...

Адаптации растений и животных к жизни в горах: Большое значение для жизни организмов в горах имеют степень расчленения, крутизна и экспозиционные различия склонов...

Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰)...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.151 с.