8 / 8 / 2
Регистрация: 20.02.2009
Сообщений: 139
|
||||||
1 | ||||||
Расчет Величины Гамма по закону распределения СВ Фишера24.04.2009, 23:35. Показов 3910. Ответов 12
Метки нет (Все метки)
Добрый день.
Я ниже создавал тему про нахождение дробной части числа. Это мне нужно было для закона распределения СВ Фишера. Я уже где-то неделю немогу решить во такую проблему: Выполненные условия: -Есть СВ распределенная по закону Фишера (распределение сделано правильно и соответствует почти теории) -Есть такая рассчитываемая величина, называемая частотой попадание в заданные интервалы (Расчитывается правильно и их сумма равна 1); кол.интервалов задаются (изначально > 10). -Проблема: 1. Рассчитана частота попаданий (практическая). Чтобы ее проверить нужно сделать почти такуюжу, но теоретическую. -Эта величина (ЧастТеоретическая), рассчитывается по формуле: Параметры К1 и К2 задаются пользователем. С формулой проблем нет при условии что К1 и К2 кратны двум. Проблема в следующем: Вот те буковки Г и есть Гамма которую я не могу правильно рассчитать при условии что К1 и К2 не кратны двум. В коде я решил рассчитать Гаммы(3 штуки нужно) так:
Формула для расчета фактариала, если не крато двум следующая (вот с ней то у меня проблемы походу): -Допустим К1=3, К2=5, то Г1(3/2) = Г(1+1/2)...Г(a+1/2)=, а двойной фактариал (2a-1)!! равен - 1*3*5*7......(2a-1) Вот такая проблема. Если, кто-то с этим уже сталкивался, помогите пжста. Спасибо.
0
|
24.04.2009, 23:35 | |
Ответы с готовыми решениями:
12
Моделирование генеральной совокупности случайной величины по заданному закону распределения Проверить решение:Составить ряд распределения случайной величины Х-Y, если X определен по биномиальному закону Выборка распределения Фишера Гамма-распределение экспериментальной величины |
11 / 11 / 1
Регистрация: 20.04.2009
Сообщений: 26
|
||||||||||||||||
25.04.2009, 02:25 | 2 | |||||||||||||||
С такой задачей не сталкивался, но...
K1 и K2 - int? Если да, то arG_a[0] = (K1 + K2) / 2 - всегда целое число. Надо:
Добавлено через 1 час 21 минуту 24 секунды Ещё подозрительно выглядит вычисление двойного факториала.
1
|
8 / 8 / 2
Регистрация: 20.02.2009
Сообщений: 139
|
||||||
25.04.2009, 23:54 [ТС] | 3 | |||||
К1 и К2 я выставил float (они еще кое-где нужны). Дело в том, что если Какой-то параметр не кратен то условия как раз выполняется и он считает по двойному фактариалу его, НО значение очень и очень значительно не сходятся у нужным и их сумма (все теоретические частоты) не равна 1 (а должна).
А это
Кстати, спасибо, что подсказали, как альтернативно выставлять шаг. Очень полезно.
0
|
11 / 11 / 1
Регистрация: 20.04.2009
Сообщений: 26
|
||||||
26.04.2009, 02:27 | 4 | |||||
Аналоги, конечно, но твой код выполняется в 2 раза больше раз. От 1 до 2*а ты идешь с шагом 1, а я - с шагом 2.
Добавлено через 12 минут 26 секунд Просто привычка избавляться от скобок... Можно еще сократить/запутать код:
1
|
8 / 8 / 2
Регистрация: 20.02.2009
Сообщений: 139
|
|||||||||||
26.04.2009, 17:23 [ТС] | 5 | ||||||||||
Я думаю остановлюсь вот на этом варианте записи
Я хотел бы еще спросить кое о чем. Вот у меня есть рассчитываемые величины:
-Величины MatOT_F, DispT_F, SkoT_F стоят как (double). Добавлено через 2 часа 18 минут 17 секунд ---забыл сказать. Для рассчета всего этого и еще 3-х функций которые вызываются в главной форме выделил отдельный класс с переменными, функциями и расчетами. Конвертирую я К1 и К2 в главной форме где они и вводятся. В классе оня являются конвентируемыми величинами (float). Вот, если это конечно добавлио ясности...
0
|
11 / 11 / 1
Регистрация: 20.04.2009
Сообщений: 26
|
||||||||||||||||
26.04.2009, 18:51 | 6 | |||||||||||||||
Если ты про такую конструкцию:
А здесь:
Правило очень простое: если в выражении есть хотя бы одна величина с плавающей точкой, то и результат выражения будет с плавающей точкой. Если все величины - целые, то и результат целый.
1
|
8 / 8 / 2
Регистрация: 20.02.2009
Сообщений: 139
|
|
27.04.2009, 00:33 [ТС] | 7 |
KoppeKTop
Да, я конвертирую К1 и К2 из (string) в (int). Спасибо, за разъяснения. Теперь все сделаю, как надо, ток с этим фактариалом всеравно запарка. Считается верно все, но результат совсем не тот который нужен ( Добавлено через 1 час 8 минут 14 секунд Вот теперь я думаю, создавать новую тему на вопрос такой: Вот эта СВ Фишера рассчитывается довольно быстро, если параметры К1 и К2 меньше 10 и нужно рассчитать < 100 СВ. А вот, если значения допустим повысить до : 3, 5, 1000 (К1,K2, СВ); то мой ПК рассчитывает их довольно долго (1 прогон - ~25сек-....), а с большим К1 и К2 и того вдвойне дольше . Это СВ ведь непрерывная, т.е мне ее нужно постоянно считать будет (думаю потом таймер пихну). В данный момент мне нужо помощь с быстродействием, а то это не дело ждать по 30сек, если повезет.
0
|
11 / 11 / 1
Регистрация: 20.04.2009
Сообщений: 26
|
|
27.04.2009, 15:06 | 8 |
Попробуй 1 раз посчитать на бумажке и проследить в пошаговом режиме за ходом вычислений. Быстро вычислишь ошибку.
Тут нужно искать слабые места в алгоритме вычислений. Оптимизация - дело большое.
0
|
8 / 8 / 2
Регистрация: 20.02.2009
Сообщений: 139
|
|
27.04.2009, 22:20 [ТС] | 9 |
Делал так уже и не раз, всеравно косяк, как я тока уже не крутил вычисления в коде, все бестолку.
Оптимизация конечно хорошо, но как мне найти узкое место? Можете дать пару советов?
0
|
11 / 11 / 1
Регистрация: 20.04.2009
Сообщений: 26
|
|
27.04.2009, 23:39 | 10 |
Тут несколько путей:
1. Воспользоваться профилировщиком - программа выдаст подробный результат и можно будет увидеть где она проводит больше всего времени. 2. Воспользоваться здравым смыслом. Тут нужно проверить: - алгоритм. Оптимизированный алгоритм, взятый из проверенного учебника может сильно прибавить производительности. Чаще всего в учебниках алгоритмы привдятся на более других языках типа Fortran, Basic, псевдокода и т.д., но если понимаешь, что такое for, if и =, то проблем не будет; - циклы. Все что выполняется 1000 раз должно привлекать наибольшее внимание. Если что-то можно вынести за пределы цикла (инициализация, создание переменных, предварительные вычисления и т.д.) - это должно быть вынесено; - операции с медленными интерфейсами. Чтение/запись в различные интерфейсы могут занимать значительное время. Например, вывод в файл или на видео. Если такие операции выполняются в цикле - это 100% тормоз. Количество таких операций должно быть минимально и обязательно вынесено из циклов; - операции с памятью. Это уже более низкоуровневая штука. Выделение памяти + инициализация - очень медленная операция. Если какая-нить процедура вызывается по 100500 раз и в ней каждый раз выделяется массив из большого числа элементов - на это уходит много времени. В таких случаях лучше передавать в функцию один раз созданный массив в качестве аргумента. Тогда он не будет выделяться 100500 раз. Вот, если вкратце, то основные направления такие.
1
|
8 / 8 / 2
Регистрация: 20.02.2009
Сообщений: 139
|
|
28.04.2009, 01:08 [ТС] | 11 |
Понятно. Проглядел еще раз все вычисления, вроде ничего особо лишнего. Запустил Анализатор, он выдал 204 предупреждения. Почти ни одно я не понимаю. Единственное, что я понял, это то, что половина этого всего относится к созданию графиков (приминил методы из книги), остальное он говорит, что что-то с переменными.
Вот, пример часто встречающийся: ---Warning 131 CA1709 : Microsoft.Naming : Correct the casing of member name '_sumXi'. ---Warning 132 CA1707 : Microsoft.Naming : Remove all underscores from member '_sumXi'. ---Warning 173 CA1817 : Microsoft.Performance : Within Form1.Result():Void, consider getting the value of 'DataGridViewRowCollection.get_Item(Int32)ataGridViewRow' once and caching it inside a local variable before entering the loop. Кто-нить может сказать, что это все значит? Спасибо.
0
|
11 / 11 / 1
Регистрация: 20.04.2009
Сообщений: 26
|
||||||||||||||||||||||||||
28.04.2009, 12:49 | 12 | |||||||||||||||||||||||||
Существует конвенция имен в C# и её следует придерживаться. Например, типы значений и имена методов должны называться с заглавной буквы и записываться так:
Названия переменных типов должны начинаться со строчной буквы и также записаны в "верблюжьем" стиле.
А вот здесь похоже на то, о чем я и говорил. Ты в ЦИКЛЕ обращаешься к данным таблицы на форме (раз студия ругается, то скорее всего даже к одной и той же ячейке...). Это долго. Необходимо вынести обращение к таблице за пределы цикла и сохранить значение в переменной. Типичный пример плохого с точки зрения произваодительности кода (пишу на С, ибо лень придумывать пример на C#, но суть должна быть ясна):
0
|
8 / 8 / 2
Регистрация: 20.02.2009
Сообщений: 139
|
||||||
28.04.2009, 17:33 [ТС] | 13 | |||||
Что-то совсем не айс. Ну вот пример из кода на тему DataGridView:
fF - fFisher, класс со всеми переменными для вывода. к fFisher'у обращаемся один раз на каждый раз составления таблицы. А вот с подчеркиваниями мне гораздо удобнее читать свой же код чтобы искать ошибку.
0
|
28.04.2009, 17:33 | |
28.04.2009, 17:33 | |
Помогаю со студенческими работами здесь
13
Посчитать количество Фишера для экспоненциального распределения, с заданной плотностью Моделирование гамма распределения в MATHCAD. Нахождение параметров гамма-распределения Моделирование случайной величины с гамма распределением Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи | |||||
Аутентификация на сайте с помощью формы
bytestream 21.01.2025
В современном цифровом мире безопасная аутентификация становится краеугольным камнем защиты веб-приложений и пользовательских данных. Каждый день миллионы людей используют различные онлайн-сервисы,. . .
|
Как получить индекс в цикле for в Python
bytestream 21.01.2025
При работе с коллекциями данных в Python часто возникает необходимость не только получить доступ к элементам последовательности, но и знать их позицию в процессе итерации. Индексация в циклах. . .
|
Как определить адрес, из которого локальный репозиторий Git был клонирован
bytestream 21.01.2025
В современной разработке программного обеспечения система контроля версий Git стала неотъемлемой частью рабочего процесса. При работе с Git разработчики часто сталкиваются с необходимостью. . .
|
Какая разница между операторами == и === в сравнениях в JavaScript
bytestream 21.01.2025
В мире веб-разработки JavaScript занимает особое место как динамический язык программирования, предоставляющий разработчикам широкий набор инструментов для создания интерактивных веб-приложений. . . .
|
Из чего и как собрать свой домашний кинотеатр
bt_guru 21.01.2025
Создание домашнего кинотеатра: от идеи до реализации
В современном мире домашний кинотеатр стал неотъемлемой частью комфортного жилого пространства, предоставляя возможность наслаждаться. . .
|
Ошибки стиральных машин
bt_guru 21.01.2025
Современные стиральные машины представляют собой сложные электронные устройства, оснащенные множеством датчиков и систем контроля. Они способны самостоятельно определять вес загруженного белья,. . .
|
Копирование (маппинг) объектов в JavaScript
bytestream 21.01.2025
В современной разработке программного обеспечения копирование объектов представляет собой фундаментальную операцию, которая требует особого внимания и понимания. Маппинг объектов в JavaScript – это. . .
|
Как работать с Apache Kafka в C# .NET
bytestream 21.01.2025
Apache Kafka представляет собой распределенную платформу потоковой передачи данных, которая произвела революцию в области обработки больших объемов информации в реальном времени. Эта система,. . .
|
Как использовать RabbitMQ в C# .NET
bytestream 21.01.2025
RabbitMQ представляет собой мощный брокер сообщений, который эффективно решает эту задачу, обеспечивая надежную передачу данных между множеством приложений. Этот инструмент реализует протокол AMQP. . .
|
Как объединить последние коммиты в Git
bytestream 21.01.2025
В мире разработки программного обеспечения система контроля версий Git стала незаменимым инструментом для управления исходным кодом. Одной из наиболее полезных, но порой сложных для освоения функций. . .
|
Как запушить новую локальную ветку (branch) в удалённый репозиторий Git и отслеживать её
bytestream 21.01.2025
В современной разработке программного обеспечения система контроля версий Git стала неотъемлемым инструментом для эффективного управления кодом и организации командной работы. Одной из ключевых. . .
|
Как создать директорию и все родительские директории, указанные в пути, с помощью Python
bytestream 21.01.2025
Python предоставляет мощные инструменты для работы с файловой системой через встроенные модули os и pathlib, которые значительно упрощают процесс манипуляции директориями. Эти модули содержат. . .
|