Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.85
dfg
0 / 0 / 0
Регистрация: 29.07.2014
Сообщений: 22
#1

Решение СНАУ методом Ньютона - C++

29.07.2014, 18:19. Просмотров 2006. Ответов 25
Метки нет (Все метки)

Нужно написать программу для решения систем нелинейных алгебраических уравнений методом Ньютона. Наибольшая сложность заключается в том что на время запуска программы не ясно сколько будет этих уравнений и сколько будет неизвестных. Сам метод Ньютона я понимаю, а вот как это всё реализовать слабо представляю, так как с программированием знаком поскольку-постольку, а программа нужна для научной работы совсем по другой специальности)) Можете подсказать хоть общий план действий, с чего начать... и если есть что-то подобное, поделиться хоть какими-то исходниками) Заранее спасибо)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.07.2014, 18:19
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Решение СНАУ методом Ньютона (C++):

Решение СНАУ методом Ньютона - C++
РЕбят, такое дело, есть у меня задание, решение СНАУ методом Ньютона. Даже не знаю с чего начать, может поможете хотяб пример...

Метод Ньютона в решении СНАУ - C++
РЕбят, помогите с прогой. Нужна прога которая решает СНАУ методом Ньютона. Без нее не защищусь. Заранее спасибо.

Решение уравнения c методом касательных (Ньютона) - C++
На интервале с точностью Е(Е > 0) определить значение одного корня уравнения: tg(7x) + (x^2)^sin(x) + 1 Определить максимальное...

Решение квадратного уравнения методом Ньютона - C++
напишите прогу метод ньютона на С

Написать решение СНУ Методом Ньютона - C++
Собственно необходимо на c++ либо c# написать и подробно описать каждую строчку кода в комментах задачи: "Решение СНУ методом Ньютона,...

Решение уравнения методом Ньютона. Локализация корня - C++
Собственно, программа имеется, все довольно таки просто, но необходимо локализовать корень и найти именно положительный корень уравнения. Я...

25
CyberSolver
101 / 74 / 17
Регистрация: 23.07.2014
Сообщений: 731
Записей в блоге: 1
30.07.2014, 17:53 #16
Цитата Сообщение от dfg Посмотреть сообщение
Ну вообще схема такая: дифференциальные уравнения -> численные методы -> СНАУ. Но мне сказали начать с конца, так как с первыми двумя этапами пока не всё ясно.
Идиотский, но необходимый вопрос: почему Си++?
0
dfg
0 / 0 / 0
Регистрация: 29.07.2014
Сообщений: 22
30.07.2014, 19:38  [ТС] #17
А чтобы предложили Вы?
0
CyberSolver
101 / 74 / 17
Регистрация: 23.07.2014
Сообщений: 731
Записей в блоге: 1
30.07.2014, 20:24 #18
dfg, я не знаю специфику вашей области. Навскидку могу предложить Matlab или Mathematica (в принципе, любой подобный инструмент) - графики рисуют, уравнения решают, лепота. Если охота самому строчить код (а не должно), то уж лучше Питон - по краней мере, будет быстрее, и есть куча либ опять же для рисования, решения уравнений численно и символьно и т.п. Зачем изобретать свои велосипеды?
0
dfg
0 / 0 / 0
Регистрация: 29.07.2014
Сообщений: 22
30.07.2014, 21:59  [ТС] #19
моя область - это строительная механика, матлаб всё-таки не совсем то, хотелось бы сделать отдельную программу
0
CyberSolver
101 / 74 / 17
Регистрация: 23.07.2014
Сообщений: 731
Записей в блоге: 1
31.07.2014, 05:39 #20
dfg, зачем? Вы так для каждой задачи будете отдельную программу делать? Кэп подсказывает: компьютер нам нужен для решения конкретных задач. Конкретно эта задача великолепно решается матлабом: формочки для ввода данных рисуются в 2 щелчка, потом расчёт опять же в 3 строки кода и рисование ещё в одну. А вы хотите какие-то парсеры писать.

Если же сами уравнения будет готовить какая-то другая программа, то вот да простят меня любители чистоты кода, но вы можете просто заинклудить файл с исходными уравнениями. То есть первая программа сформирует вам файл input, в котором напишет что-то типа
C++
1
2
3
4
5
6
void func(double * x, double** res, int n, int m)
{
f[0] = sin(x[0]);
// ...
f[m - 1] = pow(x[n - 1], 5);
}
(n - число переменных, m - число уравнений; можно даже формочку нарисовать для ввода, где пользователь тыкнет нужное ему число и тех и других), и потом #include "input" в ваш исходник. Грязный хак, но не надо никаких парсеров, а компилятор пусть сам проверяет корректность выражений и проч. Кстати, вы с GAMS не знакомы?

Но всё же, поверьте: освоить матлаб (или любую подобную софтину) многократно проще и полезней. А разве ваши маткады и автокады так не умеют?
0
dfg
0 / 0 / 0
Регистрация: 29.07.2014
Сообщений: 22
31.07.2014, 09:21  [ТС] #21
В принципе может и есть истина в Ваших словах) Просто я почему-то привык делать всё по сложному)
0
CyberSolver
101 / 74 / 17
Регистрация: 23.07.2014
Сообщений: 731
Записей в блоге: 1
01.08.2014, 08:26 #22
dfg, если будет время и желание (у нас обоих), можете написать мне на почту. Возможно, вместе найдём решение.
0
dfg
0 / 0 / 0
Регистрация: 29.07.2014
Сообщений: 22
07.08.2014, 17:50  [ТС] #23
И вновь у меня появилось время и желание) вот что сделал на данном этапе:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include <iostream>
#include <cstring>
#include <cctype>
#include <conio.h>
 
using std::cout;
using std::cin;
using std::endl;
 
using namespace std;
 
struct member  //структура членов 
{
    char *name; //имя 
    double k; //коэффицент
    int st;//степень
};
 
void Input(member *s) // функция заполнения структуры
    {
        cout << "Введите имя переменной:";
        s -> name = new char;
        cin.get();
        cin.getline(s->name,2);
        cout << "Введите коэффициент:";
        cin >> s-> k;
        cout << "Введите степень:";
        cin >> s-> st;
        cout << endl;
    }
 
int main()
{
    setlocale(LC_ALL , "Russian");
    
    int N, M;
    cout << "Введите количество неизвестных:" << endl;
    cin >> N;
    cout << "Введите количество уравнений:" << endl;
    cin >> M;
 
    member **p = new member*[N];
    for(int i(0); i < N; i++)
        p[i] = new member[M];
    
    for(int i(0); i < N; i++)
    {
        for(int j(0); j < M; j++)
        {
            Input(&p[i][j]);
        }
        cout << endl;
    }
 
    for(int i(0); i < N; i++)
        delete [] p[i];
    delete [] p;
    _getch();
    return 0;
}
как теперь из этого всего вытащить, так сказать, сами полиномы?)
0
CyberSolver
101 / 74 / 17
Регистрация: 23.07.2014
Сообщений: 731
Записей в блоге: 1
07.08.2014, 17:56 #24
dfg, таким путём идти можно, но, наверное, не нужно. Лучше написать класс для представления полинома, если вам всё же нужен ввод. Тогда уже можно будет и переписать алгоритм Ньютона.
0
dfg
0 / 0 / 0
Регистрация: 29.07.2014
Сообщений: 22
07.08.2014, 18:03  [ТС] #25
Ого-го, как много ушло усилий чтоб написать, то что я написал, а сейчас снова браться за что-то другое?) признаться с классами я не знаком( может можно всё таки на этом остановиться?)
0
CyberSolver
101 / 74 / 17
Регистрация: 23.07.2014
Сообщений: 731
Записей в блоге: 1
07.08.2014, 19:00 #26
dfg, так вы только скажите, а мы напишем. Вы спрашиваете, мы пытаемся направить в силу разумения.
0
07.08.2014, 19:00
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.08.2014, 19:00
Привет! Вот еще темы с ответами:

Решение системы нелинейных уравнений методом Ньютона (С/С++) - C++
Здравствуйте! Помогите пожалуйста написать программу :cry: У меня есть система из 2х уравнений (x+lnx)(y+lny)=1 ...

Решение систем уравнений методом линеаризации(Ньютона) - C++
помогите пожалуйста написать код программы

Решение системы из двух нелинейных уравнений методом Ньютона - C++
Помогите,мне надо создать программу для решения системы из двух нелинейных уравнений методом Ньютона в с++...не могу найти нигде нормальный...

Вычисление определенного интеграла и решение уравнений методом Ньютона. - C++
С методом дихотомии разобрался,но надо выполнить еще два задания.С заданной точностью найти корень уравнения методом Ньютона (секущих), при...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
26
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru