- •2005 Г Содержание:
- •1. Цель работы и требования задания :
- •2. Спецификация программы, раскрывающая смысл входных и выходных данных, основных переменных, функций и классов.
- •2.1. Входные данные :
- •2.2. Выходные данные :
- •2.4. Класс Cvector:
- •3.Текст программы с детальными комментариями ведущих операторов программы.
- •4. Описание интерфейса пользователя программы.
- •5. Результаты сравнения двух способов вычисления производных – численного и аналитического.
- •8.Ответы на контрольные вопросы.
- •9.Вывод
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.Ответы на контрольные вопросы.
Перечислить основные постулаты структурного программирования.
работа с процедурами и функциями.
Использование динамических структур памяти.
Перечислить основные постулаты объектно-ориентированного программирования.
Инкапсуляция
Наследование
Полиморфизм
Объект - это абстрактная сущность, наделенная характеристиками объектов окружающего нас реального мира. Создание объектов и манипулирование ими - это вовсе не привилегия языка C++, а скорее результат методологии программирования, воплощающей в кодовых конструкциях описания объектов и операции над ними. Каждый объект программы, как и любой реальный объект, отличается собственными атрибутами и характерным поведением. Объекты можно классифицировать по разным категориям: например, мои цифровые наручные часы "Cassio" принадлежат к классу часов. Программная реализация часов входит, как стандартное приложение, в состав операционной системы вашего компьютера.
Каждый класс занимает определенное место в иерархии классов, например, все часы принадлежат классу приборов измерения времени (более высокому в иерархии), а класс часов сам включает множество производных вариаций на ту же тему. Таким образом, любой класс определяет некоторую категорию объектов, а всякий объект есть экземпляр некоторого класса.
Объектно-ориентированное программирование (ООП) — это методика, которая концентрирует основное внимание программиста на связях между объектами, а не на деталях их реализации. В этой главе основные принципы ООП (инкапсуляция, наследование, полиморфизм, создание классов и объектов) интерпретируются и дополняются новыми понятиями и терминологией, принятыми интегрированной средой визуальной обработки C++Builder. Приводится описание расширений языка новыми возможностями (компоненты, свойства, обработчики событий) и последних дополнений стандарта ANSI C++ (шаблоны, пространства имен, явные и непостоянные объявления, идентификация типов при выполнении программы, исключения).
8.3. Какие преимущества дает объектно-ориентированный подход?
Использование классов даёт приемущества в инкапсуляции, наследовании классов, защите объектов.
Какие варианты при разработке класса вектора были рассмотрены, каковы достоинства и недостатки каждого из вариантов?
Были рассмотрены варианты использования класса вектора с численным дифференцированием и аналит. дифференцированием.
Преимущество первого в универсальности.
Второго в точности.
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)