Цитата:
Сообщение от Алекс2
помогите пожалуйста сделать таблицу значений из этого: y=ln(1+x)\(1-x)
|
Уточните вид функции: знаменатель (1-х) находится под знаком логарифма, т.е.
y = ln[(1+x)/(1-x)]
или же так:
y = [ln(1+x)]/(1-x)?
Кстати, знак деления - это прямой слэш "/", а не обратный.
Ладно, будем считать, что правилен первый вариант. Тогда
Код:
Type
Arr=Array[0..3] of Real;
Var
Xi,Yi:Arr;
a,b,D,X,Y,Step:Real;
i,j:Byte;
f:Text;
Function Fun(z:real):Real;
begin
Fun:=Ln((1+z)/(1-z));
end;
Function Lagr(NL:Byte; XL,YL:Arr; ZL:Real):Real;
var
S,T:Real;
k,p:Byte;
begin
S:=0;
for k:=0 to NL do
begin
T:=1;
for p:=0 to NL do
if p<>k then T:=T*(ZL-XL[p])/(XL[k]-XL[p]);
S:=S+YL[k]*T;
end;
Lagr:=S;
end;
Begin
Writeln(' Attention! -1<a,b<+1; a<b');
Repeat
Write(' a = ');
Readln(a);
Write(' b = ');
Readln(b);
Until (a>-1) and (a<1) and (b>-1) and (b<1) and (a<b);
D:=(b-a)/3;
{Formation of Table}
Writeln(' Number of point Xi Yi');
for i:=0 to 3 do
begin
Xi[i]:=a+D*i;
Yi[i]:=Fun(Xi[i]);
Writeln(i:8,Xi[i]:16:3,Yi[i]:16:3);
end;
Writeln;
{Calculation of Lagrange interpolation}
Write(' Step (Step<(b-a))! = ');
Readln(Step);
Assign(f,'Result.txt');
Rewrite(f);
Writeln(' X Lagrange interpolation Accurate value');
Writeln(f,' X Lagrange interpolation Accurate value');
X:=a;
Repeat
Writeln(X:8:3,Lagr(3,Xi,Yi,X):18:3,Fun(X):26:3);
Writeln(f,X:8:3,Lagr(3,Xi,Yi,X):18:3,Fun(X):26:3);
X:=X+Step;
Until X>b;
Close(f);
Readln
End.