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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.11.2015, 23:20   #1
mishammm
Форумчанин
 
Регистрация: 21.09.2013
Сообщений: 232
По умолчанию Метод Ньютона, зацикливаеться программа

Здравствуйте. У меня стоит задача нахождение минимум функции методом Ньютона с дроблением шага:
Вот моя программа:
Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace lr6
{
    class Program
    {

        public static double f(double x1, double x2)
        {
            return Math.Sqrt(Math.Pow(x1, 2) + Math.Pow(x2, 2) + 1) + 0.5 * x1 - 0.5 * x2;
        }

        public static double dx1(double x1, double x2)
        {
            return x1 / (Math.Sqrt(Math.Pow(x1, 2) + Math.Pow(x2, 2))+0.5);
            
        }

        public static double dx2(double x1, double x2)
        {
            return x2 / (Math.Sqrt(Math.Pow(x1, 2) + Math.Pow(x2, 2)) - 0.5);
            
        }

        public static double dx1x1(double x1, double x2)
        {
            return (-1 * (x1 * x1) / Math.Pow((x1 * x1 + x2 * x2 + 1), 3 / 2)) + 1 / (Math.Pow((x1 * x1 + x2 * x2 + 1), 1 / 2));
           
        }

        public static double dx1x2(double x1, double x2)
        {
            return -((x1) * x2) / (Math.Pow((x1 * x1 + x2 * x2 + 1), 3 / 2)); 
            
        }

        public static double dx2x2(double x1, double x2)
        {
            return (-1 * (x2 * x2) / Math.Pow((x1 * x1 + x2 * x2 + 1), 3 / 2)) + 1 / (Math.Pow((x1 * x1 + x2 * x2 + 1), 1 / 2));
        }

        static void Main(string[] args)
        {

            double x1 = 1, x2 = 1;
            double p1 = 0, p2 = 0;
            double alpha = 0.5, eps = 0.25, beta = 0.5, delta = 0.001;
            int k = 0;

            double a11, a12, a21, a22;
            double gr1, gr2;

            while (Math.Abs(dx1(x1, x2)) > delta && Math.Abs(dx2(x1, x2)) > delta)
            {
                a11 = dx1x1(x1, x2); a12 = dx1x2(x1, x2); a21 = dx1x2(x1, x2); a22 = dx2x2(x1, x2);
                gr1 = -dx1(x1, x2); gr2 = -dx2(x1, x2);
                p1 = (a22 * gr1 - a12 * gr2) / (a11 * a22 - a12 * a21);
                p2 = (a11 * gr2 - a21 * gr1) / (a11 * a22 - a12 * a21);

                if (f(x1 + alpha * p1, x2 + alpha * p2) - f(x1, x2) <= eps * alpha * (p1 * dx1(x1, x2) + p2 * dx2(x1, x2)))
                {
                    k++;
                }
                else
                {
                    alpha *= beta;
                    continue;
                }
                x1 += alpha * p1;
                x2 += alpha * p2;
            }
            Console.WriteLine("x1=" + x1);
            Console.WriteLine("x2=" + x2);
            Console.WriteLine("f=" + f(x1, x2));
            Console.WriteLine("k=" + k);
            Console.ReadKey();
        }
    }
}
Проблема в том что программа ничего в консоль не выводит , помогите плиз найти ошибку. Спасибо
mishammm вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
метод итераций и метод Ньютона Gordan007 Microsoft Office Excel 3 09.06.2013 18:29
Метод простой итерации. Метод Ньютона. woltoe Общие вопросы C/C++ 2 05.06.2013 13:47
Метод касательных(Метод Ньютона) Fat_Tony Помощь студентам 0 22.01.2013 22:30
Методы оптимизации: метод Ньютона и метод наискорейшего спуска ruslanGacurap Помощь студентам 0 30.01.2012 13:54
Метод Ньютона lordsyrius Помощь студентам 5 23.11.2009 23:52