Метод деления отрезка пополам на Visual basic и создание массива

 

                 Кафедра «АиИТ» 
           

             Курсовая  работа 

          по дисциплине: «ПиОА»

               Вариант№ 22 
           
           

Выполнил: студент группы 4241 

Проверил: доцент,

кафедры «АиИТ»

.

Старший преподаватеь 
 
 
 
 
 
 
 
 
 
 
 
 

          – 2010г.

          Содержание 
           
           

Введение……………………………………………………………………3

1. Задание к курсовому проекту…………………………………………..4

1.1.Теоретическая часть .Метод деления отрезка пополам……………..5

1.2.Ход работы .Построение графика функции в Excel…………………6

1.3.Блок-схема программы……………….. ………………………………7

1.4.Листинг программы…………………………………………………....8

2.Теоретическая часть. Массивы. ………………………………………..10

2.1.Блок-схема программы ……………………………………………….11

2.2.Листинг программы…………………………………………………...12

Выводы……………………………………………………………………..14

Список литературы………………………………………………………...15 
 
 
 
 
 
 
 
 
 
 
 
 
 

               Введение 

     При разработке новых конструкций, механизмов и т.п. возникает необходимость выбора наилучшего варианта из всех возможных. Такой процесс называют оптимизацией. В процессе решения задачи оптимизации обычно необходимо найти оптимальные значения некоторых проектных параметров, определяющих данную задачу. В качестве проектных параметров могут быть, в частности, значение линейных размеров объекта, массы, температуры и т.п. выбор оптимального решения или сравнение двух альтернативных решений проводится с помощью некоторой зависимой величины, называемой целевой функцией. В процессе решения задачи оптимизации должны быть найдены такие значения проектных параметров, при которых целевая функция имеет минимум (или максимум).

     В случае одного проектного параметра  целевая функция является функцией одной переменной (одномерная задача оптимизация), и её график – некоторая кривая на плоскости. При нескольких проектных параметров целевая функция является функцией нескольких переменных (многомерная задача оптимизации), и её график – некоторая многомерная плоскость.

     Одномерная  задача оптимизации в общем случае формулируется следующим образом. Найти наименьшее (или наибольшее) значение целевой функции y = f(x), заданной на множестве σ, и определить значение проектного параметра x принадлежащего к σ, при котором целевая функция принимает экстремальное значение. Для решения этой задачи существует ряд специальных методов поиска оптимальных решений с разными способами выбора узлов и сужения интервала неопределённости. 
 

           1. Задание к курсовой работе 
       

1.Найти  приближенное значение минимума, методом деления функции на  отрезки  функции f(x) = x^4-18x^+6=0;

1.1.Выбрать начальный отрезок, содержащий минимум функций. Для   этого построить график функций. При построении графиков функций следует предварительно выбрать расположение координатных осей и масштабов на них.

1.2.Составить блок-схему алгоритма.

1.3.Отладить и выполнить  программу на ЭВМ, получить с заданной точностью Е= 10-4 минимум функций f(x).

1.4.Для контроля подставить найденный корень в уравнение и сравнить результат с «Е».

1.5.Проверить полученное решение путем построения графиков в Excel или MathCAD. 
 

2.Для  заданного варианта выполнить  задание с использованием массива:

Дана  матрица размера mxn .Найти среднее арифметическое наибольшего и наименьшего значений ее элементов.

2.1.Составить блок-схему алгоритма.

2.2.Отладить и выполнить программу на ЭВМ. 
 
 
 
 

1.1. Теоретическая часть. Метода деления отрезка пополам 

     Это один из самых простых методов, который, хотя и требует значительного  объёма вычислений, но всегда приводит к искомому результату. Если вид целевой функции f(x) достаточно сложный, то вычисления другими методами (кроме метода золотого сечения) затруднительно. Метод состоит в построении последовательности отрезков [a0, b0], [a1,b1], …, стягивающих к точке минимума функций f(x). На каждом шаге, за исключением первого, вычисление значение функций f(x) проводится три раза.

     На  первом шаге процесса оптимизации внутри отрезка [a0, b0] выбираются внутренняя точка с0 = (a0 + b0) / 2 и вычисляется значение целевой функции f(c0).Затем определяются еще две внутренние точки x1 = (a0 + c0) / 2 и x2 = (b0 + c0) / 2, и вычисляется значение целевой функции a0 x1 c0 x2 bo,f(x1) и f(x2). Поскольку в данном случае f(x1) < f(x2), очевидно, что минимум расположен на одном из прилегающих к x1отрезков [a0, x1] или [x1, c0]. Поэтому отрезок [с0, b0] можно отобразить, сузив тем самым первоначальный интервал.

         Второй шаг на отрезке [a1, b1] ,где a1 = a0, b1 = c0, c1 = x1. Нужно выбрать уже внутренние точки, как и на предыдущем шаге, x3, x4, вычислить значение f(x3), f(x4)и провести сравнение. Поскольку здесь a1=a0 x3 c1=x1 x4 b1=c0,f(x3)> f(x4), ясно, что минимум находится на отрезке [c1, b1]. Обозначим этот отрезок[a2, b2], снова выберем внутренние точки и повторим процедуру сужение интервала неопределённости. Процесс оптимизации повторяется до тех пор, пока длина очередного отрезка не станет меньше заданной величины e. 

1.2.Ход работы. Построение графика функции в Excel 
 
 
 

 Уравнение  графика x^4-18x^2+6=0. 
 
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Вычислим производную  функции: 
 

F(x)=4x^3-36x=4x(x-3)(x+3). 

Корни уравнения 

X1=0,5

X2=-05

X3=4.2

X4=-4.2 
 

1.3.Блок  схема алгоритма  Метода деления  отрезка по полам 
 
 
 

 

      Начало

 

      a,b,e

 
 

      c=(a+b)/2 
 

 
 

                                                              (a-b)<e

 
 

             fc = c ^ 4 - 18 * c ^ 2 + 6

            x1 = (a + c) / 2

               x2 = (b + c) / 2

fx1 = x1 ^ 4 - 18 * x1 ^ 2 + 6

fx2 = x2 ^ 4 - 18 * x2 ^ 2 + 6 

 

                                                        Fx1<Fx2

 

      a=c b=c

                        c=x2 c=x1

                                                                                

 

     c,fc    
 
 

                 Конец 

                           1.4.Листинг программы 
 
 
 

Private Sub Command1_Click()

Dim a, b, c, x1, x2 As Single

Dim e As Single

Dim fx1, fx2, fc As Single 

'Вводим данные

a = Text1.Text

b = Text2.Text

e = Text3.Text 

'Расчитываем  с

c = (a + b) / 2 

'Цикл пока  длина отрезка по модулю не  будет меньше числа e

Do Until Abs(a - b) < e

'вычисляем значение  ф-ии в точке с

fc = c ^ 4 - 18 * c ^ 2 + 6

 

  'находим  точки х1, х2  и значения функции  в этих точках fx1, fx2

  x1 = (a + c) / 2

  x2 = (b + c) / 2

 

  fx1 = x1 ^ 4 - 18 * x1 ^ 2 + 6

  fx2 = x2 ^ 4 - 18 * x2 ^ 2 + 6

 

  'Сравниваем 2 значения м/у собой

  'Если первое  значение больше, то сокращаем  отрезок: граница b становится  значением с

  'а с становится  значением х1

  If fx1 < fx2 Then

    b = c

    c = x1

  'Если второе  значение больше, то сокращаем  отрезок: граница a становится  значением с

  'а с становится  значением х2

  Else

    a = c

    c = x2

  End If

 

'Выводим значения  на экран

Label6.Caption = c

Label7.Caption = fc

Loop

End Sub 
 

 
 
 
 
 
 
 
 
 

        2.Теоретическая часть. Массивы 

     Массив  –это регулярная структура данного  одного типа, где все компоненты могут выбираться произвольно и  являются одинаково доступными. Регулярность заключается в том, что все  данные организованы по определённой закономерности. Для обеспечения доступа к любому элементу массива вводится специальное число называемое индексом.

      Индекс  – это целое число или совокупность целых чисел, указывающие местоположение элемента в массиве.

     Например, имеем следующий массив чисел:

X1 0,5
X2 0,25
X3 0,125
X4 0,0625

     Каждый  элемент этого массива может  быть определён по следующей зависимости: XJ = 2^ (-j), где j- индекс.

     Например, для значения индекса j=  2, значение элемента массива будет равно: X2 = 2 ^ (-2) = 0, 25.

      По  своей размерности массивы разделяются на: одномерные, двумерные и т.д. Для вещественных чисел это соответственно будут векторы, матрицы, тензоры.

      Массивы применяются в широкой области  приложений, например:

      1. Векторы. Управляющие воздействия, которые изменяют состояние системы, обычно задаются в виде векторов, называемых управляющими векторами.
      2. Матрицы. Системы управления очень часто описывают в виде систем дифференциальных уравнений, для решения которых применяют представление данных систем в виде матриц.
      3. Тензоры. Для графических данных на экране дисплея помимо двухмерного массива, отображающего место символа.

      2.1.Блок-схема  программы  

      начало

 a(m,n)

 

      i,j=1

 min=(1,1)

                                                        max=(1,1)

  

      i=m

 j=n

      a(i,i)<min

      min=a(i,j)

 a(i,j)>max 

 

      max=a(i,j)

 j=j+1  

      i=i+1 

avg = (max + min) / 2

 avg 

    конец

                          2.2.Листинг программы 
 
 

Private Sub Command1_Click()

Dim i, j, n, m As Integer

'Задаем размерность  массива

n = Text1.Text

m = Text2.Text 

'Объявляем динамический  массив

Dim a() As Integer

ReDim Preserve a(m, n) 

'Очищаем поле  вывода массива

Label1.Caption = ""

For i = 1 To m

For j = 1 To n

'Записываем  в i,j элемент матрицы случайное число

a(i, j) = 50 - Rnd * 100

'Выводим его

Label1.Caption = Label1.Caption + Str(a(i, j))

Next j

'В конце каждой  строки переносим на след. строку

Label1.Caption = Label1.Caption + Chr(13)

Next i 

i = 0

j = 0

Dim min, max As Integer

Dim avg As Single

'Записываем в min и max первый элемент матрицы

min = a(1, 1)

max = a(1, 1)

'Находим мин  и макс элементы

For i = 1 To m

For j = 1 To n

If a(i, j) < min Then min = a(i, j)

If a(i, j) > max Then max = a(i, j) 

Next j

Next i

Label7.Caption = max

Label8.Caption = min

'Расчитываем  среднее арифметическое

avg = (max + min) / 2

Label9.Caption = avg 

End Sub 
 

 
 
 
 
 
 
 
 
 

                                                     Выводы 

     Выполняя  данную работу я , познакомился с двумя методами для нахождения минимального значения функции на определенном промежутке и на примере 1-го задания выполнил задачу применив один из этого метода – метод «деления отрезка пополам». Выяснил, каким образом работает алгоритм программы и как необходимо его написать для более эффективной работы программы путем уменьшения числа шагов.

     Выполняя  второе задание курсовой работы .Я научился выполнять различные действия над массивами: ввод, вывод элементов, поиск, сравнение. Научились оптимизировать свои алгоритмы. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

                        Список  литературы 
 
 

1.Турчак Л.И. Основы численных методов: Учебное пособие. – М.: 2.Наука. Гл. ред. Физ.мат. лит., 1987. – 320с.

2.Шемелин В.К. Проектирование систем управления в . машиностроении: 3.Учебник для студентов технических вузов. – М.: Издательство “Станкин”, 1998. – 254с.

4.Светозарова Г.И. и др. Практикум по программированию на алгоритмических языках. – М.: Наука, 1980.

5.Гутер Р.С. , Овчинский Б.В. «Элементы численного  анализа и математической обработки результатов опыта». Москва, «Наука», 1979

6.Калиткин Н.Н. «Численные методы». Москва, «Наука», 1978

7.Крылов В.И., БабковВ.В., Монастырский П.И. «Вычислительные  методы». Москва, «Наука», 1976

8.П. Санна. «Visual Basic for Applications 6.0 «в подлиннике», Киев, BHV

9. Microsoft Visual Basic 2005 (+ CD-ROM): Майкл Хальворсон — Санкт-Петербург, ЭКОМ Паблишерз, 2007 г.- 640 с.

10.isual Basic .NET. Практическое  руководство для начинающего  программиста: М. А. Трусов —  Санкт-Петербург, НТ Пресс, 2006 г.- 176 с. 

Метод деления отрезка пополам на Visual basic и создание массива