Партнерка на США и Канаду по недвижимости, выплаты в крипто

  • 30% recurring commission
  • Выплаты в USDT
  • Вывод каждую неделю
  • Комиссия до 5 лет за каждого referral

Это далеко не единственный способ применения анонимных объектов.

Примеры программ

Далее рассматриваются некоторые программы, в которых кроме главного класса программы (класса, содержащего метод mаin()) описываются и используются другие классы.

Схема Бернулли

Схемой Бернулли называется серия независимых испытаний, в каждом из которых может быть только один из двух случайных результатов - их принято называть успехом и неудачей. Есть два важных параметра, которые определяют все прочие свойства серии опытов: это вероятность успеха в одном опыте р и количество опытов в серии п. Величина q = 1-р называется вероятностью неудачи в одном опыте. Достаточно часто на практике используется случайная величина (назовем ее о), которая определяется как число успехов в схеме Бернулли. Математическое ожидание этой случайной величины Мо=nр, а дисперсия равна = npq. Среднее значение для количества успехов в схеме Бернулли является оценкой математического ожидания, поэтому для схемы с большим количеством испытаний с высокой вероятностью количество успехов в схеме Бернулли близко к математическому ожиданию. Корень квадратный из дисперсии определяет характерную область разброса количества успехов по отношению к математическому ожиданию.

В листинге 8 приведен код про граммы, в которой для реализации схемы Бернулли создается специальный класс.

Листинг 8. Схема Бернулли

class Bernoulli{

// Количество опытов (испытаний) в схеме:

private int n;

// Вероятность успеха:

private double р;

// Результат испытаний:

НЕ нашли? Не то? Что вы ищете?

private boolean[] test;

// Метод для определения параметров схемы:

public void setAll(int n. double р){

if(n>=0) this. n=n;

else n=0;

if(p>=0&&p<=1) this. p=p;

else this. p=0;

test=new boolean[n];

for(int i=0;i<n;i++){

if(Math. random()<=p) test[i]=true;

else test[i]=false;}

}

// Подсчет количества успехов:

private int getVal(){

int count, i;

for(i=0,count=0;i<n;i++) if(test[i]) count++;

return count;}

// Отображение основных характеристик:

public void show(){

Sуstеm. оut. рrintln("СТАТИСТИКА ДЛЯ СХЕМЫ БЕРНУЛЛИ");

System.out.println("Испытаний: "+n);

System. out. println("Вероятность успеха: "+р);

Sуstеm. оut. рrintln("Успехов: "+getVal());

Sуstеm. оut. рrintln("Неудач: "+(п-gеtVаl()));

System. out. println("Мат. ожидание: "+n*р);

System. out. println("Станд. отклонение: "+Math. sqrt(n*р*(1-р)));}

}

class BernoulliTest{

public static void main(String args[]){

// Создание объекта:

Bernoulli obj=new Bernoulli();

// Определение количества испытаний и вероятности успеха:

оbj.sеtАll(10000,0.36);

// Отображение результата:

obj. show();

} }

В классе Bernoulli объявляется несколько полей и методов. Закрытое целочисленное поле n предназначено для записи количества испытаний в схеме Бернулли. Закрытое поле р типа doublе содержит значение вероятности успеха в одном испытании. Поля специально объявлены как закрытые, поскольку их изменение влечет за собой изменение всей статистики, связанной со схемой Бернулли. Чтобы нельзя было изменять значения полей независимо от друтих параметров, эти поля и были «закрыты». Это же замечание относится к закрытой переменной массива test. Переменная является ссылкой на массив с элементами типа bооlеаn (значение true соответствует успеху в соответствующем опыте, а неудаче соответствует значение false). Данный массив представляет собой результат серии испытаний. Его размер определяется значением поля n. Заполнение осуществляется с учетом значения поля р. Поэтому при изменении хотя бы одного из этих полей должен изменяться и массив, на который ссылается переменная массива test: при изменении поля р меняются значения элементов массива test, а при изменении поля n меняется и размер самого массива. Вся эта схема реализована через метод setAll(), у которого два аргумента: первый целочисленный аргумент определяет значение поля n, а второй аргумент типа double определяет значение поля р. При присваивании значений полям проверяется условие, попадают ли переданные методу аргументы в диапазон допустимых значений. Для количества испытаний значение должно быть неотрицательным, а для вероятности успеха в одном опыте значение должно быть не отрицательным и не превышать единицу. Если данные критерии не соблюдаются, соответствующему полю присваивается нулевое значение.

После того как значения полям пир присвоены, командой test=new bооlеаn[n] создается массив нужного размера, и ссылка на него присваивается в качестве значения полю test. Поскольку в Java все массивы динамические, подход, когда поле класса ссылается то на один, то на другой массив, вполне приемлем с позиций как синтаксиса, так и общей идеологии Java. Заполнение массива реализовано посредством инструкции цикла. При заполнении элементов массива использована функция генерирования случайных чисел Math. random(), которая возвращает псевдослучайное число в диапазоне от 0 до 1. Правило заполнения элементов массива следующее: если сгенерированное число не превышает значения поля р, элементу присваивается значение true, в противном случае - значение false. Поскольку генерируемые функцией Math. random() значения равномерно распределены на интервале от 0 до 1, элемент массива test принимает значение true с вероятностью р и значение false с вероятностью 1-р, чего мы и добивались.

Возвращаемым значением метода getVal() является целое число - количество успехов в схеме Бернулли. Подсчет выполняется по элементам массива test. Результат записывается в локальную переменную count. Перебираются все элементы массива test, и если значение элемента равно true, переменная count увеличивается на единицу. После завершения цикла значение переменной count возвращается в качестве результата.

Метод getVal() закрытый и вызывается в открытом методе show(). Методом show() отображается практически вся полезная информация относительно схемы Бернулли. В частности, отображается количество испытаний, вероятность успеха в одном испытании, подсчитывается и отображается количество успехов в серии, вычисляется количество неудач, а также вычисляются и выводятся математическое ожидание и стандартное отклонение.

В главном методе программы командой Bernoulli obj=new Bernoulli() создается объект obj класса Bernoulli. Командой obj. setAll(10000,0.36) заполняются поля объекта, а командой obj. show() выполняется вывод результата. В результате мы получим нечто наподобие следующего:

СТАТИСТИКА ДЛЯ СХЕМЫ БЕРНУЛЛИ

Испытаний: 10000

Вероятность успеха: 0.36

Успехов: 3667

Неудач: 6333

Мат. ожидание: 3600.0

Станд. отклонение: 48.0

Обращаем внимание, что единственный способ получить доступ к полям класса Bernoulli для изменения их значений состоит в вызове метода setAll(). Такой подход делает невозможным «несанкционированное» изменение полей.

Траектория полета тела

Рассмотрим задачу о вычислении координат тела, брошенного под углом. к горизонту при условии, что кроме силы гравитации на тело действует сила сопротивления воздуха. Полагаем, что эта сила пропорциональна скорости и направлена в противоположную сторону к направлению движения тела (направление, движения совпадает с направлением скорости). Если через х и у обозначить координаты тела (они являются функцией времени t), то движение тела описывается системой дифференциальных уравнений:

Здесь т - масса тела, а Fx и Fу - соответственно проекции на горизонталь - ную и вертикальную координатные оси действующей на тело силы. В силу сделанных предположений Fx = -гVх и Fy = –тg – гVy где через g обозначено ускорение свободного падения, г - коэффициент сопротивления, а

являются проекциями скорости на координатные оси.

Для решения задачи в числовом виде воспользуемся следующей итерационной схемой. Предположим, в какой-то момент времени тело имеет координаты х и y, а также скорость, проекции которой на координатные оси составляют Vx и Vy. Чтобы рассчитать положение и скорость тела, которые у него будут через время dt (этот параметр должен быть достаточно малым, чем меньше - тем лучше), к текущей координате х добавляем величину Vxdt, а к текущей координате у - величину Vydt. Поправка к новым значениями для компонент скорости равняется Fхdt/m и Fуdt/m соответственно для Vx и Vy. Последовательно выполняя такие итерации нужное количество раз (это количество определяется как целая часть от выражения t/dt, но обычно параметр dt задается на основе времени t и количества итераций n как dt = t/n), получим координаты тела и его скорость в момент времени t.

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8