Производная функции в с - PullRequest
       7

Производная функции в с

3 голосов
/ 28 апреля 2011

Есть ли способ рассчитать значения частичных производных функции в c, который до сих пор неизвестен?Я читаю здесь: Вычислить производную, используя дискретные методы о том, как реализовать производную, что возможно только тогда, когда я точно знаю функцию f (x) с x = (x0, x1, ..., xn).Но что, если я хочу передать функцию f (x) в качестве параметра, это как-то возможно?Я полагаю, что не потому, что мне нужно каким-то образом анализировать строку (очевидно, она должна быть передана как строка, например, 'x0 * exp (x1) * ln (x2 * x1)') !?Спасибо, пока!

edit: Мой вопрос не о том, как передать функцию в качестве указателя в c, а о том, как оценить математическую функцию, которая, например, вводится пользователем в виде строки.

Ответы [ 3 ]

4 голосов
/ 28 апреля 2011

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

2 голосов
/ 28 апреля 2011

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

edit: добавление примера, чтобы он был еще более очевидным ...

#include <stdio.h>

typedef float (*real_univariate_function)(float x);

float calculate_derivative(real_univariate_function f, float x, float h) {
    return (f(x+h)-f(x))/h;
}

float square(float x) {
    return x*x;
}

int main() {
    printf("derivative for x^2 in 2 with h 0.001 is: %f\n",
            calculate_derivative(&square, 2, 0.001));
}

там могут быть некоторыесинтаксические ошибки, мой C становится ржавым ...

1 голос
/ 11 мая 2014

Я знаю, что опаздываю, но, может, это кому-нибудь поможет.Я написал библиотеку, которая делает именно это: https://github.com/B3rn475/MathParseKit

Вы можете разобрать строку в дереве функций и вычислить производные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...