Лабораторная по информатике, Паскаль. Вроде все нормально у меня шло, но произошёл ступор. Прошу помощи у препода, а она даже не реагирует. А зачёт мне ой как нужен! Так что прошу Вас люди соображающие в этом деле: Помогите пожалуйста!
Лабораторная по информатике, Паскаль. Вроде все нормально у меня шло, но произошёл ступор. Прошу помощи у препода, а она даже не реагирует. А зачёт мне ой как нужен! Так что прошу Вас люди соображающие в этом деле: Помогите пожалуйста!
А до какого места шло нормально, а в каком ступорнулся?
1)Настройка цикла, границы, шаг
2)Требование вычислить логарифм разложением в ряд - это подпрограмма. Только такие итерационные вычисления обрывают не на 15-м или 150-м слагаемом, а по достижении достаточной точности.
3) Не обусловлено, куда девать вычисленное. Можно хранить в массиве, можно выдавать по мере получения. Первое грамотней.
4) Грамматика языка
Добавлено через 16 минут
Проверил формулу ряда. Она действительно работает, но точность (т.е. количество требуемых слагаемых) зависит от z. 15 слагаемых для z=3 дают ошибку обрыва в 12-м знаке, а для z=4 – уже в 9-м знаке.
Вычисление рядов лучше организовать рекуррентно, текущее слагаемое вычислять через предыдущее. Формулы арифметически легче.
Последний раз редактировалось геннадий; 27.12.2009 в 17:50. Причина: Добавлено сообщение
Бейсик (не Паскаль) на русском вперемешку с подготовительными выкладками. Интересно, что услышу завтра....
Последний раз редактировалось геннадий; 27.12.2009 в 22:41.
Хм... вся проблема что я в математике плохо шарю - вот весь казус...:( И оказывается нифига не нормально всё шло >_<
Ну вы даете... простейший сходящийся ряд - а вы точность оценить не можете (хотя по заданию она не нужна)
Точность этого ряда (разность 0,5ln(x)-(этот жутки ряд вычисленный до n членов)) равна (на интервале от 3 до 4, в первой оценке)
{(3/4)^(2n+1)}*9/(16*(2n+3)) она зависит действительно от x, но я взял максимум на интервале от 3 до 4
Так для 15 членов, разность получается не более чем 2,28*10^-6 т.е. действительно гарантированно до 5 знака
Знакочередующиеся ряды оценивать просто: погрешность обрыва не превышает первого из отброшенных членов. Этот ряд знакоположительный, для него метода оценки у меня и вправду нет. Научите - будет.
Я приводил не оценочную погрешность обрыва, а истинную.
Добавлено через 19 минут
Есть интегральный признак сходимости рядов.
Идея этого метода подходит и для оценки погрешности обрыва. Считаем интеграл от n до бесконечности - это и будет искомое. Что сейчас и попробую реализовать. Если получится - напишу.
Получилось - смотрите
Последний раз редактировалось геннадий; 30.12.2009 в 23:01. Причина: Добавлено сообщение
Вот, правда я где то ошибся, но метод понятен, перерешивать лень
Выше была оценка -в 6-м знаке; теперь - в 24-м. Где истина? И главное: рассмотрен частный случай? Общего метода нет?
Мои результаты (не мои 100-пудово, а один от екселя, второй от маткада) практически совпали...
Я почему так критически отношусь к задачкам по программированию? Мне попадались совершенно некорректные задачи. Не дружит кафедра вычтеха с математикой. Вот и проверяю, мало ли что они напишут...
Последний раз редактировалось геннадий; 30.12.2009 в 22:24.
Да, похоже что общего метода, пригодного для программирования нет. А для истина надо нормальный калькулятор, т.к. мой что то явно заглючил, т.к. (3/5)^33 явно не должен давать 10^-33 даже близко, видимо с калькуляторами я не оч. дружу
Отчего же? Нашелся.
Итак,
Ряд - последовательность частичных сумм
Ряд может быть сходящимся
Ряд сходящийся, если сходится соответствующий интеграл
График последовательности - цепочка точек.
Общий член ряда, претендующего на сходимость, стремится к нулю
Сумма ряда - площадь гистограммы (частокола столбиков), построенной на этой цепочке точек
Интеграл - площадь криволинейной трапеции. Эту криволинейную трапецию можно зажать между двумя гистограммами, что по теореме о двух милиционерах означает возможность замены точной площади гистограммы оценочной площадью криволинейной трапеции.
Интегралы вычислять - дело маткада.
Погрешность обрыва не превышает интеграла, левая граница которого соответствует первому из отброшенных.
График и гистограмму см выше файл "Ошибка обрыва"
Годится?
Добавлено через 17 минут
Это я не то написал: 33 и 24 перепутал
Оффтопик
Последний раз редактировалось геннадий; 30.12.2009 в 23:09. Причина: Добавлено сообщение
Может и сгодится с пользовательской т.з., но дело в том, что у вычисленного на компьютере интеграла тоже есть какая то неизвестная точность, т.к. вычисляется он компьютером. Она конечно мала, но неизвестна.(хотя не знаю, маткад сообщает о точности интеграла?)
У учитывая что компьютерное вычисление интеграла состоит скорее всего в том же суммировании значений подынтегральной функции, то ваш общий метод получился кратко таким:
- Как методом вычислить точность суммы 15 членов?
- Вычислить идущие дальше, после обрыва миллион членов, с большой точностью это даст ответ.
Последний раз редактировалось sda; 31.12.2009 в 11:20.
Не просто суммирование. Есть итерационные алгоритмы, сходящиеся к точному значению. Маткад использует все достижения математики, матанализа в частности, я ему верю: если он выдает что-то конкретное, это почти наверное правильно. Конечно, контрольные действия нужны.
Как оценить точность суммы 15 членов? В общем виде эта сумма - некоторая элементарная функция конечного числа аргументов. Есть формула, через производные связывающая их погрешности и погрешность на выходе. Значения производных при выгодных схемах вычислений малы, при невыгодных - велики. Но и без тщательных вычислений можно сказать, что погрешность накапливается пропорционально корню из количества действий. 15 членов = 100 действий —> погрешность вырастет на порядок. Две лишних цифры в вычислениях гарантируют достаточную точность.
Как вычислить бесконечный ряд? Для геометрической прогрессии простая формула есть. Если ряд сходится, что следует опознать по известному алгоритму, то для него и метод вычисления известен (Маткаду). Вычислив, получим , в нашем частном случае, погрешность обрыва для конечного числа слагаемых ряда.
Т. е. имеются алгоритмы для вычисления с наперед заданной погрешностью (напомню, одно из свойств алгоритма - конечное количество операций).
Когда Маткад не выдает результат, то пишет красным сообщения о причине. Они чаще непонятны (на американском ведь языке!). Тут уж надо думать самому и искать пути обхода.
И еще момент интересный. В программе есть команда float n, после которой выдается n знаков за запятой (до 250; число похоже на 2^8 - 6, кажется, под n выделен 1 байт). Надо полагать, все они верные, иначе не стоило огород городить. Это значит, что в программе реализована процедура вычислений, когда одно число занимает не одну и не две ячейки памяти, а сколько требуется по предвычислению. Вот это да!
Последний раз редактировалось геннадий; 31.12.2009 в 17:23.
Последний раз редактировалось геннадий; 03.01.2010 в 15:52.
JAMIS (04.01.2010)
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)