Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Численные методы.-3

.pdf
Скачиваний:
10
Добавлен:
05.02.2023
Размер:
1.14 Mб
Скачать

121

производную и т.д.).

Данная функция просто возвращает значение функции psEvalStr, Преобразовав arg в массив из одного элемента. Функция psEvalStr сначала формирует ОПС, а затем вычисляет ее значение. Замечание: если одно и то же выражение вычисляется несколько раз, то формирование ОПС будет производиться многократно, что не есть хорошо. В этом случае лучше один раз самостоятельно создать ОПС с помощью функции StrToPolStr, а затем вызывать EvalPolStr вместо EvalStr. То же самое касается функции EvalStrN. }

function EvalStr (expr : string; arg : real; der : word) : real;

{Вычисление выражения (векторный аргумент). Аргументы:

1)expr : string - строка, содержащая выражение;

2)args : array of real - вектор аргументов;

3)arg_count : word - количество аргументов в выражении;

4)der : word - порядок производной;

5)arg_idx : word - по какому аргументу берется производная (0 – по единственному скалярному аргументу, 1 - по x1 для векторного аргумента,

2 - по x2 и т.д.). }

function EvalStrN (expr : string; args : array of real; arg_count, der, arg_idx : word) : real;

{Вычисление выражения в виде ОПС (скалярный аргумент). Аргументы:

1)pstr : string - строка, содержащаю ОПС;

2)arg : real - значение аргумента;

3)der : word - порядок производной.

Данная функция просто возвращает значение функции psEvalPolStr, преобразовав arg в массив из одного элемента. }

function EvalPolStr (pstr : string; arg : real; der : word) : real;

{Вычисление выражения в виде ОПС (векторный аргумент). Это основная функция для вычисления выражений, все остальные функции так или иначе вызывают ее. Аргументы:

1)pstr : string - строка, содержащую ОПС;

2)args : array of real - вектор аргументов;

3)der : word - порядок производной;

4)arg_idx : word - по какому аргументу берется производная.

122

Функция возвращает значение выражения, если во время Вычислений не было ошибки, иначе ноль. Ошибка ERR_UNKNOWN_DER возникает в том случае, если невозможно вычислить производную выражения. Если выражение содержит только операции +, - и *, то можно вычислит любую его производную. Если оно содержит другие функции и операции, то можно вычислить только первую и вторую производные. Замечание: в паскале отсутствует степенная функция, поэтому возведение в степень реализовано в следующем виде: x^y = exp(y*ln x). Поэтому аргумент х должен быть положительным! Если требуется вычислить выражение вида x^2, лучше написать x*x, если нет уверенности в положительности x. }

function EvalPolStrN (pstr : string; args : array of real; der, arg_idx : word) : real;

implementation

uses polstr;

function StrToPolStr(expr : string; arg_count : word) : string;

var pstr : string; begin

psStrToPolStr(expr, pstr, arg_count);

Error

:= psError;

StrToPolStr

:= pstr;

end;

 

function EvalStr(expr : string; arg : real; der : word) : real;

var args : array [0..0] of real;

val

: real;

begin

 

args[0]

:= arg;

psEvalStr(expr, args, 0, der, 0, val);

Error

:= psError;

EvalStr

:= val;

end;

 

function EvalStrN(expr : string; args : array of real; arg_count, der, arg_idx : word) : real;

var val : real; begin

psEvalStr(expr, args, arg_count, der, arg_idx, val);

Error

:=

psError;

EvalStrN

:=

val;

123

end;

function EvalPolStr(pstr : string; arg : real; der : word) : real;

var args : array [0..0] of real;

val

: real;

begin

 

args[0]

:= arg;

psEvalPolStr(pstr, args, der, 0, val);

Error

:= psError;

EvalPolStr := val;

end;

 

function EvalPolStrN(pstr : string; args : array of real; der, arg_idx : word) : real;

var val : real; begin

psEvalPolStr(pstr, args, der, arg_idx, val);

Error

:=

psError;

EvalPolStrN :=

val;

end;

end.