/// <summary>
 /// Constructor, Statement-statement yang pertama kali dieksekusi ketika inisialisasi Object 
 /// Memberikan setting terhadap nilai-nilai untuk optimasi sesuai nilai-nilai yang dimasukan.
 /// </summary>
 /// <param name="inputDimension">Integer. Dimensi parameter yang akan dicari nilai optimumnya</param>
 /// <param name="function">BaseFunction. Fungsi yang akan dioptimasi</param>
 /// <param name="tolerance">Double. Batas toleransi kekonvergenan dari metode optimasi</param>
 /// <param name="maximumIteration">Integer. Batas maksimum itersi yang digunakan</param>
 public QuasiNewton(int inputDimension, BaseFunction function, double tolerance, int maximumIteration)
 {
     this.inputDimension = inputDimension;
     this.initialPoint = new Vector(inputDimension);
     this.initialPoint.InitializeAllValue(1);
     this.hessian = Matrix.CreateIdentity(inputDimension);
     this.tolerance = tolerance;
     this.gradtolerance = tolerance;
     this.functolerance = tolerance;
     this.maximumIteration = maximumIteration;
     this.function = function;
 }
 /// <summary>
 /// Constructor, Statement-statement yang pertama kali dieksekusi ketika inisialisasi Object 
 /// Memberikan setting terhadap nilai-nilai untuk optimasi sesuai nilai-nilai yang dimasukan.
 /// </summary>
 /// <param name="inputDimension">Integer. Dimensi parameter yang akan dicari nilai optimumnya</param>
 /// <param name="function">BaseFunction. Fungsi yang akan dioptimasi</param>
 /// <param name="tolerance">Double. Batas toleransi kekonvergenan dari metode optimasi</param>
 /// <param name="maximumIteration">Integer. Batas maksimum itersi yang digunakan</param>
 /// <param name="initialPoint">Vector. Nilai-nilai parameter yang digunakan sebagai initial value (starting point)</param>
 public QuasiNewton(int inputDimension, BaseFunction function, double tolerance, int maximumIteration, Vector initialPoint)
     : this(inputDimension, function, tolerance, maximumIteration)
 {
     this.initialPoint = initialPoint;
 }