Помощь - Поиск - Пользователи - Календарь
Полная версия: Задачка!
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
AssAssIN'KO
Помогите пожалуйста составить программу к этой задаче:
Составить структурированную программу для нахождения корня уравнения: (корень(1-х))-cos(корень(1-х))=0 на отрезке [0;1) с абсолютной погрешностью Эпсила=10в -3 степени,методом Ньютона.В программе предусмотреть подсчёт и выдачу на печать колличество итераций,необходимых для вычисления значения с заданной точностью.(как я понял точность самому надо задать)
Кто знает как решить помогите плииз...очень надо
Lapp
Цитата(AssAssIN'KO @ 1.10.2009 9:56) *
Кто знает как решить
Да все знают. Вот так: Численные методы решения уравнений
AssAssIN'KO
я читал эту тему.....мне не понятно blink.gif ,поэтому подожду может найдётся человек который мне поможет yes2.gif
Lapp
Цитата(AssAssIN'KO @ 1.10.2009 18:29) *
я читал эту тему.....мне не понятно blink.gif ,поэтому подожду может найдётся человек который мне поможет yes2.gif
Тогда спрашивай более конкретно, что именно неясно. Прождать ты можешь до бесконечности..
AssAssIN'KO
ну у меня получилось чтото вроде этого
program Nuton;
uses crt;
const
 Eps=0.0001;
var
a,b,c,z,f1,f2:real;
 begin
 clrscr;
 a:=0;
 b:=1;
 f1:=sqr(1-a)-cos(sqrt(1-a));
 f2:=(-1)/(2*(sqrt(1-a)))+(1/(2*(sqrt(1-a))))*(sin(sqrt(1-a)));
 if f1*f2>0 then c:=a
             else c:=b;
  repeat
  z:=((sqrt(1-c))-(cos(sqrt(1-a)))/((-1)/(2*(sqrt(1-a))))+(1/(2*(sqrt(1-a))))*(sin(sqrt(1-a))));
  c:=c-z;
  k:k+1;
  until abs f(z)<Eps;
  writeln c,k;
  readln
 end

Lapp
Цитата(AssAssIN'KO @ 5.10.2009 19:06) *
ну у меня получилось чтото вроде этого

Хотьбы довел до компилирующегося состояния..
Вот, лови, разбирайся..
const
  Eps=0.0001;
var
  k: integer;
  a,b,x,y,y1: double;

function f(x: double): double;
begin
  f:=Sqrt(1-x)-Cos(Sqrt(1-x))
end;

function f1(x: double): double;
var
  s: double;
begin
  s:=Sqrt(x);
  f1:=-0.5/s-0.5*Sin(s)/s
end;

begin
  a:=0;
  b:=1;
  x:=(a+b)/2;
  y:=f(x);
  while abs(y)>Eps do begin
    y:=f(x);
    x:=x-y/f1(x);
    k:=k+1
  end;
  writeln('root is: x=',x:5:8,'   iterarions: ',k);
  readln
end.
Гость
Цитата(Lapp @ 6.10.2009 3:33) *

Хотьбы довел до компилирующегося состояния..
Вот, лови, разбирайся..
const
  Eps=0.0001;
var
  k: integer;
  a,b,x,y,y1: double;

function f(x: double): double;
begin
  f:=Sqrt(1-x)-Cos(Sqrt(1-x))
end;

function f1(x: double): double;
var
  s: double;
begin
  s:=Sqrt(x);
  f1:=-0.5/s-0.5*Sin(s)/s
end;

begin
  a:=0;
  b:=1;
  x:=(a+b)/2;
  y:=f(x);
  while abs(y)>Eps do begin
    y:=f(x);
    x:=x-y/f1(x);
    k:=k+1
  end;
  writeln('root is: x=',x:5:8,'   iterarions: ',k);
  readln
end.


я попробовал сделать программу из этого,но почитав методички у меня получилось вот это.....
Program N20;
uses crt;
var
x,x1,e:real;
i:byte;
begin
textbackground(black);
repeat
clrscr;
textbackground(red);
window(5,5,40,15);
clrscr;
textcolor(white);
writeln('vvod x na promezutke [0;1)=');
readln(x);
until(x>=0)and(x<1);
i:=0;
e:=0.001;
x1:=Sqrt(1-x)-Cos(Sqrt(1-x));
while abs(x1-x)>e do
begin
x:=x1;
x1:=Sqrt(1-x)-Cos(Sqrt(1-x));
i:=i+1;
end;
textbackground(magenta);
window(40,20,70,30);
clrscr;
textcolor(yellow);
writeln('pechati x1=',x1:5:4);
writeln('kolichestvo interachii=',i);
readln;
end.
но он выдаёт 207 ошибку при вооде значений
AssAssIN'KO
сори,забыл код в тег поместить
AssAssIN'KO
точнее вот,выдаёт ошибку 207 Invalid floating operation

Program N20;
 uses crt;
 var
  x,x1,e:real;
  i:byte;
 begin
  textbackground(black);
 repeat
  clrscr;
  textbackground(red);
  window(5,5,40,15);
  clrscr;
  textcolor(white);
   writeln('vvod x na promezutke [0;1)=');
   readln(x);
  until(x>=0)and(x<1);
  i:=0;
  e:=0.001;
  x1:=Sqrt(1-x)-Cos(Sqrt(1-x))/(-1/2*sqrt(1-x)+sin(sqrt(1-x))*(-1/2)*(sqrt(1-x)));
  while abs(x1-x)>e do
                     begin
                      x:=x1;
                      x1:=Sqrt(1-x)-Cos(Sqrt(1-x))/(-1/2*sqrt(1-x)+sin(sqrt(1-x))*(-1/2)*(sqrt(1-x)));
                      i:=i+1;
                     end;
  textbackground(magenta);
  window(40,20,70,30);
  clrscr;
  textcolor(yellow);
   writeln('pechati x1=',x1:5:4);
   writeln('kolichestvo interachii=',i);
  readln;
 end.

Lapp
Цитата(AssAssIN'KO @ 6.10.2009 20:40) *
точнее вот,выдаёт ошибку 207 Invalid floating operation
Потому что производную надо правильно записывать. Чем тебе не понравились мои функции? Зачем все валить в одну кучу? Чтобы потом ошибки выискивать часами и сутками? Вы что ли функции не проходили?

Sqrt должен быть в знаменателе, а у тебя в числителе..
AssAssIN'KO
Цитата(Lapp @ 7.10.2009 3:51) *

Потому что производную надо правильно записывать. Чем тебе не понравились мои функции? Зачем все валить в одну кучу? Чтобы потом ошибки выискивать часами и сутками? Вы что ли функции не проходили?

Sqrt должен быть в знаменателе, а у тебя в числителе..

в том то и дело что не проходили,но я уже разобрался,сделал программу,всё работает,производную не совсем точно подсчитал,спасибо огромное тебе за помощь
Lapp
Цитата(AssAssIN'KO @ 8.10.2009 17:43) *
в том то и дело что не проходили,но я уже разобрался,сделал программу,всё работает,производную не совсем точно подсчитал,спасибо огромное тебе за помощь
Рад, что помогло.
Даже если не проходили, я бы советовал разбивать большие формулы на части, используя дополнительные переменные, по крайней мере на этапе отладки. Свое время дороже, чем машинное.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.