Форум: "Потрепаться";
Текущий архив: 2003.05.01;
Скачать: [xml.tar.bz2];
ВнизПрограмма для решения систем уравнений Найти похожие ветки
← →
Pat (2003-04-15 14:23) [0]Народ, подскажите программу, с помощью которой можно было бы решить систему уравнений в символьном виде, например:
ax+by=z1
cx+dy=z2
a,b,c,d,z1,z2 - некоторые константы
x,y - переменные
Программа должна получить ответ в виде
x = ...
y = ...
ну если такое вообще возможно :-\
← →
han_malign (2003-04-15 14:30) [1]Ну, вобщем-то, парсинг матрицы уравнения из текста заданного вида, задача довольно тривиальная, во всяком случае проще парсинга произвольного выражения, и решается в лоб.
Хотя проще просто матрицу коэфициентов вводить.
А способов решения системы линейных уравнений - Гаус, Крамер..., короче, сводится к задаче транспонирования матрицы...
← →
Neft (2003-04-15 14:44) [2]полюбому матрицу выделять придется и потом дальше как сказал хан_малигн
← →
Mystic (2003-04-15 14:52) [3]MATLAB, Symbolic toolbox
Solution of Equations
compose - Functional composition.
dsolve - Solution of differential equations.
finverse - Functional inverse.
solve - Solution of algebraic equations.
Например
r = solve("a*x+b*y=z1", "c*x+d*y=z2", "x", "y");
r.x
-(-d*z1+z2*b)/(a*d-b*c)
r.y
(a*z2-z1*c)/(a*d-b*c)
← →
nikkie (2003-04-15 14:54) [4]MAPLE
он даже такую систему сможет решить
ax^2+by^2=z1
cx^3+dy^3=z2
← →
Внук (2003-04-15 15:00) [5]MAPLE
← →
Феу (2003-04-15 15:06) [6]2nikkie
За что ты его так? Нормально решает (у меня :-).
← →
Mystic (2003-04-15 15:14) [7]
> nikkie © (15.04.03 14:54)
Нет проблем:
>> r = solve("a*x^2+b*y^2=z1", "c*x^2+d^2*y=z2", "x", "y");
>> r.x
ans =
[ 1/2/c*(-(-4*z2*b*c+2*a*d^4-2*(-4*z2*b*c*a*d^4+a^2*d^8+4*b*c^2*z1*d^4)^(1/2))/b)^(1/2)]
[ -1/2/c*(-(-4*z2*b*c+2*a*d^4-2*(-4*z2*b*c*a*d^4+a^2*d^8+4*b*c^2*z1*d^4)^(1/2))/b)^(1/2)]
[ 1/2/c*(-(-4*z2*b*c+2*a*d^4+2*(-4*z2*b*c*a*d^4+a^2*d^8+4*b*c^2*z1*d^4)^(1/2))/b)^(1/2)]
[ -1/2/c*(-(-4*z2*b*c+2*a*d^4+2*(-4*z2*b*c*a*d^4+a^2*d^8+4*b*c^2*z1*d^4)^(1/2))/b)^(1/2)]
>> r.y
ans =
[ -(-1/4/c*(-4*z2*b*c+2*a*d^4-2*(-4*z2*b*c*a*d^4+a^2*d^8+4*b*c^2*z1*d^4)^(1/2))/b-z2)/d^2]
[ -(-1/4/c*(-4*z2*b*c+2*a*d^4-2*(-4*z2*b*c*a*d^4+a^2*d^8+4*b*c^2*z1*d^4)^(1/2))/b-z2)/d^2]
[ -(-1/4/c*(-4*z2*b*c+2*a*d^4+2*(-4*z2*b*c*a*d^4+a^2*d^8+4*b*c^2*z1*d^4)^(1/2))/b-z2)/d^2]
[ -(-1/4/c*(-4*z2*b*c+2*a*d^4+2*(-4*z2*b*c*a*d^4+a^2*d^8+4*b*c^2*z1*d^4)^(1/2))/b-z2)/d^2]
← →
AlexKniga (2003-04-15 15:31) [8]MathCAD
← →
NetBreaker666 (2003-04-15 15:36) [9]Удалено модератором
Примечание: А по-другому свои мысли выражать не получается?
← →
nikkie (2003-04-15 15:56) [10]>Феу
не понял. кого его? кто у тебя нормально решает. MATLAB? да я его в глаза не видел... а кленовый листок я и не обижал... я наоборот за... :)
>Mystic
copy/paste проблема у тебя. у меня второе уравнение третьей степени было.
← →
Manulo (2003-04-15 16:05) [11]Удалено модератором
← →
Mystic (2003-04-15 16:09) [12]copy/paste проблема у тебя. у меня второе уравнение третьей степени было.
Ну тогда получаем уравнение шестой степени, решение которого не представимо в виде элементарных функций. Те ответы, которые выводит Maple, имхо сложнее считать, чем численно решить систему :)
Пакет прикладных программ, дающих системе MATLAB принципиально новые возможности — возможности решения задач в символьном (аналитическом) виде, включая реализацию точной арифметики произвольной разрядности. Пакет базируется на применении ядра символьной математики одной из самых мощных систем компьютерной алгебры — Maple V R4. Обеспечивает выполнение символьного дифференцирования и интегрирования, вычисление сумм и произведений, разложение в ряды Тейлора и Маклорена, операции со степенными многочленами (полиномами), вычисление корней полиномов, решение в аналитическом виде нелинейных уравнений, всевозможные символьные преобразования, подстановки и многое другое. Имеет команды прямого доступа к ядру системы Maple V.
Пакет позволяет готовить процедуры с синтаксисом языка программирования системы Maple V R4 и устанавливать их в системе MATLAB. К сожалению, по возможностям символьной математики пакет сильно уступает специализированным системам компьютерной алгебры, таким как новейшие версии Maple и Mathematica.
А вот многое из
http://www.phys.nsu.ru/cherk/matlab6/Chapter%2023/1.htm
в Maple отсутсвует.
← →
nikkie (2003-04-15 16:27) [13]>Ну тогда получаем уравнение шестой степени, решение которого не представимо в виде элементарных функций.
угу. вот и надо это уравнение 6-й степени получить.
поскольку общее алгебраическое уравнение порядка выше 4 не имеет решения в радикалах, то решением системы алгебраических уравнений принято считать приведение системы к эквивалентной системе вида
p_1(x_1) = 0
x_2 = p_2(x_1)
x_3 = p_3(x_1)
...
то есть сведение системы уравнений к одному уранению. задачка нетривиальная, но алгоритмически разрешимая. инструмент решения - базис Гребнера.
>А вот многое из ... в Maple отсутсвует.
кто бы спорил... каждой задаче свой инструмент. но для решения систем алгебраических уравнений альтернативы MAPLE я не знаю. по крайней мере, профессиональные алгебраисты пользуются им.
← →
MBo (2003-04-15 16:37) [14]>nikkie
И систему из двух кубических Maple решает с получением ур-я 9-й степени. Текста килобайт на 20 ;)
← →
nikkie (2003-04-15 18:02) [15]>Mbo
>Текста килобайт на 20 ;)
так это, понимашь, зависит от того, сколько у тя параметров. если все коэффициенты числа, то 10 коэффициентов много не должны занять :)
я вот только не понял подтекста твоего поста. ты хотел сказать, что ответ, занимающий 20Kb имеет мало смысла? если так, то это неправда. у такого ответа можно дискриминант посчитать, можно его попробовать на множители разложить, мало ли чего еще...
← →
MBo (2003-04-15 18:09) [16]>если все коэффициенты числа
в символьном виде.
>ответ, занимающий 20Kb имеет мало смысла?
нет, я этого не имел в виду.
BTW, через результанты получилось короче.
← →
Marser (2003-04-15 18:21) [17]ИМХО, Крамер - рулез форева! ;-)))))
← →
nikkie (2003-04-15 18:40) [18]>в символьном виде.
представь себе. система уравнений без параметров, а решают ее в символьном виде, что есть антоним численного решения.
>BTW, через результанты получилось короче
как бы странно, поскольку ответ-то один :)
может там просто надо выделить множитель.
BTW результанты позволяют получить p_1(x_1) только в случае 2-х уравнений с двумя неизвестными (или когда остальные уравнения линейные по одной из переменных). в случае большего числа нелинейных уравнений, результанты дают существенно более высокие степени. например, есть система из 3 уравнений степеней 2, 3, 4 дает p_1 степени 24, а если делать через результанты, то получаем сначала 2 уравнения порядка 6 и 8, потом одно уравнение степени 48...
Страницы: 1 вся ветка
Форум: "Потрепаться";
Текущий архив: 2003.05.01;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.007 c