program q;
uses crt;
var x:real;
begin
textbackground(blue);
clrscr;
x:=-2;
while x<=0 do
begin
if x=cos(x)-1 then
begin
writeln('ura! x=', x);
break;
end;
writeln(x);
x:=x+0.0001;
end;
readln;
end.
Проблема с решением ур-ния на паскале
Я пытался сделать это всоими силами, но.. :cry:
Короче, cosx E [-1; 1], значит x, я так пологаю, должен быть от -2 до 0. И прогу я хотел сделать, чтоб просто переберала все числа от -2 до 0, и выводила на экран корни.
Вот код:
Код:
Но почему-то моя прога числа перебирает, и ничего не выводит, точнее выводит, но не корни :cry:
Помогите....
http://www.students.nizhny.ru/labinf.htm
Посмотри, может быть найдешь. В разделе численные методы решения нелинейных уравнений
Посмотри, может быть найдешь. В разделе численные методы решения нелинейных уравнений
Я понял почему она не работает
То есть она так никогда не заработает т.к. условие никогда не выполнится
Точного значения икса ты никогда не получишь, поэтому и условие никогда не будет выполненно точно , т.е. там будет приблизительно равно но не равно.
Поэтому надо искать икс первый который который бует менять знак выражения cosx-1-x - это мой совет.
Знак узнать куда проще. Просто можешь хранить в отдельной переменной, а можешь просто сделать мат выражение типа (cos(x-0.0001)-(x-0.0001)-1)(cosx-x-1)<=0 - и проверять верность данного выражения
то есть так даже сильно код менять не придется =)
Вот так, товарищи прогеры
первый вар:
Код:
x:=-3*pi/4;
while x <=1 do
begin
if abs(cos(x)-1-x)<0.0001 then writeln(x:3:5);
x:=x+0.00001;
end;
while x <=1 do
begin
if abs(cos(x)-1-x)<0.0001 then writeln(x:3:5);
x:=x+0.00001;
end;
и второй:
Код:
x:=-2;
while x<=1 do
begin
if ((cos(x)-1-x) > -0.0001) and (cos(x)-1-x < 0.0001) then writeln(x:3:4);
x:=x+0.0001;
end;
while x<=1 do
begin
if ((cos(x)-1-x) > -0.0001) and (cos(x)-1-x < 0.0001) then writeln(x:3:4);
x:=x+0.0001;
end;
Да незачто =)