/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.matheclipse.core.stat.descriptive.summary;

import static org.matheclipse.core.expression.F.eval;

import java.io.Serializable;

import org.apache.commons.math3.util.FastMath;
import org.matheclipse.core.expression.F;
import org.matheclipse.core.interfaces.IAST;
import org.matheclipse.core.interfaces.IExpr;
import org.matheclipse.core.stat.descriptive.AbstractSymbolicStorelessUnivariateStatistic;

/**
 * Returns the sum of the natural logs for this collection of values.
 * 

* Therefore, *

*

*

* Note that this implementation is not synchronized. If * multiple threads access an instance of this class concurrently, and at least * one of the threads invokes the increment() or * clear() method, it must be synchronized externally. *

* */ public class SymbolicSumOfLogs extends AbstractSymbolicStorelessUnivariateStatistic implements Serializable { /** Serializable version identifier */ private static final long serialVersionUID = -370076995648386763L; /** Number of values that have been added */ private int n; /** * The currently running value */ private IExpr value; /** * Create a SumOfLogs instance */ public SymbolicSumOfLogs() { value = F.C0; n = 0; } /** * Copy constructor, creates a new {@code SumOfLogs} identical to the {@code * original} * * @param original * the {@code SumOfLogs} instance to copy */ // public SumOfLogs(SumOfLogs original) { // copy(original, this); // } /** * {@inheritDoc} */ @Override public void increment(final IExpr d) { value = F.eval(F.Plus(value, F.Log(d))); n++; } /** * {@inheritDoc} */ @Override public IExpr getResult() { return value; } /** * {@inheritDoc} */ public long getN() { return n; } /** * {@inheritDoc} */ @Override public void clear() { value = F.C0; n = 0; } /** * Returns the sum of the natural logs of the entries in the specified portion * of the input array, or Double.NaN if the designated subarray * is empty. *

* Throws IllegalArgumentException if the array is null. *

*

* See {@link SymbolicSumOfLogs}. *

* * @param values * the input array * @param begin * index of the first array element to include * @param length * the number of elements to include * @return the sum of the natural logs of the values or 0 if length = 0 * @throws IllegalArgumentException * if the array is null or the array index parameters are not valid */ @Override public IExpr evaluate(final IAST values, final int begin, final int length) { if (test(values, begin, length, true)) { IAST sumLog = F.Plus(); for (int i = begin; i < begin + length; i++) { sumLog.add(F.Log(values.get(i))); } if (sumLog.size() > 1) { return F.eval(sumLog); } } return null; } // /** // * {@inheritDoc} // */ // @Override // public SumOfLogs copy() { // SumOfLogs result = new SumOfLogs(); // copy(this, result); // return result; // } // // /** // * Copies source to dest. // *

Neither source nor dest can be null.

// * // * @param source SumOfLogs to copy // * @param dest SumOfLogs to copy to // * @throws NullArgumentException if either source or dest is null // */ // public static void copy(SumOfLogs source, SumOfLogs dest) // throws NullArgumentException { // MathUtils.checkNotNull(source); // MathUtils.checkNotNull(dest); // dest.setData(source.getDataRef()); // dest.n = source.n; // dest.value = source.value; // } }

Ads help maintain this website.