LINUX.ORG.RU

Математика, автоматизация рутины

 , , ,


0

2

Я иногда попиливаю свой helper-for-use-only-by-me пакет и вот недавно захотелось добавить простую функциональность из аналитической геометрии(раньше я думал что это просто школьная геометрия, но тут мне открыли глаза:)). Нет, я и раньше добавлял кое какую простую математику в свои проекты, но то было довольно примитивные задачи. Я искал руками решение уравнения и забивал это решение в код, где с одной стороны было неизвестное, а с другой полностью вычислимое, на момент вызова.

Так вот, на данный момент мне надо решить систему 3х уравнений с 2 неизвестными. Итого получается для нахождения 1 неизвестного относительно другого нужно составить 9 уравнений. Это много, ведь так? Вопрос к практикующим в программировании математику, как вы решаете такие задачи? Вот система, в которой l и m - искомые переменные:

[ x0+l*p = x1+m*p1
[ y0+l*q = y1+m*q1
[ z0+l*r = z1+m*r1
Вот табличка, из которой видно сколько возможных путей решения мы имеем:
+-----+-----------------+------------------+-----------------+---------------+
|     |        m        |        p         |        q        |     r         |
+-----+-----------------+------------------+-----------------+---------------+
| l   |                 |  (x1+m*p1-x0)/p  | (y1+m*q1-y0)/q  |(z1+m*r1-z0)/r |
+-----+-----------------+------------------+-----------------+---------------+
| p1  | (x0+l*p-x1)/p1  |                  |                 |               |
+-----+-----------------+------------------+-----------------+---------------+
| q1  | (y0+l*q-y1)/q1  |                  |                 |               |
+-----+-----------------+------------------+-----------------+---------------+
| r1  | (z0+l*r-z1)/z1  |                  |                 |               |
+-----+-----------------+------------------+-----------------+---------------+

Пока в голову приходит сделать реактивную систему для решения таких систем уравнений, но останавливает 1 - заметная тормознутость по сравнению с решением в лоб, 2 - сложность создания выше чем решение основной задачи

★★★

Последнее исправление: pseudo-cat (всего исправлений: 1)

Что ты понимаешь под «решить» в данном случае? Система из 3 уравнений с 2 неизвестными несовместна, если только у тебя какие-то уравнения не линейно зависимы. А если зависимы, одно из них ты можешь спокойно выкинуть

Gvidon ★★★★
()
Последнее исправление: Gvidon (всего исправлений: 1)
Ответ на: комментарий от Gvidon

Может ещё быть случай, что все три линейно зависимы, тогда однозначного решения такой системы не существует

Gvidon ★★★★
()

А какие в аналитической геометрии функционалы? O_o

Ты лучше линейную алгебру почитай, ога

shamaz
()

математика
функционал

господи, что я читаю?

x4DA ★★★★★
()
Ответ на: комментарий от ziemin

пока не знаю, но уже разбираюсь с тем что там написано

pseudo-cat ★★★
() автор топика
Ответ на: комментарий от shamaz

Товарищ просто не знает разницу между словами «функционал» и «функциональность», бывает.

x4DA ★★★★★
()

раньше я думал что это просто школьная геометрия, но тут мне открыли глаза:))

Закрой глаза обратно, найди учебник Кострикина «Введение в алгебру. Часть 1. Основы алгебры» и начни сначала.

alpha ★★★★★
()

решить систему 3х уравнений с 2 неизвестными

жезть какая...

ps. а вот ненадо было в школе прогуливать :-) матрицы там конечно необъясняли, но сколько должно быть свободных переменных для решения говорили точно

MKuznetsov ★★★★★
()

Такое руками решаю. А когда переменных штук 100, тогда уже какой-нибудь GSL применяю.

Anon
()
Ответ на: комментарий от Gvidon

а если система описывает точки пересечения 2х прямых, то можно ведь считать, что уравнения линейно зависимы? Тогда система несовместна, если нет точек пересечения и совместна(1 или более решений), когда прямые имеют хотя бы 1 точку пересечения. Ну так как её красиво решают?

pseudo-cat ★★★
() автор топика
Ответ на: комментарий от pseudo-cat

Серьезно, начни с чтения книжки и с понятия линейной зависимости. Сейчас ты вообще не понимаешь о чём говоришь.

http://ru.wikipedia.org/wiki/Теорема_Кронекера_—_Капелли

http://ru.wikipedia.org/wiki/Решение_систем_линейных_алгебраических_уравнений

В том учебнике как раз с этого начинается.

alpha ★★★★★
()
Ответ на: комментарий от alpha

ок, почитаю. Просто так-то элементарная задача, казалось бы, если решать руками, но раз все так настаивают, что необходимо сначала книжку прочитать, то наверное так оно и есть...

pseudo-cat ★★★
() автор топика
Ответ на: комментарий от pseudo-cat

И решил бы!

Если их два у тебя, это раз плюнуть. По-моему такие системы классе в 6 проходят.

a1*x + b1*y = c1
a2*x + b2*y = c2

x = (c1 - b1*y)/a1
a2*(c1-b1*y)/a1 = c2   <---- находишь y и ставишь в первое ур-е. Находишь x
shamaz
()
Ответ на: комментарий от aedeph_

что там решать-то, это муторно просто, вот частное решение,

#|
g1 = p1 + l*v1
g2 = p2 + m*v2

[ x0+l*p = x1+m*p1
[ y0+l*q = y1+m*q1
[ z0+l*r = z1+m*r1

p1 + l*v1 = p2 + m*v2
p1 = (x0,y0,z0)
p2 = (x1,y1,z1)
v1 = (p, q, r)
v2 = (p1, q1, r1)
(x0+l*p, y0+l*q, z0+l*r) = (x1+m*p1, y1+m*q1, z1+m*r1)

l = (x1+m*p1-x0)/p
m = (y0+l*q-y1)/q1
l = (x1+(y0+l*q-y1)*p1/q1 - x0)/p
l*p*q1 + x0*q1 = x1*q1 + y0*p1 + l*q*p1 - y1*p1
l*p*q1 - l*q*p1 = x1*q1 + y0*p1 - y1*p1 - x0*q1
l = (x1*q1 + y0*p1 - y1*p1 - x0*q1) / (p*q1 - q*p1)

pseudo-cat ★★★
() автор топика

И вашпе, я не понял: откуда такие вопросы? Ты что: еще в школе не доучился? Или сразу после восьми классов свалил и перебивался шабашками?

Anon
()
Ответ на: комментарий от pseudo-cat

Самое лобовое решение СЛУ. Если понимать, что в нём происходит, то таких вопросов как в стартовом посте бы не появилось.

aedeph_ ★★
()
Ответ на: комментарий от shamaz

посмотри пожалуйста еще раз на приведенную мной систему.

я не говорю, что не могу решить её руками, я лишь спросил совета как такое принято решать, чтобы не решать руками, ведь это муторное дело вроде как

pseudo-cat ★★★
() автор топика
Ответ на: комментарий от pseudo-cat

Задачу по решению системы из трёх уравнений с двумя неизвестными действительно можно решить не прикладывая никакой теории. Но ты-то как раз не решение конкретной задачи ищешь, а про смысл спрашиваешь, про «правильный подход» и «как это делается».

А правильный подход — он основывается на понимании.

alpha ★★★★★
()
Ответ на: комментарий от pseudo-cat

Исходная система в таком виде мало смысла имеет. Почему для двух переменных три уравнения? Что за задачу ты вообще решаешь?

Artificial_Thought ★★★★
()
Ответ на: комментарий от aedeph_

в смысле не решение? не общее решение? почему это не решения, если при определенных параметрах оно позволит найти l и m?

pseudo-cat ★★★
() автор топика
Ответ на: комментарий от pseudo-cat

Приводи к диагональному виду матрицу коэффициентов. Если есть линейные зависимости — они обнулятся. В итоге получишь либо однозначное решение, либо бесконечное множество решений, либо отсутствие точного решения (если строк будет таки больше, чем переменных) — тогда надо будет уже не Гауссом, а наименьшими квадратами. Но вид результата ты сразу же поймешь, когда посчитаешь определитель.

Anon
()
Ответ на: комментарий от pseudo-cat

Потому что при определённых параметрах оно не позволит найти l и m, а при определённых позволит найти неверные.

aedeph_ ★★
()
Ответ на: комментарий от pseudo-cat

ведь это муторное дело вроде как

Подставить одно в другое муторно? Ничего себе. Выкинул лишнее, если такое есть и всё!

Стоп, а давай ты лучше скажешь, зачем ты их решаешь. Ты же что-то про ангем сказал сначала, не так ли?

shamaz
()
Ответ на: комментарий от Artificial_Thought

аналитической геометрии(раньше я думал что это просто школьная геометрия, но тут мне открыли глаза:)).

очевидно что да, откуда у меня по-твоему уравнения взялись)

pseudo-cat ★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.