Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа №5.doc
Скачиваний:
8
Добавлен:
01.05.2014
Размер:
150.02 Кб
Скачать

4. Описание интерфейса пользователя программы.

4.1 Ввод функции

С помощью ComboBox(4 функции ) и в самомVC++.

4.2 Ввод начальной точки

Через запятую в соответствии с количеством переменных.

4.3 Ввод количества итераций

Целое число от 1 до 30000

4.4 Ввод нормы градиента

Рациональное число от 1 до 1000

4.5 Начало вычислений

Нажатие кнопки

4.6 Ответ по Свену

Через запятую в соответствии с переменными

4.7 Ответ конечный

Через запятую в соответствии с переменными

5. Результаты сравнения двух способов вычисления производных – численного и аналитического.

Численное реализуется:

voiddf(double*tochka,double*otvet)//численная производная

{

double* tochka2 = new double[n];

for (int i=0; i<n; i++)

tochka2[i]=tochka[i];

double h=0.000001; // приращение

for(i=0; i<n; i++)

{

tochka[i]=tochka[i]+h;

tochka2[i]=tochka2[i]-h;

otvet[i]=(f(tochka,c) - f(tochka2,c))/(2*h);//вычисляем производную

tochka[i]= tochka[i] - h;

tochka2[i]=tochka2[i] + h;

}

}

double diffp(double *tochka, double *p)//производная по направлению

{

double* res = new double[n], otv=0;

df(tochka, res);

for(int i=0;i<n; i++)

otv=otv+res[i]*p[i];

return otv;

}

Аналитическое реализуется:

doublegra(doubley[],doublez[])//Аналитическая производная

{

double ar[2] = {0,0};

double sum = 0;

ar[0] = 400*y[0]*y[0]*y[0] - 400*y[1]*y[0] + 2*y[0] - 2 ;

ar[1] = 200*y[1] - 200*y[0]*y[0] ;

for (int i=0; i<n; i++)

sum = sum + ar[i]*z[i];

return sum;

}

Сравнение показало, что результаты аналитического и численного вычисления схожи

Для функции 100(x2 - x1^2^)2 + (1 - x1)^2

х1 = (-1.2,1)

При Норме градиента = 0.1 и число итераций = 1000

1) Численный

1.03633140514;1.07413784059

2) Аналитический(л.р №4)

1.05499383527;1.11323855157

6. Результаты сравнения двух способов организации линейного поиска (с использованиемкласса вектораи использованием явной зависимостиy(α)).

Для функции 100(x2 - x1^2^)2 + (1 - x1)^2

х1 = (-1.2,1)

При Норме градиента = 0.1 и число итераций = 1000

1) Численный

1.03633140514;1.07413784059

2) Аналитический(л.р №4)

1.05499383527;1.11323855157

8.Ответы на контрольные вопросы.

    1. Перечислить основные постулаты структурного программирования.

  1. работа с процедурами и функциями.

  2. Использование динамических структур памяти.

    1. Перечислить основные постулаты объектно-ориентированного программирования.

  1. Инкапсуляция

  2. Наследование

  3. Полиморфизм

Объект - это абстрактная сущность, наделенная характеристиками объектов окружающего нас реального мира. Создание объектов и манипулирование ими - это вовсе не привилегия языка C++, а скорее результат методологии программирования, воплощающей в кодовых конструкциях описания объектов и операции над ними. Каждый объект программы, как и любой реальный объект, отличается собственными атрибутами и характерным поведением. Объекты можно классифицировать по разным категориям: например, мои цифровые наручные часы "Cassio" принадлежат к классу часов. Программная реализация часов входит, как стандартное приложение, в состав операционной системы вашего компьютера.

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

Объектно-ориентированное программирование (ООП) — это методика, которая концентрирует основное внимание программиста на связях между объектами, а не на деталях их реализации. В этой главе основные принципы ООП (инкапсуляция, наследование, полиморфизм, создание классов и объектов) интерпретируются и дополняются новыми понятиями и терминологией, принятыми интегрированной средой визуальной обработки C++Builder. Приводится описание расширений языка новыми возможностями (компоненты, свойства, обработчики событий) и последних дополнений стандарта ANSI C++ (шаблоны, пространства имен, явные и непостоянные объявления, идентификация типов при выполнении программы, исключения).

8.3. Какие преимущества дает объектно-ориентированный подход?

Использование классов даёт приемущества в инкапсуляции, наследовании классов, защите объектов.

    1. Какие варианты при разработке класса вектора были рассмотрены, каковы достоинства и недостатки каждого из вариантов?

Были рассмотрены варианты использования класса вектора с численным дифференцированием и аналит. дифференцированием.

Преимущество первого в универсальности.

Второго в точности.

8.5. Представить 3 формулы численного дифференцирования. Являются ли они равноценными при практической реализации?

1)правое

(y(x^k+hi*li)-y(x^k))/(d²y)

2)левое

(y(x^k-hi*li)-y(x^k))/(d²y)

3)центральное

(y(x^k+hi*li+hj*lj)-y(x^k+hj*lj))/(d²y)