Генерация и затем использование полинома Тейлора в C # - PullRequest
2 голосов
/ 20 октября 2010

Я написал простую графическую реализацию на C #, и я могу строить графики, сравнивая каждый пиксель с позицией на графике, который он представляет, и вставляя эту позицию в функцию, которую я должен увидеть, находится ли она на кривой. Это все хорошо.

Проблема в том, что я использую сгенерированный полином Тейлора. Например, я могу создать n-й многочлен Тейлора трансцендентной функции f с центром в c, выполнив

сумма от 0 до n с переменной счетчика k = ((k-я производная от f (c)) * (x-c) ^ k) / k!

Я не уверен, как сделать математическую разметку в stackoverflow, и я не слишком компетентен, чтобы делать это в Интернете, но я надеюсь, что это понятно. Левая сторона может быть записана как sigma _k = 0 ^ n или что-то в этом роде с _, представляющим раздел под сигмой, и ^, представляющим часть выше ...

Таким образом, я получаю полином Тейлора 6-й степени для cos (x) с центром в 0 (я знаю, маклаурин), который выглядит примерно так:

"1 - x ^ 2/2! + X ^ 4/4! - x ^ 6/6!"

Это можно сделать с помощью простых манипуляций со строками в C #. Я могу просто перебрать и добавить следующий член в строку.

Я действительно не могу понять, как я мог бы на самом деле использовать строку в качестве функции для сравнения с позициями графика, чтобы увидеть, действительно ли эта позиция графика на этом графике, чтобы, следовательно, отобразить ее. Итак, по сути: как бы я использовал строку в качестве фактической математической функции в C #, или есть лучший способ сделать это.

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

Ответы [ 2 ]

1 голос
/ 20 октября 2010

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

Если у вас есть дерево выражений, чтобы выяснить, можно ли получить значение f (x) для данного x, просто оцените его.Для графика f (x) вы можете сначала проверить x, чтобы увидеть, попадает ли он в видимую область графической области.Если это так, оцените f (x), и если точка (x, f (x)) может быть получена, то нарисуйте точку.

1 голос
/ 20 октября 2010

Вам нужен анализатор строки -> функция. См. MathParser для примера, который, вероятно, делает все, что вы упомянули, что вам нужно.

...