Установленная Lorentzian Curve перевернута по сравнению с исходными даннымиC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Установленная Lorentzian Curve перевернута по сравнению с исходными данными

Сообщение Anonymous »

Я пытаюсь установить кривую Lorentzian в своих данных в C#.
Я использую библиотеку Math.net (версия 5.0.0).
К сожалению, результаты, которые я получаю, приводят к кривой, которая перевернута по сравнению с входными данными. src = "https://i.sstatic.net/cbdxkltr.png"/>

my into: br/pnt: double[] xData = [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0];
double[] yData = [5.1, 5.3, 5.8, 6.0, 5.8, 5.3, 5.1];
with initial guesses: [x0Guess: 4.0, AGuess: 5.0, gammaGuess: 2.0]
< /code>
Код: < /p>
public static Tuple FitLorentzian(double[] xDataInput, double[] yDataInput, double x0Guess, double AGuess, double gammaGuess)
{
if (xDataInput.Length != yDataInput.Length || xDataInput.Length < 3)
{
throw new ArgumentException("Input data arrays must have the same length and at least 3 points.");
}

var xData = new DenseVector(xDataInput);
var yData = new DenseVector(yDataInput);

Vector initialGuess = Vector.Build.Dense([x0Guess, AGuess, gammaGuess]);
IObjectiveModel objective = ObjectiveFunction.NonlinearModel(Model, xData, yData);
var minimizer = new LevenbergMarquardtMinimizer(initialMu: 0.001, gradientTolerance: 1E-15, stepTolerance: 1E-15, functionTolerance: 1E-15, maximumIterations: 100);
Vector lowerBound = Vector.Build.Dense([0, 0, 0]);
NonlinearMinimizationResult optimizationResult = minimizer.FindMinimum(objective, initialGuess, lowerBound);

if (optimizationResult.ReasonForExit == ExitCondition.Converged || optimizationResult.ReasonForExit == ExitCondition.RelativePoints || optimizationResult.ReasonForExit == ExitCondition.RelativeGradient)
{
return Tuple.Create(optimizationResult.MinimizingPoint[0], optimizationResult.MinimizingPoint[1], optimizationResult.MinimizingPoint[2]);
}
else
{
return Tuple.Create(double.NaN, double.NaN, double.NaN);
}
}

private static Vector Model(Vector parameters, Vector xData)
{
double x0 = parameters[0];
double A = parameters[1];
double gamma = parameters[2];

Vector result = CreateVector.Dense(xData.Count);
for (int i = 0; i < xData.Count; i++)
{
result = (A / Math.PI) * (gamma / 2.0) / (Math.Pow(xData - x0, 2) + Math.Pow(gamma / 2.0, 2));
}
return result;
}


Подробнее здесь: https://stackoverflow.com/questions/795 ... ginal-data
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Установленная Lorentzian Curve перевернута по сравнению с исходными данными
    Anonymous » » в форуме C#
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Несоответствие между аппроксимационной кривой и исходными данными
    Anonymous » » в форуме Python
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • Моделирование большого набора данных с использованием Lorentzian Function
    Anonymous » » в форуме Python
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Моделирование большого набора данных с использованием Lorentzian функции [закрыто]
    Anonymous » » в форуме Python
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • Создание цвета текста перевернута в фоновое свойство CSS для плавных переходов
    Anonymous » » в форуме Html
    0 Ответы
    1 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»