Добрый вечер. Кто сможет помочь переделать задачу: Разработать схему алгоритма, составить Pascal-программу и Delphi-проект вычисления таблицы значений функции Y=f(X,A,B) при заданных изменениях значений аргумента X и параметра A. Параметр В принимает значения, численно равное корню нелинейного уравнения или интеграллу. Обозначения: Xn (An), Xk (Ak) - начально и конечное значения аргумента (параметра А) Dx (Da) - шаг изменения аргумента (параметра) N - число значений аргумента (параметра), изменяемого от значения Xn, (An) с шагом Dx (Da); M - число значений аргумента (параметра), не зависящих друг от друга.
Изменяемые входные данные: a)Аргумент X: Xn, Dx, N б)Параметр А: An, Ak, Da Табулируемая функция f(x,a,b):
tg(ax/b), при х<1 (sqrt(a^2 * x^4 + b^2))/x^3, при х>=1
Нелинейное уравнение. Условие задачи: вычислить первый положительный корень уравнения F(x)=0 с заданной погрешностью E (E=10^-3 -:- 10^-6) на интервале [c,d]
e^cos(0.3x - 0.2) - ln(x+2.2) Интервал изоляции [c,d]: 0, 9;
Интеграл Условие задачи: вычислить приблеженно с заданной погрешностью E (тоже самое) значение определенного интеграла (знак интеграла, а внизу b сверху) f(x)dx
(((x^2)+x+2)^2)*cos(2x)
Пределы интегрирования: a = 2.51 b = -0.69 (Дельфи не нужно)Добавлено (18.12.11, 17:29) --------------------------------------------- Вот мой вариант: Code Const a0=2.51; b0=-0.69; Var x,a,b,Xn,Xk,Dx,An,Ak,Da:Real; Na,Nx,i,j:Byte;
Function I0(x:real):Real; begin I0:=0.5*Sin(x*2); end;
Function I1(x:real):Real; begin I1:=Cos(x*2)/4+x*Sin(x*2)/2; end;
Function I2(x:real):Real; begin I2:=x/2*Cos(x*2)+(sqr(x)/2-0.25)*Sin(x*2); end;
Function I3(x:real):Real; begin I3:=(sqr(x)*0.75-0.375)*Cos(x*2)+(x*sqr(x)/2-0.75*x)*Sin(x*2); end;
Function I4(x:real):Real; begin I4:=sqr(sqr(x))*Sin(x*2)/2-2.0*((sqr(x)*0.75-0.375)*Sin(x*2)-(x*sqr(x)/2-x*0/75)*Cos(x*2)); end;
Function f(xf,af:real):real; begin If xf<1 then f:=Sin(af*xf/b) else f:=Sqrt(sqr(af)*sqr(sqr(xf))+sqr(b))/xf/sqr(xf); end;
BEGIN b:=(I4(b0)+I3(b0)*2+I2(b0)*5+I1(b0)*4+I0(b0)*4)-(I4(a0)+I3(a0)*2+I2(a0)*5+I1(a0)*4+I0(a0)*4); Write('Xn= '); Readln(Xn); Write('Xk= '); Readln(Xk); Write('Dx= '); Readln(Dx); Write('An= '); Readln(An); Write('Ak= '); Readln(Ak); Write('Da= '); Readln(Da); Nx:=ROUND((Xk-Xn)/Dx); Na:=ROUND((Ak-An)/Da); for i:=0 to Na do begin a:=An+Da*i; for j:=0 to Nx do begin x:=Xn+Dx*j; Writeln('x=',x:3:1,' a=',a:3:1,' f=',f(x,a):0:5); end; end; Readln; END. Добавлено (18.12.11, 17:32) --------------------------------------------- А нужно, чтобы было вот как в этом примере (Только в нем решается не интеграл, а уравнение): [CODE]Program TabRgr const Nmax = 20 type Tmy=array[1..Nmax,1..Nmax] of Extended; Tmx=array[1..Nmax] of Extended; Ter=array[1..Nmax,1..Nmax] of integer; var A,Mx:Tmx; My: Tmy; Xn,Xk,Dx,B,C,D,Xo,Eps,Z,Zt:Extended; I,J,K,N,Err,Km:integer; Er:Ter; {Текст процедуры ввода массива} Procedure DataIn(N: Integer;var A:Tmx); var I:integer begin for I:=1 to N do read(A[I]); end; {Текст процедуры табулирования} Procedure Tab(B,Xn,Xk,Dx:Extended; N:Integer; var Er:Ter; var A,Mx:Tmx; Var My:Tmy}; var I,J:Integer; X,Y:Extended begin for J:=1 to N do begin I:=1; X:=Xn; Er[J,I]:=0 repeat if X<2 then Y:=B*sqr(sin(A[j]*X)) else if (A[j]*X+B)>0 then Y:=X*sqrt(A[J]*X+B) else Er[J,I]:=1; Mx[I]:=X; My[J,I]:=Y; Inc(I); X:=X+Dx; until X>Xk end; end; {Текст подпрограммы-функции} Function F(C,D,X:Extended):Extended; begin F:=C*sin(X)+X-D; end; {тут программа решения нелинейного уравнения} Добавлено (18.12.11, 17:34) --------------------------------------------- На продолжение места не хватает) Добавлено (18.12.11, 17:37) ---------------------------------------------
Code {Текст процедуры вывода данных} Procedure ResOut(Var Mx:Tmx; var A:Tmx; Var My:Tmy; Var Er:Ter; K:integer); Var I,J:Integer begin for J:=1 to N do {Вывод результатов выполнения программы} begin writeIn('A[',J,']=',A[J]:8:4); writeIn('X', 'Y'); for I:=1 to K do if Er[J,I]=1 then writeIn(Mx[I]:6:3, ' ошибка данных') else writeIn(Mx[I]:6:3,' ',My[J,I]:6:3); end; end; Добавлено (18.12.11, 17:38) ---------------------------------------------
Code begin {Начало главной програмы} writeIn('Введите значение переменных:Xn,Xk,Dx,N'); readIn(Xn,Xk,Dx,N); writeIn('Xn=',Xn:4:2,' Xk=', Xk:4:2,' Dx=', Dx:4:2,' N=', N); writeIn('Введите значения: параметров уравнения C,D; начального', ' приближения Xo, погрешности Eps, предельного числа циклов Km'); readIn(C,D,Xo,Eps,Km); writeIn('C=',C:6:3, ' D=',D:6:3, ' Xo=',Xo:7:3, ' Eps=',Eps:7:5, ' Km=',Km:3); writeIn('Введите массив из N элементов'); DataIn(N,A); {Вызов подпрограммы ввода массива} Equat(Xo,Eps,Km,Err,Z); {Вызов подпрограммы нахождения корня уравнения} if Err = 1 then begin writeIn('Корень не найден за', Km:2,' итераций'); exit end; Zt:= F(C,D,Z); {Погрешность вычисления корня по невязке} B:=Z; writeIn('Корень равен B=', B:4:2, ' Zt=', Zt:8:7); Tab(B,Xn,Xk,Dx,N,Er,A,Mx,My); {Вызов подпрограммы табулирования} K:= trunc((Xk-Xn)/Dx+1); ResOut(Mx,A,My,Er,K); {Вызов подпрограммы вывода данных} readln; end. буду очень благодарен.
|
|
|