Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.03.2012, 18:12   #1
unijkoder
Пользователь
 
Регистрация: 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;
}

}

}

Помогите довести до ума? Описание метода в следующем посте.
unijkoder вне форума Ответить с цитированием
Старый 06.03.2012, 18:13   #2
unijkoder
Пользователь
 
Регистрация: 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. Проверка на окончание поиска:

Следовательно поиск закончен.
unijkoder вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Методы оптимизации: метод Ньютона и метод наискорейшего спуска 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