Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.03.27;
Скачать: CL | DM;

Вниз

Выразить переменную из выражения.   Найти похожие ветки 

 
fool ©   (2003-03-10 13:40) [0]

Буду благодарен всем, кто поможет информацией по следующему вопросу:
Необходим алгоритм, позволяющий из произвольного выражения (операции только +,-,*,/), выражать требуемую переменную. Например, есть некое выражение, скажем (А+В)/Д=С*Р, алгоритм должен позволять выражать любую переменную через остальные.

Понимаю, что алгоритм в чистом виде врядтли у кого найдеться, подойдут ссылки по теме...


 
DiamondShark ©   (2003-03-10 16:14) [1]

В общем виде не решается. Пример:
A*X + B = C/X, выразить X.


 
Юрий Зотов ©   (2003-03-11 00:00) [2]

> DiamondShark © (10.03.03 16:14)

Элементарное квадратное уравнение с ОДЗ X<>0. То есть:
X1=(-B-Sqrt(B*B+4*A*C))/(2*A), X1<>0
X2=(-B+Sqrt(B*B+4*A*C))/(2*A), X2<>0

Вообще, если в уравнении встречаются только арифметические операции (то есть, оно не трансцендентное), то после избавления от всех знаменателей (последовательным домножением на них), переноса всех членов в левую часть, раскрытия всех скобок и группировки членов с одинаковой степенью неизвестного оно приводится к полиному. О полиномах же давно известно - если степень не выше 3-ей, то решение в радикалах существует. Если же выше, то в общем виде не существует, а в частных случаях - возможно.

То есть, предлагается на обсуждение такой алгоритм:

1. Все переносим в левую часть (в правой остается ноль).
2. Поочередно домножаем на каждый знаменатель (если надо, то при этом формируем ОДЗ).
3. Раскрываем все скобки.
4. Группируем члены с одинаковой степенью неизвестного и располагаем их в порядке убывания степени (то есть, приводим к каноническому полиному).
5. Если приходим к одному из трех случаев:
а). A*X + B = 0
б). A*X^2 + B*X + C = 0
в). A*X^3 + B*X^2 + C*X + D = 0
то используем соответствующую готовую формулу. В других случаях общего решения не существует.

Рассмотрим на примере (А+В)/D=С*B и выразим, например, B.
1. (A+B)/D-C*B=0
2. (A+B)-C*B*D=0, D<>0
3. A+B-C*B*D=0
4. (1-C*D)*B+A=0
5. Имеем случай а). Подставляем в готовую формулу наши коэффициенты и получаем:
B=(-A)/(1-C*D)

Главное, что здесь потребуется написать - это парсер арифметических выражений. Задача для курсового проекта.

Не утверждаю, что этот алгоритм является общим и безошибочным. Поэтому и написал - "предлагается на обсуждение".




 
Думкин ©   (2003-03-11 05:09) [3]


> Юрий Зотов © (11.03.03 00:00)
> - если степень не выше 3-ей,

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


 
fool ©   (2003-03-11 13:11) [4]

Юрий Зотов © (11.03.03 00:00)
Спасибо, вполне подходит. Выше второй степени у меня случаев не будет...

Что то я старею, такие вещи забывать стал :(



Страницы: 1 вся ветка

Текущий архив: 2003.03.27;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.023 c
1-88063
Mystex
2003-03-15 15:51
2003.03.27
---|Ветка была без названия|---


1-87954
ish1
2003-03-17 10:51
2003.03.27
Направление текста снизу вверх


14-88132
Игорь Шевченко
2003-03-12 17:59
2003.03.27
Жизненный цикл программы


1-88057
SunnyTm
2003-03-14 21:45
2003.03.27
Поиск каталогов по FindFirst


14-88206
Devel
2003-03-11 13:49
2003.03.27
CPU Usage