как реализовать математическую формулу - PullRequest
0 голосов
/ 23 января 2012

Я должен реализовать математическое уравнение в своем приложении для iPhone.но я не знаю, как реализовать.Требуется ли добавить структуру для целей расчета?

My formula :0.00005*t^3 + 0.0045*t^2 + 0.7542*t + 23.459 = p

Еще один вопрос по математике: у меня есть значение p, и из найденного значения t любой может помочь мне решить это уравнение или помочь мнекак найти т.

Ответы [ 3 ]

1 голос
/ 23 января 2012

Вы хотите формулы для корней кубического уравнения - вы можете получить их из wikipedia

0 голосов
/ 25 января 2012

Если вы хотите просто оценить уравнение, вы можете просто реализовать следующую функцию:

double f(double t)
{
    return 0.00005 * (t * t * t) + 0.0045 * (t * t) + 0.7542 * t + 23.459;
}

Если вы хотите найти корень уравнения, у вас есть два варианта: Аналитические решенияи численно.Аналитически вы можете найти корни только для небольшого набора полиномов ( Линейный, Квадратичный , Кубический и Квартический ). В общембольшинство полиномов трудно, если не невозможно, найти аналитическое решение для.

Ссылка, которую я предоставил для кубического уравнения, показывает вам, как найти корни вашего уравнения.Я не буду повторять их здесь, так как это довольно просто реализовать.Если вы хотите «более простой» способ найти корень уравнения, вы можете использовать так называемый метод Ньютона.

Вы можете написать свою функцию как f(t, p) = 0.00005 * t^3 + 0.0045 * t^2 + 0.7542 * t + 23.459 - p.Поскольку вы знаете уравнение, вы можете рассчитать его производную и использовать метод Ньютона , чтобы найти для один корней:

double FindRoot(double t0, double p)
{
    double eps = 1E-6; // The accuracy of the found root
    double t;
    do
    {
        t = t0;
        double f  = 0.00005 * t * t * t + 0.0045 * t * t + 0.7542 * t + 23.459 - p;
        double fp = 0.00015 * t * t + 0.009 * t + 0.7542;
        t0 = t - f / fp;
    } while(abs(t - t0) > eps);

    return t0;
}

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

0 голосов
/ 23 января 2012

Нет необходимости внедрять дополнительные фреймворки.

Вы можете сделать следующее:

double p = 0.00005*pow(t, 3) + 0.0045*pow(t, 2) + 0.7542*t + 23.459;

И чтобы найти t, вам нужно решить кубическое уравнение, как указано в этой ссылке

...