Nested Loop дает мне такие же или неправильные ответы, когда мне нужно рассчитать доходность капитала - PullRequest
0 голосов
/ 06 сентября 2018

Фон : Привет! Мне пришлось случайным образом выбрать значение из нормального распределения (готово) и использовать это значение (среднее значение - это «это значение»), чтобы увидеть, насколько первоначальное значение капитала в 100 увеличивается за 3582 недели, и предоставить окончательное значение прибыли. Как в:

капитал = 100

эквити = эквити + 100 * среднее

Мне нужно выполнить 1000 испытаний, чтобы увидеть, как разные значения «среднего» дают разные выгодные значения.

Я могу получить ответ за 3582 недели для первого испытания, но когда я добавляю еще один цикл для "1000 испытаний", он либо дает мне те же значения, либо неправильные значения.

Проблема : Цикл либо дает мне те же значения, либо совершенно неверные значения. Метод: computeStats () {..}

Примечание : я показал конструктор в блоге просто для справки, чтобы показать, что я на самом деле делаю.

class Sample extends SimulateMarket{ //SimulateMarket is the Application class

ArrayList<Double> data = new ArrayList<Double>();
private double mean, stdDev; 
private Random random;
SimulateMarket mySim = new SimulateMarket(); //mySim is an instance of SimulateMarket class used to access variables of Simulate Class

public Sample(int size, double theMean, double theStdDev){ //Comstructor used for the Distributional Technique
    random = new Random();
    for(int i=0; i<3582 ; i++)
        data.add(theMean+random.nextGaussian()*theStdDev); //Random sampling from Normal Distribution 
    mean = getMean(); //getMean() method is used to get Mean 
    stdDev = getStdDev(mean);
    Collections.sort(data);//getStdDev is used for getting Standard Deviation
    System.out.println(this); //for printing the results
}

public void computeStats(){
    ArrayList<Double> myData = new ArrayList<Double>();

    for(int j=0; j<1000; j++){
        equity = 100;
    for(int i=0; i<3582; i++){ 
        equity = equity + 100*mean;

    }
    myData.add(equity);
    }

    for(Double num: myData){
        System.out.println(num);
    }


}

1 Ответ

0 голосов
/ 06 сентября 2018

Видимо, я добавлял цикл 1000 в неправильном месте. Вот где это должно быть - в основном методе

public static void main(String[] args) throws java.io.IOException{
for(int j=0; j<1000; j++){
    Sample equity = new Sample(3582, 0.0016, 0.0205);
    equity.computeStats();
    }
}
...