|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
06.03.2012, 18:12 | #1 |
Пользователь
Регистрация: 21.01.2012
Сообщений: 37
|
Не работает метод оптимизации
Вот программа, она работает не правильно (цикл походу не работает):
sing System; using System.Collections.Generic; using System.Linq; using System.Text; namespace kvadrat { class Program { static void Main(string[] args) { Console.WriteLine("y=x^3+8*x^2+x+5 "); Console.WriteLine("Введите х1 = :"); double x1 = Convert.ToDouble(Console.ReadLine() ); Console.WriteLine("Введите dx = "); double dx = Convert.ToDouble(Console.ReadLine() ); Console.WriteLine("Точность:"); double eps = Convert.ToDouble(Console.ReadLine() ); Console.WriteLine("----------------------"); int count = 0; double x2,xmin,xopt,x3,a1,a2,eps1; x2 = x1 + dx; xmin = x1; xopt = x2; eps1 = (xmin - xopt) / xmin; Console.WriteLine("x1= "+x1); Console.WriteLine("x2 = "+x2); Console.WriteLine("Y(x1)= "+ Y(x1)); Console.WriteLine("Y(x2)="+Y(x2) + "\n--------------------"); while (eps1 <= eps) { if (Y(x1) > Y(x2)) { x3 = x1+2*dx; } else { x3 = x1-dx; } a1 = (Y(x2) - Y(x1)) / (x2 - x1); a2 = 1/(x3-x2)*(((Y(x3)-Y(x1))/(x3-x1))-((Y(x2)-Y(x1))/(x2-x1))); xopt = (x2 + x1) / (2 - (a1 / 2 * a2)); if (x1 < x2 && x1 < x3) { xmin=x1;} if (x2 < x1 && x2< x3) { xmin=x2;} if (x3 < x1 && x3 < x1) { xmin = x3; } if (xmin < xopt) {x1=xmin; x2=xopt; } eps1 = (xmin- xopt) / xmin; Console.WriteLine("a1 = "+a1); Console.WriteLine("a2 = "+a2); Console.WriteLine("xopt = " + xopt); Console.WriteLine("xmin = " + xmin); } Console.WriteLine("Решение:" + xopt); Console.WriteLine("Количество итераций:" + count); Console.ReadLine(); } static double Y(double x) { double y = Math.Pow(x, 3) + 8*Math.Pow(x, 2)+ x + 5; return y; } } } Помогите довести до ума? Описание метода в следующем посте. |
06.03.2012, 18:13 | #2 |
Пользователь
Регистрация: 21.01.2012
Сообщений: 37
|
Метод последовательного оценивания с использованием квадратичной аппроксимации
АЛГОРИТМ И ПРИМЕР . Схему алгоритма можно описать следующим образом. Пусть x1 – начальная точка, - выбранная величина шага по оси x. Шаг 1. Вычислить x2=x1+ . Шаг 2. Вычислить f(x1) и f(x2). Шаг 3. Если f(x1)> f(x2), положить x3=x1+2 . Если f(x1) f(x2), положить x3=x1- . Шаг 4. Вычислить f(x3) и найти Fмин = min , Xмин = точка xi, которая соответствует Fмин, Шаг 5. По трем точкам x1, x2, x3 вычислить , используя формулу для оценивания с помощью аппроксимации. Шаг 6. Проверка на окончание поиска. Является ли разность Fмин - f( ) достаточно малой? Является ли разность Xмин - достаточно малой? Если оба условия выполняются, закончить поиск. В противном случае перейти к шагу 7. Шаг 7. Выбрать «наилучшую» точку (Xмин или ) и две точки по обе стороны от нее. Обозначить эти точки в естественном порядке и перейти к шагу 4. Пример 3. Минимизировать f(x) = 2x2+16/x. Пусть начальная точка x1=1 и длина шага =1. Для проверки на окончание поиска используются следующие параметры сходимости: , Итерация 1 Шаг 1. x2=x1+ =2. Шаг 2. f(x1)=18 и f(x2)=16. Шаг 3. f(x1)> f(x2), следовательно, положить x3=1+2=3. Шаг 4. f(x3)=23,33, Fмин=16, Xмин=x2. Шаг 5. Шаг 6. Проверка на окончание поиска: следовательно, продолжаем поиск. Шаг 7. Выбираем как «наилучшую» точку, а x1=1 и x2=2 – как точки, которые ее окружают. Обозначаем эти точки в естественном порядке и переходим к итерации 2, которая начинается с шага 4. Итерация 2 Шаг 4. x1=1, f1=18, x2=1,714, f2=15,210=Fмин, Xмин=x2, x3=2, f3=16. Шаг 5. Шаг 6. Проверка на окончание поиска: Шаг 7. Выбираем как «наилучшую» точку, а x1=1 и x2=1,714 – как точки, которые ее окружают. Итерация 3 Шаг 4. x1=1, f1=18, x2=1,65, f2=15,142=Fмин, Xмин=x2, x3=1,714, f3=15,210. Шаг 5. Шаг 6. Проверка на окончание поиска: Следовательно поиск закончен. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Методы оптимизации: метод Ньютона и метод наискорейшего спуска | ruslanGacurap | Помощь студентам | 0 | 30.01.2012 13:54 |
Не работает метод __call() | romantik2011 | PHP | 2 | 03.08.2011 23:55 |
Не работает метод SORT | leonard | Microsoft Office Excel | 0 | 17.05.2011 13:18 |
Не работает метод GET | Golovastik | PHP | 6 | 08.07.2010 22:40 |
Симплекс метод оптимизации | LorenZo | Помощь студентам | 0 | 22.06.2010 19:44 |