Решение системы нелинейных уравнений в С/С++

Тема в разделе "WASM.BEGINNERS", создана пользователем Saessie, 10 фев 2009.

  1. Saessie

    Saessie New Member

    Публикаций:
    0
    Регистрация:
    7 мар 2007
    Сообщения:
    29
    Можно ли в С/С++ решить систему нелинейных уравнений? Три уравнения, 3 неизвестных. Можно было бы решить у руками, но это ОЧЕНЬ долго, и не факт, что решение существует. С помощью программы хотелось бы узнать, существует ли оно вообще, и, если да, получить его. Сами уравнения прикреплены. Там xi, yi - известны, а a, b и r неизвестны.
     
  2. Gnil

    Gnil New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2008
    Сообщения:
    41
    Воспользоваться специализированными программами не судьба?
    Mathcad, maple, matlab ...
     
  3. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    Saessie
    Ну, например, решением будет:
    a, b - любые (кроме a = xi, b = yi), r - определяется из 3-го уравнения.
     
  4. Saessie

    Saessie New Member

    Публикаций:
    0
    Регистрация:
    7 мар 2007
    Сообщения:
    29
    Нет, надо именно на С/С++. Или взять готовое аналитическое решение и запихнуть его в эту программу на С/С++. Пакетов, готовых дать именно аналитическое решение, я не знаю. А именно на С надо потому что бОльшая часть программы уже на С написана, осталось только вот это.

    Ага. Только вот r, помимо того, что оно определяется из третьего уравнения, не должно противоречить первым двум с "любыми" a и b.
     
  5. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    Saessie
    Так оно вроде как и не противоречит: подставь при любых a, b значение r^2=(xi-a)^2+(yi-b)^2 в первое и второе уравнение, получишь 0.
     
  6. Saessie

    Saessie New Member

    Публикаций:
    0
    Регистрация:
    7 мар 2007
    Сообщения:
    29
    Ладно, не об этом речь. 3 уравнения, 3 неизвестных. Если каждое из неизвестных входит в каждое из уравнений, то систему можно решить. Так? Так. Поэтому еще раз вопрос: можно ли это сделать в С? Всякие частные решения типа любые а и b не рассматриваем. Нужно одно общее решение. Была бы аналитическая формула - не было бы проблем.
     
  7. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    Saessie
    Не так. Система может быть несовместной, а значит вовсе не иметь решений.
    Ни фига себе частное решение - целое множество!

    Может, что-то с постановкой задачи не то?...
     
  8. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    математику надо было в институте учить...
     
  9. neofit

    neofit Member

    Публикаций:
    0
    Регистрация:
    4 сен 2008
    Сообщения:
    38
    Поверь мне решение проблемы занимает гораздо меньше времени чем написание программы, которая будет её решать. Вот решение заняло 5 минут, набор в Ворде - 15 мин, разрабатывать алгоритм решения и прочее и прочее - дни как минимум (сам любил напряч железо - но в итоге напрягался сам).
     
  10. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Жесткачь, Saessie быстро за линейную алгебру.
     
  11. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    да ну. там де под корнем фсякая фигня = r - это ж куча решений. это ж вроде есле в квадрат эту фегню, то получится уравнение окружности чтоле. ну минус точки которые x=a y=b.
    не пенать, йа давно подобные системы видил, могу ацке ошибацо
     
  12. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    neofit
    Ты не прав ;)
    Уравнение вида (выражение 1)*(выражение 2) = 0 имеет как минимум два независимых решения:
    1) (выражение 1) = 0
    2) (выражение 2) = 0
    Ты рассмотрел только первое равенство, которое как ты верно заметил решением не является, а из второго следует бесконечное множество решений.
     
  13. neofit

    neofit Member

    Публикаций:
    0
    Регистрация:
    4 сен 2008
    Сообщения:
    38
    Y_Mur
    в пункте (3) решения:
    (х-а)(-r+корень) = 0
    (y-b)(-r+корень) = 0
    -r+корень = 0
    т.е. [-r+корень] есть в первых двух уравнениях системы. И третье уравнение - это и есть "2) (выражение 2) = 0".
    В чём косяк? можь я чё не допонял?...
    Или [-r+корень], надо решать независимо от того, что x=a, y=b.
    Но если я не ошибаюсь - то тогда это не система, а совокупность уравнений (система истина при решении всех входящих в неё уравнений)

    p.s. я могу дико заблуждаться
     
  14. neofit

    neofit Member

    Публикаций:
    0
    Регистрация:
    4 сен 2008
    Сообщения:
    38
    не-не
    Y_Mur прав.
    Вся система сводится к уравнению -r+корень=0
    которое после преобразования сводится к уравнению окружности:
    (x-a)2 + (y-b)2 = r2
    [Уравнение окружности имеет вид (x – a)2 + (y – b)2 = R2, где a и b – координаты центра окружности, R(у нас r) - радиус]
    при этом a и b и r никак не ровны нулю.
    Тока как его решать я пока не знаю...
     
  15. neofit

    neofit Member

    Публикаций:
    0
    Регистрация:
    4 сен 2008
    Сообщения:
    38
    (x-a)2+(y-b)2=r2
    [общий вид уравнения окружности:
    AX2 + BX + AY2 + CY + D = 0
    при условии, что B2+C2-4AD > 0]
    приведём наше уравнение к этому виду:
    x2-2ax+a2 + y2-2by+b2 - r2 = 0
    неизвестны a, b и r (x и y известны)
    a2 - 2xa + b2 - 2yb + (x2 + y2 - r2) = 0
    A = 1
    B = 2x
    C = 2y
    D = x2 + y2 - r2

    условие выполняется:
    4x2 + 4y2 - 4x2 - 4y2 + 4r2 > 0, (т.к. r не =0)

    тогда центр (a,b) будет :

    a=-B/(2A) = -B = -x
    b=-C/(2A) = -C = -y

    ну и радиус:
    r2 = (B2 + C2 - 4AD)/(4A2) = (4x2 + 4y2 - 4(x2+y2-r2))/4 =
    = x2 + y2 - x2 - y2 + r2 = r2
    - r, чёт не получается найтить - буду проббовать ещё...
    -------------------------------------------------------------
    хотя если подставить в самое верхнее уравнение, то получим
    (x-(-x))2+(y-(-y))2=r2
    4x2+4y2=r2
    r = корень(4x2 + 4y2)
    Извините за неудобочитаемость, можно ли это назвать решением не знаю, я сам уже запутался в конец.