![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
![]() доброго времени суток!) столкнулась с проблемой, в маткаде есть некая функция root которая возвращает значение аргумента, при котором функция равна нулю...есть ли какой-нибудь аналог этой функии в делфи? если нет, то подскажите, как правильно записать формулу? исходный код во вложениях.
|
#2
|
||||
|
||||
![]() В Delphi есть модуль Math - функции, которые в нём есть описаны здесь. Аналога этой функции, скорее всего, нет. Поэтому такую функцию как-то самостоятельно писать придётся, как-то так: один параметр - сама функция (процедурный тип данных или как-то распознавать нужно что это за функция).
Чем больше знаешь, тем сильнее осознаёшь, что знаешь гораздо меньше, чем не знаешь!.. |
Этот пользователь сказал Спасибо DelphiM0ZG за это полезное сообщение: | ||
littlePCgenius (01.02.2012)
|
#3
|
||||
|
||||
![]() ну так я и предполагала...оч надеялась найти что-то подобное((( но всё равно спасибо, будем пробовать
![]() |
#4
|
|||
|
|||
![]() А это примитивный алгоритм. root(f, x, a, b). a и b - это координаты x, на которых f имеет разные знаки. Поэтому внутри должен быть по крайней мере один корень, если f непрерывная. Решение находится методом деления [a,b] пополам. Если внутри корней несколько, то находится один.
|
Этот пользователь сказал Спасибо AlexSku за это полезное сообщение: | ||
littlePCgenius (02.02.2012)
|
#5
|
||||
|
||||
![]() это что-то вроде этого?
Код:
function root(f,a,b,eps): real; var fa,fb,fc,c: real; begin fa:=f(a); fb:=f(b); c:=a/2+b/2; fc:=f(c); if abs(fc)<eps then root:=c else if fa<fb then if fc>0 then root:=root(f,a,c,eps) else root:=root(f,c,b,eps) else if fc>0 then root:=root(f,c,b,eps) else root:=root(f,a,c,eps) этот код на каком-то сайте нашла, но не совсем его поняла(( если можете, объясните пожалуйста ![]() Последний раз редактировалось littlePCgenius, 02.02.2012 в 08:23. |
#6
|
|||
|
|||
![]() 1) формальные параметры должны иметь типы. a, b, eps это real:
var a, b: real; const eps: real; f это указатель на функцию, можно написать так: Код:
type TFun = function(x: real): real; function MyFun(x: real): real; begin Result:= x * 5 + 2; // пример функции одной переменной end; function root(f: TFun; var a, b: real; const eps: real): real; begin ... Result:= ...; end; 2) В примере используется рекурсия, а я бы сделал с помощью цикла. |
#7
|
|||
|
|||
![]() Объяснения:
Код:
function root(f,a,b,eps): real; var fa,fb,fc,c: real; begin fa:=f(a); fb:=f(b); c:=a/2+b/2; // это середина отрезка fc:=f(c); if abs(fc)<eps then root:=c else // значение около 0, можно закончить if fa<fb // если нет, то проверим на вдвое узком отрезке then if fc>0 then root:=root(f,a,c,eps) else root:=root(f,c,b,eps) else if fc>0 then root:=root(f,c,b,eps) else root:=root(f,a,c,eps) |
Этот пользователь сказал Спасибо AlexSku за это полезное сообщение: | ||
littlePCgenius (03.02.2012)
|
#8
|
||||
|
||||
![]() вроде теперь все понятно)) огромное спасибо за помощь
![]() |
#9
|
|||
|
|||
![]() Какие математические операции есть в делфи?
|
#10
|
||||
|
||||
![]() Arithmetic operators, which take real or integer operands, include +, -, *, /, div, and mod.
The Boolean operators not, and, or, and xor take operands of any Boolean type and return a value of type Boolean. The operations x shl y and x shr y shift the value of x to the left or right by y bits, which (if x is an unsigned integer) is equivalent to multiplying or dividing x by 2^y; the result is of the same type as x. Пишу программы за еду. __________________ Последний раз редактировалось NumLock, 15.04.2012 в 13:36. |