Re: Дифференциирование
От: RiNSpy  
Дата: 18.06.05 18:41
Оценка:
Здравствуйте, RiNSpy, Вы писали:

RNS>Здравствуй, All,


RNS>Нужно написать ф-цию, которая бы брала производную от математической ф-ции. То есть на входе есть string типа "((3*x+x^2-5)/(6*x^3-x/2+4)*(5*x+6)+5*x)+x", на выходе моя ф-ция должна давать string c производной. На входной string есть ограничения — в нем не могут быть сложные функции(типа "x^(3*x+2)"), но зато могут быть вложенные скобки. Из мат. функций используются только сложение, вычитание, деление, умножение, возведение в степень, sin(x) и cos(x). Подскажите pls как к этой проблеме подступиться, интересно, какое здесь есть наиболее красивое решение. Да, ф-цию пишу на c++.


Первое, что приходит в голову:

Написать класс Function:

class Function()
{
public:
    ...
    string f;
    void Split();
    bool Diff();
    int GetOperation();
    Function* GetOperand();
    Function** functions;
    ...
private:
    ...
}

То есть Split ищет "подфункции 1-ого порядка" внутри функции, выделяет их в объекты класса Function, записывает указатели на них в functions. Также в классе Function хранится информация об операции, которая выполняется над данной ф-цией(+, -, *, /), и указатель на ф-цию, с которой эта операция выполняется(то есть если есть "(x+3)*(2*x+5)" то this.f="x+3", this.GetOperation вернет 3 что значит *, this.GetOperand->f вернет "2*x+5".
Я на правильном пути?
... << RSDN@Home 1.1.4 beta 7 rev. 447>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.