Отслеживание недостающих данных при оценке expr с помощью GiNaC

У меня есть фрагмент кода, который получает табличные данные и выражения GiNaC от пользователя и оценивает результат. В таблице могут отсутствовать данные. Я хочу иметь возможность определять, когда эти отсутствующие данные делают невозможным оценку конкретного выражения: это может быть не всегда так, если столбец, в котором отсутствуют данные, не используется в конкретном выражении.

Пример данных:

#x  y   z
0.  0.  0.
1.  0.  1.
3.  4.  nan
nan 1.  1.

Примеры выражений: R=\sqrt{x**2+y**2} Z=z

Пример желаемого результата:

#R   Z
0.   0.
1.   0.
5.   nan
nan  1.  

Пока я заменял отсутствующие данные на numeric_limits<double>::max() во время обработки GiNaC, но, конечно, обратно заменяя na работает только в том случае, если значение никак не изменяется (как для z значение здесь), и поэтому эта опция приводит к ложному значению R в 3-й строке в примере.

Я вижу 2 варианта:

  • Если я смогу получить список символов, используемых в выражениях для R и Z тогда я могу заменить вычисленное значение этих выражений на nan всякий раз, когда любое из значений на входе nan для этих,
  • Если переменным GiNaC могут быть присвоены нечисловые значения, я могу определить, что результат оценки не является числовым, и заменить его на nan.

Я не нашел способа сделать то же самое в документации GiNaC, и я открыт для любых предложений по решению этой проблемы.

0 ответов

Другие вопросы по тегам