2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Метод прямого перебора
Сообщение09.03.2007, 11:51 
Аватара пользователя


22/08/06
756
Совсем недавно на занятиях по информатике мы начали проходить численные методы, и по такому случаю нам дали контрольную, чтобы проверить знания подпрограмм и подпрограмм-функций. Первая проблема у меня была с тем, чтобы понять, что из себя представляет решение уравнения вообще. Когда я наконец понял, мне понадобилось написать отсортировку чисел, но как поймать нужное число в бесконтрольном потоке вычислений - я не знаю. Пробывал уже разные методы сортировки, но везде получался какой-то бред. Помогите пожалуйста, хоть чем-нибудь. Плохо то, что моим однокурсникам дали контрольные, где указывается сегмент существования корня. У меня же его нет и мне нужно найти иголку в стоге сена. Итак

Методом прямого перебора найти с заданной с монитора точностью $$\phi корень уравнения $$ch{x}+cos{x}-3=0$$...

Мне нужно понять алгоритм построения решения.

 Профиль  
                  
 
 
Сообщение09.03.2007, 16:12 
Заслуженный участник


15/05/05
3445
USA
Следствие Вашего уравнения: значение ch(x) для возможного корня лежит в интервале [2, 4].

P.S. IMHO это скорее вычислительная математика, чем CS. Хоть предмет и называется "Информатика".

 Профиль  
                  
 
 
Сообщение09.03.2007, 17:22 
Аватара пользователя


22/08/06
756
Yuri Gendelman, о-о-о, спасибо большое!!!! Вы мне вообще очень помогли. А то я тут сижу и 2 дня создаю вечный двигатель. Заи... э-э-э... устал =)

Может быть я и сам бы догадался, но учусь на инженерном и только один раз встретился с гиперболическим косинусом. На лекции по математике. Более никогда с ним дел не имел ((( Соответственно, плохо представляю, что это такое.

 Профиль  
                  
 
 
Сообщение09.03.2007, 19:21 
Аватара пользователя


21/10/05
100
Одинцово
Запускаете Excel и строите таблицы для $$ch{x}$$ и $$3-cos{x}$$ и для их разницы. И наблюдаете как работает алгоритм. Там где эта разница меняет знак и лежит корень.
Можете нарисовать графики - еще понятнее будет, что такое кошинус и с чем его используют.

 Профиль  
                  
 
 
Сообщение13.04.2007, 23:24 
Аватара пользователя


22/08/06
756
Код:
     subroutine gc(chz,z)
     chz=0.5*(exp(z)+exp(-z))
     return
     end

     function f(x)
     call gc(chx,x)
     f=chx+cos(x)-3
     return
     end

     program liex9
     read(*,*)h,phi
     n=0
     y=f(h)
     if (y.gt.0) then
  10 continue
      n=n+1
      y=f(n*h)
      if (y.gt.0) then       
       write(*,*)y
       go to 10
      else if (y.lt.0) then
       a=f(h*(n-1))
       b=f(h*n)
       c=h*(n-1)
       d=(h*n)
       write(*,*)y
       go to 100
      endif
     else if (y.lt.0) then
  20  continue
      n=n+1
      y=f(n*h)
      if (y.lt.0) then
       write(*,*)y
       go to 20
      else if (y.gt.0) then
       a=f(h*(n-1))
       b=f(h*n)
       c=h*(n-1)
       d=(h*n)
       write(*,*)y
       go to 100
      end if
     end if
100 continue
     write(*,*)c,d
     i=(d+c)/phi
     g=f(c)
     DO 1 M=0,i
        X=c+M*phi
        P=F(X)
      IF((P.LE.0.AND.G.GE.0).OR.(P.GE.0.AND.G.LE.0))then
        WRITE(*,4)X,p
   4    FORMAT(2X,' kopen =',F10.7,F10.7)
      END IF
      G=P
   1 CONTINUE
     read(*,*)
     end

 Профиль  
                  
 
 
Сообщение13.04.2007, 23:37 
Аватара пользователя


21/10/05
100
Одинцово
Это кто ж так вас учит?
оператор go to :(

Лет 15 его уже нигде не видел

 Профиль  
                  
 
 
Сообщение13.04.2007, 23:45 
Аватара пользователя


22/08/06
756
sexstant, вот так =((( У нас практика по программированию 1 пара в неделю... Что поделаешь, инженерная специальность.

Добавлено спустя 1 минуту 21 секунду:

Я конечно понимаю, что алгоритм очень плохой, но делать нечего, пока не придумал другие варианты, а этот как-никак, а работает.

 Профиль  
                  
 
 
Сообщение14.04.2007, 03:06 
Заслуженный участник
Аватара пользователя


17/10/05
3709
:evil:
sexstant писал(а):
Это кто ж так вас учит?
оператор go to

Вопрос неправильный. Правильный вопрос: это где ж еще учат фортрану?! Вопрос, впрочем, риторический.

 Профиль  
                  
 
 
Сообщение14.04.2007, 03:50 
Аватара пользователя


21/10/05
100
Одинцово
Ничего плохого про Фортран не скажу. Вот только оператор GOTO в любом языке давно считается извращением.
Теперь о "методе прямого перебора". Такого не знаю. Наверное речь идет о делении отрезка пополам или о методе бисекции.

Вот например такой алгоритм из книги:
С.А.Абрамов, Е.В.Зима Начала информатики
Код:
program delp(input,output);
   var a,b,c,eps,fa,fc :real;
begin
   a:= ;
   b:= ;
   eps:= ;
   fa:=fun(a);
   while b-a >= eps do begin
      c:=(a+b)/2;
      fc:=fun(c);
      if fa*fc<=0 then
         b:=c;
      else begin
         a:=c;
         fa:=fc
      end;
   end;
   write(a);
end.


Добавлено спустя 30 минут 47 секунд:

Посмотрел вашу программу :(
Несколько лишних циклов. Ошибки и в самом алгоритме и в переписывании команд алгоритма на язык Фортран.
Обращений к подпрограмме порядка 6000 (для а=2, в=4 и для точности 0.001) вместо 9 в приведенном алгоритме.
Лишняя печать: 2000 строк проти 1 строки.
Так нельзя

 Профиль  
                  
 
 
Сообщение14.04.2007, 06:20 
Заслуженный участник
Аватара пользователя


17/10/05
3709
:evil:
sexstant писал(а):
Теперь о "методе прямого перебора". Такого не знаю. Наверное речь идет о делении отрезка пополам или о методе бисекции.

Думаю, что нет. Что имеется в виду просто прохождение по очереди всех точек отрезка с каким-то шагом. Деление пополам работает только если функция имеет разные по знаку значения на концах отрезка (что не всегда).

sexstant писал(а):
Вот только оператор GOTO в любом языке давно считается извращением.

Так же, как и Фортран. Впрочем, что естественно, то не грешно. ( А в Фортране-2 как-то без goto было туго.)

Большой недостаток старых языков (вроде Фортрана), что они не позволяют учить программировать по-современному. Отягощающим вину обстоятельством является то, что учащиеся читают старые программы, и усваивают из них устаревшие подходы и стереотипы.

 Профиль  
                  
 
 
Сообщение14.04.2007, 09:11 
Аватара пользователя


21/10/05
100
Одинцово
незваный гость писал(а):
:evil:
Большой недостаток старых языков (вроде Фортрана), что они не позволяют учить программировать по-современному.


И не только старых языков, но и так называемых "новых" - Микрософт Бейсик и Си
Как считает Виртовская школа - чума и холера современного преподавания программирования

 Профиль  
                  
 
 
Сообщение14.04.2007, 09:32 
Аватара пользователя


22/08/06
756
sexstant, что это у вас там за версия языка такая?

Да, спасибо, что на ошибки указали, попробую исправить.

 Профиль  
                  
 
 
Сообщение14.04.2007, 09:54 
Аватара пользователя


21/10/05
100
Одинцово
Это Паскаль.
Некоторые считают, что на нем хорошо алгоритмы описывать.
Я думаю вы легко переведете это все на Фортран
fun(x) - это ваша function f(x)

Посоветую 9 главу Press W.H., Teukolsky S.A., Vetterling W.T. Numerical recipes in FORTRAN77

см. http://lib.mexmat.ru/books/825
или http://www.numerical-recipes.com/nronline_switcher.php

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 13 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group