Хороший вариант: Вам нужно вашу подинтегральную функцию откомпилировать, а потом динамически скомпоновать с вашей программой:
- из вашей переменной составляете исходник на C путем конкатенации
- вызываете компилятор C
- вызываете компоновщик, получаете динамически подключаемую библиотеку с вашей подинтегральной функцией
- загружаете библиотеку, подключаете функцию к вашей программе
- считаете интеграл
То же самое, только в профиль - взять OpenCL. Тогда вся работа по компиляции ядра и компоновке будет от вас скрыта, да и вычисления можно будет проделать на GPU
Плохой вариант: написать собственный интерпретатор математических функций (воспользовавшись алгоритмом сортировочной станции). Это будет дикий тормоз.
Третий вариант - выкинуть вашу программу на помойку и считать в Maxima, Maple, Octave и других умных программах. Хотя это тоже медленно.
И да, каким велосипедом вы считаете интеграл? Потому как редко когда самопальный интегратор может соревноваться с GSL.