Помощь - Поиск - Пользователи - Календарь
Полная версия: Вычисление нелинейных уравнений
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Neon6868
Задание: Вычислить корень нелинейного уравнения на отрезке [a;b] с погрешностями 0,001 ; 0,0001 ; 0,00001 ; 0,000001 методом хорд.

Программа находит корень, но он независимо от точности всегда один и тот же. Подскажите плиз что не так! blink.gif

Программа:
Код

Program Uravnenie;
  label M1,M2;
  var
  xi,xi1,a,b,e1,e2,fa,fb,f2a,fxi,fxi1:real;
Begin
  writeln;
  write('Vvedite znachenie a=');
  readln(a);
  write('Vvedite znachenie b=');
  readln(b);
  write('Vvedite tochnost e1=');
  readln(e1);
  write('Vvedite tochnost e2=');
  readln(e2);
  xi:=0;
  xi1:=0;
  fa:=a*a*a+5*sqr(a)-0.1;
  fb:=b*b*b+5*sqr(b)-0.1;
  f2a:=6*a+10;
  if (fa*fb>0) then
    begin
      writeln('Net kornei!');
      exit;
    end;
  if (fa*f2a>0) then
    begin
      xi:=b;
   M1:fxi:=xi*xi*xi+5*sqr(xi)-0.1;
      xi1:=xi-((xi-a)*fxi)/(fxi-fa);
      fxi1:=xi1*xi1*xi1+5*sqr(xi1)-0.1;
      if ((abs(xi-xi1)>e1) and (abs(fxi1)>e2)) then
        begin
          xi:=xi1;
          goto M1;
        end
      else
        begin
          writeln('Koren uravneniya x=',xi1:1:11);
          fxi1:=xi1*xi1*xi1+5*sqr(xi1)-0.1;
          writeln('Znachenie funkcii f(x)=',fxi1:1:11);
        end;
    end
   else
     begin
       xi:=a;
    M2:fxi:=xi*xi*xi+5*sqr(xi)-0.1;
       xi1:=xi-((b-xi)*fxi)/(fb-fxi);
       if ((abs(xi-xi1)>e1) and (abs(fxi1)>e2)) then
         begin
           xi:=xi1;
           goto M2;
         end
       else
         begin
           writeln('Koren uravneniya x=',xi1:1:11);
           fxi1:=xi1*xi1*xi1+5*sqr(xi1)-0.1;
           writeln('Znachenie funkcii f(x)=',fxi1:1:11);
         end;
     end;
End.
volvo
Ух ты... С метками и с GoTo blink.gif

Вот же есть решение: Численные методы решения уравнений
Neon6868
Цитата(volvo @ 22.09.2007 20:58) *

Ух ты... С метками и с GoTo blink.gif

Вот же есть решение: Численные методы решения уравнений


Мне просто надо составить программу по алгоритму. Алгоритм прикреплён ниже. Я программу по нему составил, но всегда получается одно и то же значение. wacko.gif
volvo
Ну, судя по всему, ошибка в том, что ты в одной ветке вычисляешь
      fxi1:=xi1*xi1*xi1+5*sqr(xi1)-0.1;

, а в другой - нет?
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.