Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Проблема с решением ур-ния на паскале

2.0K
11 мая 2003 года
Dust
18 / / 19.02.2003
Задание: Сделать прогу, которая могла бы найти с погрешностью 0,0001 все корни уравнения x=cosx-1, использовать любой подходящий метод.

Я пытался сделать это всоими силами, но.. :cry:
Короче, cosx E [-1; 1], значит x, я так пологаю, должен быть от -2 до 0. И прогу я хотел сделать, чтоб просто переберала все числа от -2 до 0, и выводила на экран корни.
Вот код:
Код:
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:
Помогите....
4.3K
13 мая 2003 года
SaG
1 / / 08.05.2003
http://www.students.nizhny.ru/labinf.htm
Посмотри, может быть найдешь. В разделе численные методы решения нелинейных уравнений
554
16 мая 2003 года
Zhilin Mike
159 / / 11.02.2003
Прикольная прога
Я понял почему она не работает
То есть она так никогда не заработает т.к. условие никогда не выполнится
Точного значения икса ты никогда не получишь, поэтому и условие никогда не будет выполненно точно , т.е. там будет приблизительно равно но не равно.
Поэтому надо искать икс первый который который бует менять знак выражения cosx-1-x - это мой совет.
Знак узнать куда проще. Просто можешь хранить в отдельной переменной, а можешь просто сделать мат выражение типа (cos(x-0.0001)-(x-0.0001)-1)(cosx-x-1)<=0 - и проверять верность данного выражения
то есть так даже сильно код менять не придется =)
Вот так, товарищи прогеры
2.0K
16 мая 2003 года
Dust
18 / / 19.02.2003
всем спасибо, я вроде сделал:
первый вар:
 
Код:
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;

и второй:
 
Код:
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;
554
16 мая 2003 года
Zhilin Mike
159 / / 11.02.2003
Да незачто =)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог