ФЭА / АИТ / Лабораторная работа №1 Вариант №4 Задание: 5*sin(x) = x;
(автор - student, добавлено - 25-01-2014, 17:06)
СКАЧАТЬ ПРОГРАММА В АРХИВЕ:
Лабораторная работа №1 Вариант №4
Задание: 5*sin(x) = x; 1) Отделить графически корни уравнения.
На графике видно, что данное уравнение имеет три корня, из которых два лежат в интервалах:[-3;-2], [2;3]. А один известный – это ноль.
2) Отделить корни уравнения машинным способом. Исходный код: Program ocenit; Uses CRT; Var a,b,n:integer; y,x,h,c,z:real; i:boolean; Function f(t:real):real; begin f:=5*sin (t)-t; end; BEGIN CLRSCR; i:=false; Write ('(a,b):'); Readln (a,b); Write ('n='); Readln (n); h:=(b-a)/n; x:=a; Repeat c:=f(x); y:=x+h; z:=f(y); if z*c<0 then Writeln ('[',x:1:1,';',y:1:1,']'); if (c=0) and (i=false) then begin Writeln (x:1:1); i:=true; end; x:=x+h; Until y>=b; Readln; END. Интервалы, полученные по средствам программы, совпадают с интервалами графического метода.
3) Для уточнения корней до нужной точности методом половинного отрезка, используется следующая программа: Program half_method; Uses CRT; Var a,b,x,e,c,z:real; Function f(t:real):real; begin f:=5*sin (t)-t; end; BEGIN CLRSCR; Write ('(a,b):'); Readln (a,b); Write ('e='); Readln (e); if (e=0) or (b<a) then begin Write ('It can not be!'); Readln; exit; end; Repeat c:=f(a); x:=(a+b)/2; z:=f(x); if z*c<0 then b:=x else a:=x; Until (b-a)<=e; Writeln ('x=',x:2:4,' f(x)=',z:2:4); Readln; END. Результатом работы программы на отрезке [-3;-2] с точностью Е=0.001 было значение: , а на отрезке [2;3] с той же точностью:
Для уточнения корней до нужной точности методом касательных, используется следующая программа:
Program kasat; Uses CRT; Var a,b,e,x,y:real; i:boolean; Function f(t:real):real; begin f:=5*sin (t)-t; end; Function f_1 (p:real):real; begin f_1:=5*cos(p)-1; end; BEGIN CLRSCR; i:=false; Write ('(a,b):'); Readln (a,b); Write ('e='); Readln (e); if (e=0) or (b<a) then begin Write ('It can not be!'); Readln; halt; end; if (a-(f(a)/f_1(a)))<b then x:=a else x:=b; Repeat y:=(x-(f(x)/f_1(x))); if abs(y-x)<=e then i:=true else x:=y; Until i=true ; Writeln ('x=',x:2:4,' f(x)=',f(x):2:4); Readln; END. Результатом работы программы на отрезке [-3;-2] с точностью Е=0.001 было значение: , а на отрезке [2;3] с той же точностью:
f(-2.5967)=0.0050… f(2.5967)=-0.0050… f(-2.5958)=0.0004… f(2.5958)=-0.0001… 0<0.0004…<0.0050… -0.0050…<-0.0001…<0 Следовательно, второй метод (касательных) более точный, так как значения функции ближе к нулю.
Ответ:
Похожие статьи:
|
|