1. Уважаемые участники и гости, 19 октября codeby будет работать в режиме "Только чтение". Регистрация новых участников будет закрыта. 20 октября портал продолжит работу в прежнем режиме.

Осуществление функции Root из Mathcad в Delphi

Тема в разделе "Delphi - Базы данных", создана пользователем NITRON, 17 авг 2007.

  1. NITRON

    NITRON Гость

    Репутация:
    0
    Кто-нить знает как можно осуществить функцию Root из MathCad в Дельфи или что-то похожее?
    У меня есть текст Маскадовоской программы но мне нужно всё это перевести на Дельфи. Когда начал писать столкнулся с такой проблемой есть уравнение которое как я понял по Хелпу решается методом секущей Мюллера. Уравнение с двумя аргументами. Я нашел несколько исходников вроде тех которые надо но только на языке СИ 3.0 по ДОС, начал их переводить и получилось так что там есть цикл For k=0 .. to .. и получилось что k во время выполнения цикла в расчётах не участвует. Я опять зашел в тупик. нашел еще несколько опять же н СИ и вообще не чего не понял если что на всякий случай пример скачанного мной кода.

    Код:
    //************************************************** *
    
    #include <conio.h>
    #include <iostream.h>
    #include <math.h>
    
    double f(double x)
    {
    return exp(x)+2*x;
    }
    
    
    
    double findRootMuller(double x0, double h, double eps, long max_step, double (&f)(double) ) 
    {
    double x1 = x0+h, x2 = x0+2*h, xn;
    double f_x0 = f(x0), f_x1 = f(x1), f_x2 = f(x2), f_xn;
    
    for(long k=0; k<max_step; k++)
    {
    double q = (x0-x1)/(x1-x2);
    double a = q*f_x0-q*(1+q)*f_x1+q*q*f_x2;
    double b = (2*q+1)*f_x0-(1+q)*(1+q)*f_x1+q*q*f_x2;
    double c = (1+q)*f_x0;
    double d = sqrt(b*b-4*a*c);
    double z = (fabs(b+d)>fabs(b-d))?(b+d)b-d);
    
    xn = x0-(x0-x1)*2*c/z; 
    f_xn = f(xn);
    
    if(fabs(f_xn)<eps) 
    {
    break;
    }
    
    x2 = x1; f_x2 = f_x1;
    x1 = x0; f_x1 = f_x0;
    x0 = xn; f_x0 = f_xn;
    }
    return xn;
    }
    
    
    void main()
    {
    clrscr();
    
    cout.precision(6);
    cout.setf(ios::fixed|ios::showpoint);
    
    double x = findRootMuller(-2,1,.0000001,10000,f);
    
    cout<<"x = "<<x<<endl;
    cout<<"f(x) = "<<f(x)<<endl;
    
    getch();
    }
    За ранее спасибо, за помощь! Однако я точно не уверен что это то что мне нужно если у кого есть мысль плиз.... поделитесь....
     
Загрузка...
Похожие Темы - Осуществление функции Root
  1. Генералл
    Ответов:
    2
    Просмотров:
    625
  2. rn3rjd
    Ответов:
    0
    Просмотров:
    688
  3. Sanchezz86
    Ответов:
    1
    Просмотров:
    770
  4. Sentim
    Ответов:
    1
    Просмотров:
    881
  5. FaRReLL
    Ответов:
    1
    Просмотров:
    1.822

Поделиться этой страницей