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
Молодой специалист
Offline
|
|
« Ответ #2 : 18-03-2009 05:18 » |
|
будет всегда выполнятся всего лишь один раз результат всегда равен 0,02 и при умножении даст 0,08 нет времени искать этот алгоритм, но если Вы расскажете его здесь (или дадите ссылку), то можно будет написать программу
|
|
« Последнее редактирование: 18-03-2009 05:33 от HandKot »
|
Записан
|
I Have Nine Lives You Have One Only THINK!
|
|
|
Sands
Помогающий
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
Молодой специалист
Offline
|
|
« Ответ #5 : 20-03-2009 05:30 » |
|
а не очень понял какой именно алгоритм от меня требуется вот этот Используя численное интегрирование , найти приближённое значение ПИ И как именно учесть выход из цикла подскажите пожалуйста почитатть про цклы Do ... Loop и посмотреть на условие в Вашем коде Loop Until i <= 50
|
|
|
Записан
|
I Have Nine Lives You Have One Only THINK!
|
|
|
Pepe
Гость
|
|
« Ответ #6 : 24-03-2009 18:09 » |
|
всё работает , но получается не пи а 3,17 что делать ? при уменьшении i до 47 3,1399 , фг тут поймёшь что да как . И как погрешность задать сюда может знает кто что то примерно 0,0001
|
|
|
Записан
|
|
|
|
Вад
|
|
« Ответ #7 : 24-03-2009 18:50 » |
|
Надо полагать, требуется увеличивать число итераций. Ну а чтобы достигнуть нужной погрешности - нужно увеличивать число итераций, пока результат не влезет в рамки погрешности.
|
|
|
Записан
|
|
|
|
Pepe
Гость
|
|
« Ответ #8 : 25-03-2009 17:09 » |
|
а как саму иттерцию задать через шаги для этого задания ? и как прописать код для задания погрешности помогите пожалуйста
|
|
|
Записан
|
|
|
|
Вад
|
|
« Ответ #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++ »
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #11 : 12-05-2009 07:31 » |
|
Pepe, а при чём тут 2D анимация ?
|
|
|
Записан
|
|
|
|
Pepe
Гость
|
|
« Ответ #12 : 12-05-2009 16:43 » |
|
это вообще к другому заданию , смотри дана функция и нужно найти максимум и минимум и всё это должно быть анимированно , как не подскажешь 7
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #13 : 13-05-2009 06:50 » |
|
я не знаю, как анимировать процесс нахождения экстремумов разве что показать в виде стального шарика, скатывающегося вниз или воздушного, взлетающего вверх
|
|
« Последнее редактирование: 13-05-2009 06:53 от Алексей1153++ »
|
Записан
|
|
|
|
PaUk
Новенький
Offline
|
|
« Ответ #14 : 10-04-2011 15:38 » |
|
Народ...Какой же в итоге получился код для программы?
|
|
|
Записан
|
|
|
|
|