problem with the fmin function
Dear scipy users, I'm trying to minimize a chi-square value by a simplex routine. My code contains two functions: the first one, called spotdiffusion(a, ter , v , sda , rd) generates some simulated data for a given set of parameter values. The second function, called chis ( a, ter , v , sda , rd), computes a chi-square value from the comparison of observed and simulated data, for a given set of parameter values. To do so, the chis function calls the spotdiffusion one. Here is a simplified structure of my code: def spotdiffusion (a, ter , v , sda , rd): do simulation computations returns an array of simulated data def chis (a, ter , v , sda , rd): observed data simulated_data = spotdiffusion ( a, ter , v , sda , rd) do chi-square computations returns the chi-square value (float) Now I want now to find a, ter, v, sda and rda values which minimize the chi-square. Here is my attempt: x0 = np.array ([0.11,0.25,0.35, 1.7, 0.017]) ####initial guess xopt = fmin (chis, x0, maxiter=300) However, python returns an error: Traceback (most recent call last): File "<ipython console>", line 1, in <module> File "C:\Python27\lib\site-packages\spyderlib\widgets\externalshell\startup.py", line 128, in runfile execfile(filename, glbs) File "C:\Users\mathieu\Desktop\modeling\spotlight diffusion model\fitting_spotlight.py", line 246, in <module> xopt = fmin (chis, x0, maxiter=300) File "C:\Python27\lib\site-packages\scipy\optimize\optimize.py", line 257, in fmin fsim[0] = func(x0) File "C:\Python27\lib\site-packages\scipy\optimize\optimize.py", line 176, in function_wrapper return function(x, *args) TypeError: chis() takes exactly 5 arguments (1 given) I don't understand where is my mistake. Any help would be appreciated! Cheers, Mathieu
On Mon, Apr 30, 2012 at 5:15 AM, servant mathieu <servant.mathieu@gmail.com> wrote:
Dear scipy users,
I'm trying to minimize a chi-square value by a simplex routine. My code contains two functions: the first one, called spotdiffusion(a, ter , v , sda , rd) generates some simulated data for a given set of parameter values. The second function, called chis ( a, ter , v , sda , rd), computes a chi-square value from the comparison of observed and simulated data, for a given set of parameter values. To do so, the chis function calls the spotdiffusion one. Here is a simplified structure of my code:
def spotdiffusion (a, ter , v , sda , rd): do simulation computations returns an array of simulated data
def chis (a, ter , v , sda , rd):
the parameter is just one list or array, and you need to unpack, for example def chis (x): a, ter , v , sda , rd = x Josef
observed data simulated_data = spotdiffusion ( a, ter , v , sda , rd) do chi-square computations returns the chi-square value (float)
Now I want now to find a, ter, v, sda and rda values which minimize the chi-square. Here is my attempt:
x0 = np.array ([0.11,0.25,0.35, 1.7, 0.017]) ####initial guess xopt = fmin (chis, x0, maxiter=300)
However, python returns an error: Traceback (most recent call last): File "<ipython console>", line 1, in <module> File "C:\Python27\lib\site-packages\spyderlib\widgets\externalshell\startup.py", line 128, in runfile execfile(filename, glbs) File "C:\Users\mathieu\Desktop\modeling\spotlight diffusion model\fitting_spotlight.py", line 246, in <module> xopt = fmin (chis, x0, maxiter=300) File "C:\Python27\lib\site-packages\scipy\optimize\optimize.py", line 257, in fmin fsim[0] = func(x0) File "C:\Python27\lib\site-packages\scipy\optimize\optimize.py", line 176, in function_wrapper return function(x, *args) TypeError: chis() takes exactly 5 arguments (1 given)
I don't understand where is my mistake. Any help would be appreciated!
Cheers, Mathieu
_______________________________________________ SciPy-User mailing list SciPy-User@scipy.org http://mail.scipy.org/mailman/listinfo/scipy-user
Hi, error message says it needs 5 input arguments and you are giving one (the list but still only one), you could change your chis function def chis (x): a, ter , v , sda , rd = x observed data simulated_data = spotdiffusion ( a, ter , v , sda , rd) do chi-square computations returns the chi-square value (float) cheers -- Oleksandr Huziy 2012/4/30 servant mathieu <servant.mathieu@gmail.com>
Dear scipy users,
I'm trying to minimize a chi-square value by a simplex routine. My code contains two functions: the first one, called spotdiffusion(a, ter , v , sda , rd) generates some simulated data for a given set of parameter values. The second function, called chis ( a, ter , v , sda , rd), computes a chi-square value from the comparison of observed and simulated data, for a given set of parameter values. To do so, the chis function calls the spotdiffusion one. Here is a simplified structure of my code:
def spotdiffusion (a, ter , v , sda , rd): do simulation computations returns an array of simulated data
def chis (a, ter , v , sda , rd): observed data simulated_data = spotdiffusion ( a, ter , v , sda , rd) do chi-square computations returns the chi-square value (float)
Now I want now to find a, ter, v, sda and rda values which minimize the chi-square. Here is my attempt:
x0 = np.array ([0.11,0.25,0.35, 1.7, 0.017]) ####initial guess xopt = fmin (chis, x0, maxiter=300)
However, python returns an error: Traceback (most recent call last): File "<ipython console>", line 1, in <module> File "C:\Python27\lib\site-packages\spyderlib\widgets\externalshell\startup.py", line 128, in runfile execfile(filename, glbs) File "C:\Users\mathieu\Desktop\modeling\spotlight diffusion model\fitting_spotlight.py", line 246, in <module> xopt = fmin (chis, x0, maxiter=300) File "C:\Python27\lib\site-packages\scipy\optimize\optimize.py", line 257, in fmin fsim[0] = func(x0) File "C:\Python27\lib\site-packages\scipy\optimize\optimize.py", line 176, in function_wrapper return function(x, *args) TypeError: chis() takes exactly 5 arguments (1 given)
I don't understand where is my mistake. Any help would be appreciated!
Cheers, Mathieu
_______________________________________________ SciPy-User mailing list SciPy-User@scipy.org http://mail.scipy.org/mailman/listinfo/scipy-user
Hi Oleksandr, Thank you very much, it works perfectly. The simplex (Nelder-Mead) routine is rather slow. I'm looking for an alternative, faster algorithm which could do the job (minimization of a chi-square) as well. Any idea? Cheers, Mathieu 2012/4/30 Oleksandr Huziy <guziy.sasha@gmail.com>
Hi, error message says it needs 5 input arguments and you are giving one (the list but still only one), you could change your chis function
def chis (x): a, ter , v , sda , rd = x observed data simulated_data = spotdiffusion ( a, ter , v , sda , rd) do chi-square computations returns the chi-square value (float)
cheers
-- Oleksandr Huziy
2012/4/30 servant mathieu <servant.mathieu@gmail.com>
Dear scipy users,
I'm trying to minimize a chi-square value by a simplex routine. My code contains two functions: the first one, called spotdiffusion(a, ter , v , sda , rd) generates some simulated data for a given set of parameter values. The second function, called chis ( a, ter , v , sda , rd), computes a chi-square value from the comparison of observed and simulated data, for a given set of parameter values. To do so, the chis function calls the spotdiffusion one. Here is a simplified structure of my code:
def spotdiffusion (a, ter , v , sda , rd): do simulation computations returns an array of simulated data
def chis (a, ter , v , sda , rd): observed data simulated_data = spotdiffusion ( a, ter , v , sda , rd) do chi-square computations returns the chi-square value (float)
Now I want now to find a, ter, v, sda and rda values which minimize the chi-square. Here is my attempt:
x0 = np.array ([0.11,0.25,0.35, 1.7, 0.017]) ####initial guess xopt = fmin (chis, x0, maxiter=300)
However, python returns an error: Traceback (most recent call last): File "<ipython console>", line 1, in <module> File "C:\Python27\lib\site-packages\spyderlib\widgets\externalshell\startup.py", line 128, in runfile execfile(filename, glbs) File "C:\Users\mathieu\Desktop\modeling\spotlight diffusion model\fitting_spotlight.py", line 246, in <module> xopt = fmin (chis, x0, maxiter=300) File "C:\Python27\lib\site-packages\scipy\optimize\optimize.py", line 257, in fmin fsim[0] = func(x0) File "C:\Python27\lib\site-packages\scipy\optimize\optimize.py", line 176, in function_wrapper return function(x, *args) TypeError: chis() takes exactly 5 arguments (1 given)
I don't understand where is my mistake. Any help would be appreciated!
Cheers, Mathieu
_______________________________________________ SciPy-User mailing list SciPy-User@scipy.org http://mail.scipy.org/mailman/listinfo/scipy-user
_______________________________________________ SciPy-User mailing list SciPy-User@scipy.org http://mail.scipy.org/mailman/listinfo/scipy-user
Try powell method, it could be faster. http://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.fmin_powe... you may also check out others here http://docs.scipy.org/doc/scipy/reference/optimize.html Cheers -- Oleksandr 2012/4/30 servant mathieu <servant.mathieu@gmail.com>
Hi Oleksandr,
Thank you very much, it works perfectly. The simplex (Nelder-Mead) routine is rather slow. I'm looking for an alternative, faster algorithm which could do the job (minimization of a chi-square) as well. Any idea? Cheers, Mathieu
2012/4/30 Oleksandr Huziy <guziy.sasha@gmail.com>
Hi, error message says it needs 5 input arguments and you are giving one (the list but still only one), you could change your chis function
def chis (x): a, ter , v , sda , rd = x observed data simulated_data = spotdiffusion ( a, ter , v , sda , rd) do chi-square computations returns the chi-square value (float)
cheers
-- Oleksandr Huziy
2012/4/30 servant mathieu <servant.mathieu@gmail.com>
Dear scipy users,
I'm trying to minimize a chi-square value by a simplex routine. My code contains two functions: the first one, called spotdiffusion(a, ter , v , sda , rd) generates some simulated data for a given set of parameter values. The second function, called chis ( a, ter , v , sda , rd), computes a chi-square value from the comparison of observed and simulated data, for a given set of parameter values. To do so, the chis function calls the spotdiffusion one. Here is a simplified structure of my code:
def spotdiffusion (a, ter , v , sda , rd): do simulation computations returns an array of simulated data
def chis (a, ter , v , sda , rd): observed data simulated_data = spotdiffusion ( a, ter , v , sda , rd) do chi-square computations returns the chi-square value (float)
Now I want now to find a, ter, v, sda and rda values which minimize the chi-square. Here is my attempt:
x0 = np.array ([0.11,0.25,0.35, 1.7, 0.017]) ####initial guess xopt = fmin (chis, x0, maxiter=300)
However, python returns an error: Traceback (most recent call last): File "<ipython console>", line 1, in <module> File "C:\Python27\lib\site-packages\spyderlib\widgets\externalshell\startup.py", line 128, in runfile execfile(filename, glbs) File "C:\Users\mathieu\Desktop\modeling\spotlight diffusion model\fitting_spotlight.py", line 246, in <module> xopt = fmin (chis, x0, maxiter=300) File "C:\Python27\lib\site-packages\scipy\optimize\optimize.py", line 257, in fmin fsim[0] = func(x0) File "C:\Python27\lib\site-packages\scipy\optimize\optimize.py", line 176, in function_wrapper return function(x, *args) TypeError: chis() takes exactly 5 arguments (1 given)
I don't understand where is my mistake. Any help would be appreciated!
Cheers, Mathieu
_______________________________________________ SciPy-User mailing list SciPy-User@scipy.org http://mail.scipy.org/mailman/listinfo/scipy-user
_______________________________________________ SciPy-User mailing list SciPy-User@scipy.org http://mail.scipy.org/mailman/listinfo/scipy-user
_______________________________________________ SciPy-User mailing list SciPy-User@scipy.org http://mail.scipy.org/mailman/listinfo/scipy-user
participants (3)
-
josef.pktd@gmail.com -
Oleksandr Huziy -
servant mathieu