|
|||||||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Блок-схемы алгоритмов
Лабораторная работа №1. Безусловная одномерная оптимизация. Вариант 9.
Выполнил: студент гр. АСОИ-339 Буйлов А.А. Проверил: Хасанов А.Ю.
Уфа 2011 1. Цель работы Цель работы: знакомство с оптимизационными задачами, изучение различных методов одномерной оптимизации и сравнение эффективности их применения для конкретных целевых функций. Постановка задачи Решить задачу оптимизации следующими методами одномерной безусловной оптимизации: - алгоритм блочного равномерного поиска; - метод парабол
График функции. Диапазон: x [-10,1], y [-2,10]
График функции. Диапазон: x [-2,2], y [0,1000000]
Блок-схемы алгоритмов. 2.1. Меню
2.2. Метод параболы 2.3. Блочный метод равномерного поиска;
3. Листинг программы. #include <iostream.h> #include <fstream.h> #include <string.h> #include <conio.h> #include <stdlib.h> #include <iomanip.h> #include <windows.h> #include <math.h> const int Color = system("color 70"); class metod {private: ; public: void Block (); void Parabol (); double f(double x); }; void Block (); void Parabol (); double f(double x);
int main() //Меню. Выбор метода { int i,f,j,y(0); char h[200]; SetConsoleCP(1251); SetConsoleOutputCP(1251); while (1) { ri:system("cls"); cout<<setw(65)<<"Лабараторная работа №1. АСОИ-339. Буйлов Алексей\n"; cout<<"1. Блочный метод.\n"; cout<<"2. Метод парабол.\n"; cout<<"3. Выход.\n"; cout<<"\nВаш выбор: "; cin >>h; f=strlen(h); for (i=0;i<f;i++) if ((h[i]<'0')||(h[i]>'9'))y=1; if (y==0) j=atoi(h); else {cout<<"Введите целое число. \n"; getch(); y=0; goto ri;} switch (j) { case 1: Block (); break; case 2: Parabol (); break; case 3: exit(0); default: for(i=0;i<80;i++) cout<<"-"; cout <<"Нет такого пункта. Повторите. \n"; getch(); break; } } }
double f(double x) //Заданная функция {double f; f=fabs(x)+exp(10*x); return f; }
void Parabol() //Метод парабол { double ya,yb,yc,yt,y,x,a,b,c,e,s,t; int i,N(0); cout<<"\nВведите a: ";cin>>a; cout<<"Введите b: ";cin>>b; cout<<"Введите c: ";cin>>c; cout<<"Введите e: ";cin>>e; ya=f(a); yb=f(b); yc=f(c); do { s = c + (pow((b-c),2)*(ya-yc) - pow((c-a),2)*(yb-yc))/(2*((b-c)*(ya-yc) + (c-a)*(yb-yc))); if (s!=c) t=s; else t=(a+c)*0.5; yt=f(t); N=N+1; if (t<c) { { if (yt>yc) {a=t;ya=yt;} else {b=c; yb=yc; c=t; yc=yt;} } continue; } if (t>c) { if (yt<yc) {a=c; ya=yc; c=t; yc=yt;} else {b=t;yb=yt;} } } while ((b-a)>=2*e); x=(a+b)*0.5; y=fabs(x)+ exp (10*x); cout<<"\nN="<<N; cout<<"\nx="<<x; cout<<"\ny="<<y; getch();
}
void Block () //Блочный метод { double a,b,c,e,x[1000],y[1000],xx,yy,u; int j,i,l,N(0),n,k; cout<<"\nВведите a: ";cin>>a; cout<<"Введите b: ";cin>>b; cout<<"Введите c: ";cin>>c; cout<<"Введите e: ";cin>>e; cout<<"Введите размер блока n: ";cin>>n; if (n%2==0) { k=n/2; u=e*0.1; while (b-a>2*e) { for(j=1;j<=k;j++) { x[2*j]=a+j*(b-a)/(n+1); x[2*j-1]=x[2*j]-u; } N=N+1; for(i=1;i<=n;i++) { y[i]=f(x[i]); if (i==1) l=i; else if (y[l]>y[i]) l=i; } x[0]=a; x[n+1]=b; a=x[l-1]; b=x[l+1]; } xx=(x[l-1]+x[l+1])/2; yy=f(xx); } else if (n%2==1) { k=(n+1)/2; x[k]=(a+b)/2; y[k]=f(x[k]); while (b-a>2*e) { N=N+1; for(i=1;i<=n;i++) { if (i==k) continue; x[i]=a+i*(b-a)/(n+1); y[i]=f(x[i]); if (i==1) l=i; else if (y[l]>y[i]) l=i; } a=x[l-1]; b=x[l+1]; x[k]=x[l]; y[k]=y[l]; } xx=x[k]; yy=y[k]; } else if ((n<=0)&&((n%10)!=0)) cout<<"Введите натуральное число число"; cout<<"\nN="<<N; cout<<"\nx="<<xx; cout<<"\ny="<<yy; getch(); }
Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.012 сек.) |