![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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. |