PDA

Просмотр полной версии : Осуществление функции Root из MathCad в Delphi



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

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