Программирование и основы алгоритмизации 3

МИНИСТЕРСТВО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ

ГОСУДАРСТВЕННОЕ ОБЩЕОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ

ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ



КАМСКАЯ ГОСУДАРСТВЕННАЯ ИНЖЕНЕРНО - ЭКОНОМИЧЕСКАЯ

АКАДЕМИЯ





Кафедра А и ИТ





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

по дисциплине «Программирование и основы алгоритмизации»



Вариант № 22







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

                                                                                                       группы № 4241-с

	                                                                                                       Валиев М.Р.

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

                                                                                                       Савицкий С.К.

                                           

                







Набережные Челны

2011



Задание



1. Найти минимум функции  tg(0.55x+0.1)–x2 методом золотого сечения.

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

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

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

1.4 Для контроля подставить найденный корень в уравнение и сравнить результат с «е» (он должен быть меньше «е»).

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



2. Дана целочисленная матрица a[ij] i, j=1, ..., n. Получить b1, ..., bn, где bi – это max aij 1  j  n.

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

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

































Теоретическое обоснование методов решения



Задание 1



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

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

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

Задание 2



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

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

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

	1.	Векторы. Управляющие воздействия, которые изменяют состояние системы, обычно задаются в виде векторов, называемых управляющими векторами.

2.	Матрицы. Системы управления часто описывают в виде систем дифференциальных уравнений, для решения которых применяют представление данных в виде систем матриц.

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





























Листинг программ



Текст программы 1:



Dim a As Double, b As Double    'отрезок

Dim m 'масштаб

Dim i 'счетчик

Dim X 'координата х

Dim Y 'значение f(x)

Dim u 'смещение по Оу

Dim w 'смещение по оси Ох

Private Sub Command1_Click()

Cls 'очистка экрана



a = -5

b = 5

Call draw 'вызов функции, которая рисует график

End Sub



Public Sub draw() 'функция, рисующая график

    'разметка по Ох (правая часть)

    For i = 0 To b + 1

       Line (w + i * m, u - 0.1)-(w + i * m, u + 0.1)

       Print i;

    Next i

    'разметка по Ох (левая часть)

    For i = 0 To a - 1 Step -1

       Line (w + i * m, u - 0.1)-(w + i * m, u + 0.1)

       Print i;

    Next i

    

    'разметка по Оу (верхняя часть)

    For i = 1 To 20

       Line (w - 0.1, u - i * m)-(w + 0.1, u - i * m)

       Print i

    Next i

    'разметка по Оу (нижняя часть)

    For i = 1 To 4

       Line (w - 0.1, u + i * m)-(w + 0.1, u + i * m)

       Print "-"; i

    Next i

    'рисование графика по точкам

For X = a To b Step 0.0001

    Y = -(Tan(0.55 * X + 0.1) - X ^ 2)

    PSet (X * m - a * m + 0 + m * a + w, Y * m + u)

Next





'рисование осей Ох и Оу

Line (0, u)-(30, u)

Line (w, 0)-(w, 30)

End Sub

Private Sub Form_Load()

m = 1.5 'начальный масштаб

u = 3 'начальное смещение координат относительно Оy

w = 4 'начальное смещение координат относительно Оx

End Sub

'вычисление минимума методом сечения

Private Sub Command4_Click()

Dim a, b, x1, x2, fx1, fx2

Dim c As Currency

Dim f_c As Currency

Dim a0, b0, e

  a0 = Val(InputBox("a"))

  b0 = Val(InputBox("b"))

 

  a = a0

  b = b0

  x1 = ((b0 - a0) * 0.382) + a0

  x2 = ((b0 - a0) * 0.618) + a0

  Do Until Abs(b - a) < 0.0001

   If (Tan(0.55 * x1 + 0.1) - x1 ^ 2) < (Tan(0.55 * x2 + 0.1) - x2 ^ 2) Then

     b = x2

     x2 = x1

     x1 = ((b - a) * 0.382) + a

   Else

     a = x1

     x1 = x2

     x2 = ((b - a) * 0.618) + a

   End If

  Loop

  c = (a + b) / 2

f_c = Tan(0.55 * c + 0.1) - c ^ 2



Text4.Text = c

Text3.Text = f_c

Call draw 'вызов функции, которая рисует график



End Sub















Текст программы 2:


 

 Private Sub Command1_Click()

   Cls ' очистка экрана

    n = InputBox("Введите порядок матрицы")

    ReDim a(n, n) As Double 'переопределение размера массива

    ReDim b(n) As Double

'ввод элементов матрицы

    For i = 1 To n

        b(i) = a(i, 1)

        For j = 1 To n

            a(i, j) = InputBox("Введите пожалуста элемент матрицы: (" + Str(i) + "," + Str(j) + "):")

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

        Next j

        Print b(i)

    Next i

    

 

End Sub



Private Sub zad_Click()

MsgBox ("Дана целочисленная матрица a[ij] i, j=1, ..., n. Получить b[1], ..., b[n], где b[i] - это max a[ij]= 1<= j<= n.")

End Sub







































Скриншоты программ



























Блок-схемы алгоритмов решения



Метод золотого сечения (1 задание)





начало

Выбор а0 и b0

a=a0

b=b0

x1=((b0-a0(*0.382)+a0

x2=((b0-a0(*0.618)+a0



|a-b|<0.0001

no

yes

f(x1)<f(x2)

no

yes

b=x2

x2=x1

x1=((b-a)*0.382)+a

a=x1

x1=x2

x2=((b-a)*0.618)+a

c=(a+b)/2

Вычисление f(c)



Вывод с и f(c)

конец

a0, b0 – начало и конец отрезка

а, b – начало и конец отрезка после его изменения

х1, х2 – точки внутри отрезка [a,b]

f(x1), f(x2) – значения целевой  функции в точках х1 и х2

с – середина отрезка [a,b]

числа 0,382 и 0,618 – числа золотого сечения

























2 задание





начало

Очистка экрана

Ввод порядка матрицы n

i = 1

j = 1

j > n

нет

да

aij < bi

да

нет

b(i) = a(i, j)

j = j + 1

Вывод элемента матрицы a(i,j)

конец

b(i) = a(i, 1)

i > n

нет

i = i + 1

Печать на форме bi

да







Проверка графика в MathCAD































Вывод: Я научился пользоваться средствами программирования Visual Basic для нахождения экстремума функции методом золотого сечения и для получения матрицы из нулей и единиц по исходной матрице и по заданному условию





Список использованной литературы





	1.	Волченков Н. Г. Программирование на Visual Basic 6: Учебное пособие Ч.1 - Ч.3 - М.: ИНФРА-М, 2000.

2.	Visual Basic 6.0: Пер. с англ. - СПб.: БХВ-Петербург, 2004. - 992 с.: ил. ISBN 5-8206-0019-3

	3.	Иванов М.Н., Суворов С.В. Информатика Часть 2. Программирование. Учебно-методическое пособие - М.; МГИУ, 2004

4.	Слепцова Л.Д. Программирование на языке VBA. Самоучитель,: -М.: Издательский дом «Вильямс», 2004

5.	Браун С. Visual Basic 5 c самого начала - СПб : Питер, 1998