0 / 0 / 0
Регистрация: 29.07.2014
Сообщений: 22
|
|
1 | |
Решение СНАУ методом Ньютона29.07.2014, 18:19. Показов 6423. Ответов 25
Метки нет (Все метки)
Нужно написать программу для решения систем нелинейных алгебраических уравнений методом Ньютона. Наибольшая сложность заключается в том что на время запуска программы не ясно сколько будет этих уравнений и сколько будет неизвестных. Сам метод Ньютона я понимаю, а вот как это всё реализовать слабо представляю, так как с программированием знаком поскольку-постольку, а программа нужна для научной работы совсем по другой специальности)) Можете подсказать хоть общий план действий, с чего начать... и если есть что-то подобное, поделиться хоть какими-то исходниками) Заранее спасибо)
0
|
29.07.2014, 18:19 | |
Ответы с готовыми решениями:
25
Решение СНАУ методом Ньютона Метод Ньютона в решении СНАУ Решение уравнения методом Ньютона Решение уравнения методом Ньютона |
10 / 10 / 0
Регистрация: 23.07.2014
Сообщений: 52
|
|
29.07.2014, 18:48 | 2 |
dfg, ТЗ четкое есть?
0
|
0 / 0 / 0
Регистрация: 29.07.2014
Сообщений: 22
|
|
29.07.2014, 19:58 [ТС] | 3 |
В консоли пользователь вводит систему нелинейных уравнений и относительную погрешность, вектор начальных приближений должен состоять из нулей. Ну вот собственно и всё ТЗ)
0
|
0 / 0 / 0
Регистрация: 29.07.2014
Сообщений: 22
|
|
29.07.2014, 20:07 [ТС] | 5 |
Я так понимаю, что уравнения пользователь должен вводить в виде строки, а потом эти строки должны с помощью парсинга ложиться в динамический массив. Далее по конечно-разностному методу находится производные из которых формироваться матрица Якоби - двухмерный динамический массив. Ну и каким-то методом, скажем Крамера, находиться корни уже линейных уравнений.
Добавлено через 2 минуты раздел фриланс - это крайний случай) всё-таки хотелось бы самому приложить руку... А прям целый парсер с помощью бинарного дерева и рекурсивного спуска вполне возможен) Добавлено через 2 минуты а вот синусов и косинусов не надо, максимум что должно быть - это полином второй степени, что даёт преимущество, то есть для линеаризации полиномов достаточно найти производную не прибегая разложению в ряд)
0
|
29.07.2014, 20:09 | 6 |
Не вопрос, только напишите тогда что есть корректная строка. К сожалению, С++ - не Питон, и будет
Можно значительно проще. Понимаете, вся ваша работа сведется к написанию парсера, а не к методу Ньютона. А это бида-пичалька.
0
|
0 / 0 / 0
Регистрация: 29.07.2014
Сообщений: 22
|
|
29.07.2014, 20:22 [ТС] | 7 |
Ну смотрите, наверное меня бы устроил и вариант без парсинга, то есть вводить эти уравнения не в консоли а в самом коде, но чтобы как-то по быстрому что-ли) потому что системы будут считаться большие, типа там 40 уравнений и 40 неизвестных и если каждый раз объявлять переменные, вводить эту кучу уравнений, потом ещё где-то по дороге что менять слишком много времени будет уходить..
0
|
29.07.2014, 20:28 | 8 |
dfg, тогда проще всего сделать так. Опишите требования к самой функции решения СНАУ (что принимает, что возвращает), хотя бы на словах. Мало ли как вам будет удобно. А затем продумайте, как вы в неё передадите саму систему: руками, вводом из консоли или чтения каких-нибудь входных файлов с описанием. Просто потому что сама задача естественно разбивается на две.
0
|
0 / 0 / 0
Регистрация: 29.07.2014
Сообщений: 22
|
|
29.07.2014, 20:41 [ТС] | 9 |
Ну функция должна принимать сами уравнения, или может быть одномерный массив уравнений? ну скажем M[1]=pow(x1,2)+x2*4-x3; M[2]=x1+x2*4-pow(x3,2); M[3]=x1*7+pow(x2,2)-x3*4 - это можно вводить руками каждый раз в код, но тогда получается нужно и объявлять переменные x1, x2, x3 каждый раз. А отдавать функция должна сами корни уравнений) Надо подумать как она будет заполнять массив - матрицу Якоби, так как дифференцировать каждый раз нужно будет по разным переменным
0
|
3224 / 1751 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
|
29.07.2014, 21:12 | 10 |
Ну, тогда ввод элементарен – запрашиваем у пользователя число уравнений, и для каждого уравнения запрашиваем в цикле коэффициент, имя переменной и степень. Вот только 40 уравнений и 40 неизвестных – это около 80 членов в уравнении, т.е. всего надо ввести 40 * 80 = 3200 членов. А откуда они берутся? Может легче их в файл записать, а потом программе считать оттуда?
0
|
0 / 0 / 0
Регистрация: 29.07.2014
Сообщений: 22
|
|
29.07.2014, 21:47 [ТС] | 11 |
Ну вообще схема такая: дифференциальные уравнения -> численные методы -> СНАУ. Но мне сказали начать с конца, так как с первыми двумя этапами пока не всё ясно.
0
|
3224 / 1751 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
|
29.07.2014, 21:58 | 12 |
Ну, тогда предыдущий этап должен заносить результаты в файл или соответствующую структуру данных, а ваш - считывать их оттуда.
0
|
0 / 0 / 0
Регистрация: 29.07.2014
Сообщений: 22
|
||||||
29.07.2014, 22:41 [ТС] | 13 | |||||
Ну вот типа такого?
0
|
3224 / 1751 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
|
29.07.2014, 22:58 | 14 |
Зачем вы имя переменной в степень возводите? Сюда надо ее значение подставлять, но его определение и является вашей задачей.
Количество переменных не нужно запрашивать - сколько пользователь введет различных имен, столько и будет переменных. Введенные данные нужно сложить в вектор уравнений, каждое уравнение - это вектор членов. Каждый член - это структура, членами которой являются имя переменной (а точнее индекс, так как мы имена пронумеруем), коэффициент и степень.
0
|
0 / 0 / 0
Регистрация: 29.07.2014
Сообщений: 22
|
||||||
30.07.2014, 00:13 [ТС] | 15 | |||||
как-то так?
0
|
0 / 0 / 0
Регистрация: 29.07.2014
Сообщений: 22
|
|
30.07.2014, 19:38 [ТС] | 17 |
А чтобы предложили Вы?
0
|
30.07.2014, 20:24 | 18 |
dfg, я не знаю специфику вашей области. Навскидку могу предложить Matlab или Mathematica (в принципе, любой подобный инструмент) - графики рисуют, уравнения решают, лепота. Если охота самому строчить код (а не должно), то уж лучше Питон - по краней мере, будет быстрее, и есть куча либ опять же для рисования, решения уравнений численно и символьно и т.п. Зачем изобретать свои велосипеды?
0
|
0 / 0 / 0
Регистрация: 29.07.2014
Сообщений: 22
|
|
30.07.2014, 21:59 [ТС] | 19 |
моя область - это строительная механика, матлаб всё-таки не совсем то, хотелось бы сделать отдельную программу
0
|
31.07.2014, 05:39 | 20 | |||||
dfg, зачем? Вы так для каждой задачи будете отдельную программу делать? Кэп подсказывает: компьютер нам нужен для решения конкретных задач. Конкретно эта задача великолепно решается матлабом: формочки для ввода данных рисуются в 2 щелчка, потом расчёт опять же в 3 строки кода и рисование ещё в одну. А вы хотите какие-то парсеры писать.
Если же сами уравнения будет готовить какая-то другая программа, то вот да простят меня любители чистоты кода, но вы можете просто заинклудить файл с исходными уравнениями. То есть первая программа сформирует вам файл input, в котором напишет что-то типа
Но всё же, поверьте: освоить матлаб (или любую подобную софтину) многократно проще и полезней. А разве ваши маткады и автокады так не умеют?
0
|
31.07.2014, 05:39 | |
31.07.2014, 05:39 | |
Помогаю со студенческими работами здесь
20
Написать решение СНУ Методом Ньютона Решение уравнения c методом касательных (Ньютона) Решение квадратного уравнения методом Ньютона Решение системы нелинейных уравнений методом Ньютона (С/С++) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |