Проектирование анализатора для генерации AST для многомерных функцийC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Проектирование анализатора для генерации AST для многомерных функций

Сообщение Anonymous »

Я пытаюсь испачкать руки, реализовав многовариантный двигатель исчисления, просто ради него, но я сейчас ограничиваю свои возможности для выполнения полиномиальных функций. В частности, я хочу иметь возможность вычислить градиент функции как символически, так и расчета градиента в определенной точке. Обработайте ввод определения функции из выражения строки и используя AST для вычисления символического градиента по отношению к каждой переменной. У меня есть понимание потока, который я хочу реализовать в функции. Я просто хочу получить представление о том, как реализовать анализ и как структурировать AST, чтобы я мог достичь этих целей. Классифицируйте типы узлов как ConstantNode , variablenode , powernode и правильно определить правила дифференциации по отношению к каждому классу.
class Function{
private:
unique_ptr _ast; /// abstract syntax tree by parsing function expression
vector _variables; /// variables that the function depends on
vector _gradientData; /// gradient functions across each dependent variable
bool computedGradient = false; /// if _gradientData has already been computed

public:
Function(const string& funcDefintion){
_ast = parseExpression(funcDefintion); /// TODO:
_variables = extractVariables(_ast); /// TODO:
}

};
< /code>
Я хотел бы, как проектирование внутреннего алгоритма диапазона будет выглядеть в контексте методов, доступных в моем распоряжении, а также хотел бы знать, как CAS (компьютерные системы алгебры) справляются с этим. Любые ссылки и подсказки оценены. Спасибо.

Подробнее здесь: https://stackoverflow.com/questions/794 ... -functions
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»