Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Метод Итерации  (Прочитано 18154 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Pepe
Гость
« : 17-03-2009 20:40 » 

в общем име такую задачку : Используя численное интегрирование , найти приближённое значение ПИ . Для этого вычислить площадь четверти единичного круга  , а затем увеличить её  в 4 раза . В алгоритме  прямоугольников считать n =50 ( как  начальную ) . Четверть окружности - первый квадрант декартовой плоскости , формула кривой корень из 1 минус X квадрат.
  вот что прописал , но у меня в написанной программе получается 0,08 , а должно получаться 3,14 . Кто может что подсказать или направить буду очень признателен .
                 
Option Explicit

Dim n As Double
Dim s As Double
Dim i As Integer

Private Sub Cmd1_Click()
      i = 0
      Calculate
End Sub

Private Sub Cmd2_Click()
Lbl1 = ""
End Sub


Sub Calculate()
    n = 50
    s = 0
    Do
        Call f
        i = i + 1
    Loop Until i <= 50
    Lbl1 = s * 4
End Sub
Function f()
 s = (1 / n) * Sqr(1 - ((i / n) ^ 2))
End Function




Записан
Pepe
Гость
« Ответ #1 : 17-03-2009 20:42 » 

и ещё как можно кодами усложнить написанное чтобы процедура в процедуре была . И незнаетели как погрешность здесь ещё задать можно .
Записан
HandKot
Молодой специалист

ru
Offline Offline

« Ответ #2 : 18-03-2009 05:18 » 

Код:
 Loop Until i <= 50
будет всегда выполнятся всего лишь один раз
результат всегда равен 0,02 и при умножении даст 0,08


нет времени искать этот алгоритм, но если Вы расскажете его здесь (или дадите ссылку), то можно будет написать программу
« Последнее редактирование: 18-03-2009 05:33 от HandKot » Записан

I Have Nine Lives You Have One Only
THINK!
Sands
Помогающий

ua
Offline Offline

« Ответ #3 : 18-03-2009 08:20 » 

Pepe, Я, конечно, не силен в вижуал бейсике, но по-моему тут
Код:
s = (1 / n) * Sqr(1 - ((i / n) ^ 2))

должно быть так:
Код:
s = s + (1 / n) * Sqr(1 - ((i / n) ^ 2))
+ учесть сказанное про условие выхода из цикла
Записан
Pepe
Гость
« Ответ #4 : 18-03-2009 14:32 » 

а не очень понял какой именно алгоритм от меня требуется . И как именно учесть выход из цикла подскажите пожалуйста .
Записан
HandKot
Молодой специалист

ru
Offline Offline

« Ответ #5 : 20-03-2009 05:30 » 

Цитата: Pepe
а не очень понял какой именно алгоритм от меня требуется
вот этот
Цитата
Используя численное интегрирование , найти приближённое значение ПИ



Цитата: Pepe
И как именно учесть выход из цикла подскажите пожалуйста

почитатть про цклы Do ... Loop
и посмотреть на условие в Вашем коде Loop Until i <= 50
Записан

I Have Nine Lives You Have One Only
THINK!
Pepe
Гость
« Ответ #6 : 24-03-2009 18:09 » new

всё работает , но получается не пи а 3,17 что делать ? при уменьшении i до 47 3,1399 , фг тут поймёшь что да как . И как погрешность задать сюда может знает кто что то примерно 0,0001
Записан
Вад
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #7 : 24-03-2009 18:50 » 

Надо полагать, требуется увеличивать число итераций. Ну а чтобы достигнуть нужной погрешности - нужно увеличивать число итераций, пока результат не влезет в рамки погрешности.
Записан
Pepe
Гость
« Ответ #8 : 25-03-2009 17:09 » 

а как саму иттерцию задать через шаги для этого задания ? и как прописать код для задания погрешности помогите пожалуйста
Записан
Вад
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #9 : 25-03-2009 17:35 » 

Ну, во-первых, нужно сделать, чтобы цикл, в котором накапливается сумма, зависел-таки от n. Хотя бы так:
Код:
Sub Calculate()
    n = 50
    s = 0
    Do
        Call f
        i = i + 1
    Loop Until i <= n
    Lbl1 = s * 4
End Sub
Ну а потом добавить ещё один цикл, в котором будут производиться все вычисления. И где n будет постепенно увеличиваться, а условием выхода будет проверка, достаточно ли близко расчётная сумма к тому результату, который должен быть (то есть, собственно к числу пи).
« Последнее редактирование: 25-03-2009 17:37 от Вад » Записан
Pepe
Гость
« Ответ #10 : 09-04-2009 19:12 » 

в общем всё это неправильно , помогите сделать правильно , нужно не математически решить а логически , как-то типо 50 прямоуольничков пребирались и считались с заданной точностью и с уменьшением шага , чёт не допру как это сделать , может кто знает ?

в общем прогу всю пределал всё супер теперь . А кстати не кто не  знает как найти экстремумы функции  в 2 д анимации .
« Последнее редактирование: 12-05-2009 07:30 от Алексей1153++ » Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #11 : 12-05-2009 07:31 » 

Pepe, а при чём тут 2D анимация ? Улыбаюсь
Записан

Pepe
Гость
« Ответ #12 : 12-05-2009 16:43 » 

это вообще к другому заданию , смотри дана функция и нужно найти максимум и минимум и всё это должно быть анимированно , как не подскажешь 7
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #13 : 13-05-2009 06:50 » 

я не знаю, как анимировать процесс нахождения экстремумов Улыбаюсь

разве что показать в виде стального шарика, скатывающегося вниз или воздушного, взлетающего вверх
« Последнее редактирование: 13-05-2009 06:53 от Алексей1153++ » Записан

PaUk
Новенький

ru
Offline Offline

« Ответ #14 : 10-04-2011 15:38 » 

Народ...Какой же в итоге получился код для программы?
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines