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

Привет дорогой друг

Наш сайт существует и развиваетется за счет рекламы. Пожалуйста, отключите блокировку рекламы AdBlock или подобное, для нашего сайта. Спасибо!
Показано с 1 по 2 из 2
  1. #1
    Гость форума

    Регистрация
    24.11.2006
    Сообщений
    3
    Сказал(а) спасибо
    0
    Поблагодарили 0 раз(а) в 0 сообщениях

    По умолчанию Осуществление функции Root из MathCad в Delphi

    Кто-нить знает как можно осуществить функцию 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();
    }
    За ранее спасибо, за помощь! Однако я точно не уверен что это то что мне нужно если у кого есть мысль плиз.... поделитесь....

  2. #2
    Гость форума

    Регистрация
    27.12.2007
    Сообщений
    3
    Сказал(а) спасибо
    0
    Поблагодарили 0 раз(а) в 0 сообщениях

    По умолчанию

    Поищи в гугле проги "C2PAS" или "H2PAS" (вторая входит в инструментарий Lazarus) - они сделают 80% перевода на паскаль, останется косметика

Похожие темы

  1. Пожалуйста, подскажите.... Delphi
    от NITRON в разделе Прикладное программирование
    Ответов: 5
    Последнее сообщение: 18.01.2008, 02:56

Социальные закладки

Социальные закладки

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •