powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Метод множителей Лагранжа
17 сообщений из 17, страница 1 из 1
Метод множителей Лагранжа
    #35913360
tesla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хеееееелп. Работаю над курсовиком по методу множителей Лагранжа. У кого-нить есть исходник (желательно) на VB, или на паскале по решению задачи путем множителей Лагранжа?
...
Рейтинг: 0 / 0
Метод множителей Лагранжа
    #35926683
tesla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот и сдесь никто не знает((((((
...
Рейтинг: 0 / 0
Метод множителей Лагранжа
    #35927172
mikhail_n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы б задачу по-подробнее описали, тогда глядишь и результат был бы другой. Лично я осведомлён о множителях Лагранжа в контексте вариационного исчисления. Это Ваш случай? Тогда для начала было бы неплохо сказать экстремум чего Вы ищите и при каких ограничениях. Или Вам вообще нужен солвер для фукционала обшего вида для случая многих независимых переменных плюс некое количество произвольных нелинейных связей? С учётом того что это выливается в необходимость численного решения системы нелинейных диффуров в частных производных... не то чтоб это супер сложно, если мне не изменяет склероз, то уравнения Эйлера-Лагранжа получаются строго эллиптическими так что кондовая центральная разность рулит, но голубчик, кода там придётся написать нехило. Не думаю что б Вам по свистку кто-либо выложит такое... Ищите какой-нибудь опен соурс. Вот если Вам это надо реализовать для какого-нибудь простенького функционала, да ещё часть работы можно сделать аналитически, ну тогда может быть... хотя... всё равно врядли.
...
Рейтинг: 0 / 0
Метод множителей Лагранжа
    #35927370
Фотография Che Go Hotel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Метод множителей Лагранжа
    #35927377
tesla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikhail_nТогда для начала было бы неплохо сказать экстремум чего Вы ищите и при каких ограничениях.
Вот как раз пользователь сам должен вводить и то и другое. Задача такая, программа должна решать любую задачу по нахождению экстремумов с помощью метода множителей лагранжа. Я такого алгоритма даже не представляю, если пользователь сам должен определять не переменные, а сами функции, и даже их количество. Для меня такая прога - это что-то паранормальное.

Che Go Hotelhttp://kursovik.net/programming/180103.html Спс!!!!! Но ведь это Интерполяция полиномом Лагранжа. А меня интересует метод множителей. Я наткнулся на один курсач, но там нет ни кода, ни вообще алгоритма работы программы, а только объясниется принцип работы этих множителей. Вот я уже подумываю, реально ли вообще написать такую прогу.
...
Рейтинг: 0 / 0
Метод множителей Лагранжа
    #35927378
tesla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikhail_nТогда для начала было бы неплохо сказать экстремум чего Вы ищите и при каких ограничениях.
Вот как раз пользователь сам должен вводить и то и другое. Задача такая, программа должна решать любую задачу по нахождению экстремумов с помощью метода множителей лагранжа. Я такого алгоритма даже не представляю, если пользователь сам должен определять не переменные, а сами функции, и даже их количество. Для меня такая прога - это что-то паранормальное.

Che Go Hotelhttp://kursovik.net/programming/180103.html Спс!!!!! Но ведь это Интерполяция полиномом Лагранжа. А меня интересует метод множителей. Я наткнулся на один курсач, но там нет ни кода, ни вообще алгоритма работы программы, а только объясниется принцип работы этих множителей. Вот я уже подумываю, реально ли вообще написать такую прогу.
...
Рейтинг: 0 / 0
Метод множителей Лагранжа
    #35927500
stopa85
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да почему не реально-то, это ведь курсовик!:)

Пишешь прогу - в лайне едите пользователь записывает многочлен какой-то там степени со сколькими-то переменными (ну не надо тебе пока синусов, косинусов и прочего ... ) в виде: 2x^2+x+1=0

Еще списком простые ограничения ну, например,
x>=2
x<=5.

Решаешь систему, как тебе там надо, твоим методом. Производные, частные производные и интегралы взять от многочлена можно. Легко даже запрограммировать.
Потом скажешь, что это базовая часть твоего будущего диплома и все прокатит на отлично;-)
...
Рейтинг: 0 / 0
Метод множителей Лагранжа
    #35928375
tesla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подробней: Ну, вот ввел пользователь многочлен. Он у меня получился типа стринг. Я посимвольно считываю из этой строки и передаю символ в case, где выбирается этот тип символа. Если это какое-то число, то читаю следующий символ, проверяю, не число ли это тоже, проверяю не X ли это, и если икс, то не в степени ли он. Тоже самое со знаками типа +, -, ^. Вырисовывается рекурсия. В 2x^2+x+1=0 программа посимвольно доходит до первого плюса, т.е. выделяет 2х^2 в отдельную переменную, потом "+" в переменную, которая будет решать, действие между двумя переменными (2x^2 и x), затем начинаются переносы простых чисел в одну часть, иксов в другую, и т.д. И это только начало, Лагранж еще не пришел.... Это все при неизвесном количестве членов и вообще уравнений, и ограничений... Еще производные то ладно, а вот систему потом еще решать при опять же неизвестном количестве многочленов...
Фига ни себе базовая часть диплома!!! =D. Страшновато пред дипломом становится. Охото попросить у кого-нить библиотечку с функцией готовой, чтоб сама все это делала. Вечно мя на халяву тянет)))
Я весь алгоритм правильно понял, или есть как попроще?
...
Рейтинг: 0 / 0
Метод множителей Лагранжа
    #35928776
mikhail_n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В конце рабочего дня набросаю Вам коротенько как можно предоставить пользователю интерфейс для определения целевой функции и ограничений без парсера аналитических выражений. Но всё равно, что б такая прога работала, Вам придётся или самому написать или найти готовый модуль для решения систем нелинейных алгебраических уравнений (ну например методом Ньютона). Ибо в конечном итоге задача будет сводиться к этому. Кстати, ничего себе так курсовик. Какой курс, чё за школа?
...
Рейтинг: 0 / 0
Метод множителей Лагранжа
    #35928969
Фотография S.G.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
teslaПодробней: Ну, вот ввел пользователь многочлен. Он у меня получился типа стринг. Я посимвольно считываю из этой строки и передаю символ в.... или есть как попроще?ПОдойдите попроще. Пусть пользователь не вводит стринг, а массив отдельных коэффициентов. a0, а1, а2 и т.н. Это Вас избавит от головной боли парсинга :)
...
Рейтинг: 0 / 0
Метод множителей Лагранжа
    #35929395
mikhail_n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насколько я вижу Вам не до функционалов, ладно, ограничтесь одной произвольной функцией от n независимых переменных и m (m < n) нелинейных связей произвольного вида. Т.е. на языке математики имеем:

f(x,y,z,...) - функция n переменных экстремум которой нужно найти.

u(x,y,z,...) = 0
v(x,y,z,...) = 0 m нелинейных связей-ограничений.
w(x,y,z,...) = 0

Чтобы избежать парсинга аналитических выражений я поступил бы так. Сигнатуру своего метода я бы определил слудующим образом:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
typedef void (*pFunc)(double[], int, int, double[]) func;

void LagrangeMultipliers(func Problem, double root[], int NumVariables, int NumRelations, double eps);

void MyFunc(double Variables[], int NumVariables, int NumRelations, double Residual[])
{
    //double Variables[] - входной массив, содержит независимые переменные (x,y,z,...)
    //int NumVariables - количество независимых переменных n
    //int NumRelations - количество связей-ограничений m
    //double Residual[] - выходной массив размерностью m +  1 , первый элемент содержит значение функции f, остальные элементы - невязки связей-ограничений.

    Residual[ 0 ] = f(Variables[ 0 ],Variables[ 1 ],Variables[ 2 ],...);
    Residual[ 1 ] = u(Variables[ 0 ],Variables[ 1 ],Variables[ 2 ],...);
    Residual[ 2 ] = v(Variables[ 0 ],Variables[ 1 ],Variables[ 2 ],...);
    Residual[ 3 ] = w(Variables[ 0 ],Variables[ 1 ],Variables[ 2 ],...);

    return;
}

Вы пишите функцию LagrangeMultipliers, внутри неё Вы вызываете функцию MyFunc, которую должен будет написать пользователь Вашей функции. В функции MyFunc пользователь должен будет описать аналитический вид целевой функции f и налитические же выражения для связей (u,v,w) по примеру показаному выше. Внутри своего метода Вы будете повторно вызывать MyFunc в цикле до тех пор пока итерационный процесс (метод Ньютона) не сойдётся к корню с заданной точностью eps. Конкретно, Ваша функция LagrangeMultipliers будет по заданному массиву независимых переменных формировать расширенную целевую функцию

F(x,y,z,...,alpha,beta,gamma,...) = f(x,y,z,...) + alpha*u(x,y,z,...) + beta*v(x,y,z,...) + gamma*w(x,y,z,...) + ....

alpha, beta, gamma и есть те самые множители Лагранжа. После этого путём вызова функции MyFunc изнутри функции LagrangeMultipliers Вы будете вычислять сначала невязки

dF/dx = 0
dF/dy = 0
dF/dz = 0
.........
dF/d(alpha) = 0
dF/d(beta) = 0
dF/d(gamma) = 0
..........

Ну а потом и Гессиан (т.е. матрицу вида d2F/dx*dy...). Теперь у Вас есть всё для Ньютона. Ну и в цикле Ньютона меняете значения независимых переменных до сходимости к решению). Для Ньютона ещё потребуется простенький солвер СЛАУ (LU, кондовый Гаусс).

Это самое простое что по-моему можно посоветовать Вам в Вашем положении...(-:
...
Рейтинг: 0 / 0
Метод множителей Лагранжа
    #35929403
tesla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikhail_n, спс огромное, буду стараааться и стараться. Школа - Белгородский Индустриальный Колледж, 3 курс.
Самое смешное, что кому-то попалось решение квадратного уравнения или текстовый редактор))))))).
...
Рейтинг: 0 / 0
Метод множителей Лагранжа
    #35930787
zloy den
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
teslamikhail_n, спс огромное, буду стараааться и стараться. Школа - Белгородский Индустриальный Колледж, 3 курс.
Самое смешное, что кому-то попалось решение квадратного уравнения или текстовый редактор))))))).

Когда я учился в техникуме, то у меня в теме курсовой был степенной метод нахождения собственных значений и собственных векторов матрицы. При том, что у некоторых был метод дихотомии для решения уравнений(это метод половинного деления). У вас я смотрю еще веселее. Скорее всего стоит забить на парсер, и сделать ввод коэффициентов для уравнения числами. Все равно, судя по такой постановке вопроса, никто не оценит ваших стараний по написанию красивого приложения. (Не удивлюсь варианту, при котором не наведете красоты, а человек с решением квадратного уравнения наведет, и вам влепят 4, а ему 5)
...
Рейтинг: 0 / 0
Метод множителей Лагранжа
    #35931697
mikhail_n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторmikhail_n, спс огромное, буду стараааться и стараться. Школа - Белгородский Индустриальный Колледж, 3 курс.
Самое смешное, что кому-то попалось решение квадратного уравнения или текстовый редактор))))))).

Они у Вас там что о%%%%%ли там чтоли? Забудьте что я Вам тут понаписал (тем более что я ошибся - для такого солвера аналитически надо определять не саму целевую функцию и ограничения, а компоненты градиента расширенной функции). Сделайте так - возьмите следующую задачу:

Целевая фукция f(x,y,z) = x^2 + y^2 + z^2 (то бишь семейство концентрических сфер, здесь никаких коэффициентов)
Ограничение - плоскость Ax + By + Cz + D = 0 (вот A,B,C,D позвольте пользователю вводить с экрана).

Требуется найти минимум целевой функции при данном ограничении. Очевидно, что задача имеет простой и прозрачный физический смаысл - минимум будет достигаться в точке касания плоскости и сферы. Таким образом, решение существует и единственно, Адамар доволен.

Значица, по введенным пользователем A,B,C,D внутри своей проги составляете расширенную целевую функцию

F(x,y,z,q) = x^2 + y^2 + z^2 - q*(Ax + By + Cz + D) и определяете компоненты её градиента и приравниваете их нулю:

dF/dx = 2*x - q*A = 0
dF/dy = 2*y - q*B = 0
dF/dz = 2*z - q*C = 0
dF/dq = -A*x -B*y - C*z - D = 0

Получаете 4 ЛИНЕЙНЫХ алгебраических уравнения относительно 4 неизвестных - x,y,z, и q (собственно множитель Лагранжа). Решаете их, находите x,y,z, подставляете в f(x,y,z) и получаете ответ. Всё! Если препод начинает гундеть, объясняете ему во что выливается кодирование этой задачи для функционала общего вида и просите напомнить Вам когда это он успел прочесть Вам все те разделы вычматов которые при этом необходимо знать. Получаете 4 и идёте пить пиво (или водку, ну что Вам ближе).
...
Рейтинг: 0 / 0
Метод множителей Лагранжа
    #35933253
tesla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Во, mikhail_n, благодарю от всей души!!! Подошел седня к преподу, объяснил сложность и получил шаблон. А до этого шаблон ни как не мог допросится!!!! Пользователь теперь вводит только переменные))))))) Уряяяяяяяяяя!!!!!!!!! Спс огромное за помощь!!!!!!
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Метод множителей Лагранжа
    #39639067
Anton_328
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tesla,
можешь сбросить, пожалуйста, свою программу
Буду очень признателен
...
Рейтинг: 0 / 0
Метод множителей Лагранжа
    #39639082
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anton_328, он тут был последний раз полтора года назад, маловероятно что ответит.
В профиле почта указана, попробуй туда написать.
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Метод множителей Лагранжа
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]