forum.alglib.net

ALGLIB forum
It is currently Sun Dec 22, 2024 7:57 am

All times are UTC


Forum rules


1. This forum can be used for discussion of both ALGLIB-related and general numerical analysis questions
2. This forum is English-only - postings in other languages will be removed.



Post new topic Reply to topic  [ 3 posts ] 
Author Message
 Post subject: Nonlinear approximation problem
PostPosted: Sun Nov 19, 2017 1:01 pm 
Offline

Joined: Sun Nov 19, 2017 12:48 pm
Posts: 2
Добрый день , Сергей !

Использую Вашу библиотеку уже не первый раз и сейчас потребовалось воспользоваться нелинейной аппроксимацией. Аппроксимировать надо пик функцией Гаусса. Однако вычисляемые параметры оказываются совсем неверными : если брать в функции Гаусса только 2 параметра ( мат. ожидание и дисперсию) ,то начальные значения вообще не изменяются (виде похожую проблему в одной теме - взял начальные параметры близкими к предполагаемым - не помогает) ; если же брать 4 параметра , то регрессия проходит , но значения все равно остаются очень далекими от необходимых. Привожу здесь код , для функции с 4-мя параметрами :

Code:

public static void function_cx_1_func(double[] c, double[] x, ref double func, object obj)
        {
            func =c[3]+ c[2]/(c[1]*Math.Sqrt(Math.PI/2))* Math.Exp(-2*Math.Pow((x[0]-c[0])/c[1],2));
        }

        private void button4_Click(object sender, EventArgs e)
        {
           
                double[,] x1 =new double[,]{ { 655.89}, { 655.94},{ 655.99}, { 656.04}, { 656.09}, { 656.14}, { 656.19}, { 656.24}, { 656.29}, { 656.34}, { 656.39}, { 656.44} };
                double[] y1 = new double[] { 56.0, 200.0, 288.0, 612.0, 1312.0, 3356.0, 8348.0, 14552.0, 9648.0, 2620.0, 524.0, 208.0 };
                //{ 656.242, 0.10615, 1849.245 , 376.85 } - ожидаемые параметры, вычисленные в Origin 8
                double[] c = new double[] { 656, 0.1, 1800, 370 };
                double epsf = 0;
                double epsx =0.000001;
                int maxits =0;
                int info;
                alglib.lsfitstate state;
                alglib.lsfitreport rep;
                double diffstep = 0.0001;

                alglib.lsfitcreatef(x1, y1, c, diffstep, out state);
                alglib.lsfitsetcond(state, epsf, epsx, maxits);
                alglib.lsfitfit(state, function_cx_1_func, null, null);
                alglib.lsfitresults(state, out info, out c, out rep);
               
                textBox1.Text += alglib.ap.format(c, 4)+" "+info + Environment.NewLine;//info =2
                //{656.2421,0.1057,1838.9224,412.1488}- вычисленные значения , которые очень плохо аппроксимируют зависимость.

        }

Если брать начальные параметры чуть дальше от нужных { 650 , 0.1, 1000, 500 }, то аппроксимация вообще фактически не происходит : {650.0000,0.1000,1000.0000,3477.0000}.
Очень прошу подсказать , в чем может быть проблема. Спасибо !


Attachments:
File comment: Формула подбираемой зависимости
APPROX.jpg
APPROX.jpg [ 14.25 KiB | Viewed 3925 times ]
File comment: Синими точками - исходные данные , красными - полученная функция Гаусса
APPROX11.jpg
APPROX11.jpg [ 29.98 KiB | Viewed 3925 times ]
Top
 Profile  
 
 Post subject: Re: Nonlinear approximation problem
PostPosted: Mon Nov 20, 2017 8:40 am 
Offline
Site Admin

Joined: Fri May 07, 2010 7:06 am
Posts: 927
Вам надо установить масштаб переменных при помощи lsfitsetscale(). Второй коэффициент на несколько порядков меньше, чем остальные - это сбивает с толку оптимизатор. Масштаб здесь будет что-то вроде [1000,1,1000,1000] или [100,1,100,100].

P.S. just for you to know, it is English-only forum :)


Top
 Profile  
 
 Post subject: Re: Nonlinear approximation problem
PostPosted: Mon Nov 20, 2017 11:10 am 
Offline

Joined: Sun Nov 19, 2017 12:48 pm
Posts: 2
THANKS A LOT !


Top
 Profile  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 3 posts ] 

All times are UTC


Who is online

Users browsing this forum: No registered users and 24 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group