## maxima-lang-es — Spanish-language discussion of the Maxima computer algebra system

You can subscribe to this list here.

 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 Jan Feb Mar Apr May Jun Jul Aug Sep (12) Oct (1) Nov (9) Dec (2) Jan (3) Feb (6) Mar (2) Apr May (3) Jun (5) Jul Aug Sep (3) Oct Nov Dec Jan (3) Feb (6) Mar (7) Apr (2) May (3) Jun Jul (8) Aug (3) Sep (4) Oct (2) Nov Dec (10) Jan Feb (2) Mar Apr (1) May (14) Jun Jul (14) Aug (9) Sep (12) Oct (7) Nov Dec (5) Jan (27) Feb (5) Mar (5) Apr (57) May (35) Jun (8) Jul Aug (3) Sep (5) Oct (16) Nov (28) Dec (9) Jan (6) Feb (29) Mar (36) Apr (3) May Jun (14) Jul (2) Aug (3) Sep (17) Oct (9) Nov (3) Dec (9) Jan (19) Feb (4) Mar (10) Apr (7) May (7) Jun Jul (4) Aug (2) Sep (9) Oct (10) Nov (8) Dec (10) Jan Feb (6) Mar Apr (11) May Jun (3) Jul (17) Aug Sep (17) Oct (8) Nov Dec Jan (1) Feb (8) Mar (4) Apr (8) May (5) Jun (3) Jul (5) Aug (2) Sep Oct (2) Nov Dec (4) Jan Feb (4) Mar (3) Apr (2) May (2) Jun Jul (1) Aug (1) Sep (16) Oct (3) Nov Dec (7) Jan (2) Feb Mar (8) Apr May (1) Jun (11) Jul (8) Aug Sep Oct Nov Dec
S M T W T F S

1

2

3

4

5

6

7

8

9

10

11

12

13
(2)
14

15
(4)
16
(6)
17
(2)
18

19

20

21

22

23

24

25

26

27

28

29

30

31

Showing 4 results of 4

 Re: [Maxima-lang-es] [Fwd: Re: Ajuste no lineal por derivadas parciales de mínimos cuadrados] From: Mario Rodriguez - 2009-07-15 07:51:41 ```> Hola Mario, muchas gracias por tu respuesta. > Hola, Aquí lo que que falla no es el algoritmo, sino la propia expresión que estás ajustando a los datos, ya que ha encontrado un par (S, Km) cuya suma es cero, por lo que al anularse el denominador se provoca el error. > ----------------------------------------------------------------------------------------------------- > Coeficientes_de_la_curva:float(lsquares_estimates(M,[S,V],V=(Vmax*S)/(S+Km),[Vmax,Km])) > Division by 0 > #0: lambda([x],ev(MSE,x))(x=[Vmax = 0,Km = -1/10]) Aquí te dice que que el fallo lo encontró cuando Km = -1/10 > #1: > lsquares_estimates_exact(mse=('sum(('data[i,2]-'data[i,1]*Vmax/(Km+'data[i,1]))^2,i,1,10))/10,parameters=[Vmax,Km]) > #2: > lsquares_estimates(data=matrix([0.1,47.09],[0.5,130.3],[1,216.9],[1.5,263.1],[2,338.6],[3,311.5],[4,390.9],[5,428.8],[7,415....,variables=[S,V],equation=V > = Vmax*S/(S+Km),parameters=[Vmax,Km],optional_args=[])(lsquares.mac line > 245) Y aquí veo que la primera fila de tu matriz es [0.1,47.09], luego S+Km=0. > -- an error. To debug this try debugmode(true); > ----------------------------------------------------------------------------------------------------- > > ¿En este caso qué se podría hacer para evitar el problema de la > división por cero? Creo que revisar el modelo. Un saludo. -- Mario ```
 Re: [Maxima-lang-es] [Fwd: Re: Ajuste no lineal por derivadas parciales de mínimos cuadrados] From: Robert Dodier - 2009-07-15 07:10:06 ```On 7/14/09, Argel Gastélum Arellánez wrote: > ¿En este caso qué se podría hacer para evitar el problema de la > división por cero? ¿Será un problema del algoritmo utilizado en este > método numérico? Seria mejor en este caso resolver el problema por un metodo numerico, lsquares_estimates_approximate. La funciona lsquares_estimates intenta resolver el problema primeramente por un metodo exacto, y este causa un error. (Normalmente si el metodo exacto no tiene exito, se llamara al metodo numerico automaticamente.) Con las cantidades que se muestran en un mensaje anterior, obtengo lo siguiente: M : matrix ([0.1, 47.09], [0.5, 130.3], [1, 216.9], [1.5, 263.1], [2, 338.6], [3, 311.5], [4, 390.9], [5, 428.8]); load (lsquares); mse : lsquares_mse (M, [S, V], V = Vmax*S/(S + Km)); lsquares_estimates_approximate (mse, [Vmax, Km]); => [[Vmax = 18.33332565335055, Km = - 1.898808985532863]] Vease que el valor de Km pone una asintota en el centro de la region de datos ... supongo que sea necesario empezar de algun valor derivado de teoria o experiencia, lo cual se puede especificar como initial=[xxx, yyy] en lsquares_estimates_approximate. Quizas no se encuentre este fenomena con los datos completos. He observado que se mejora la solucion que se cambie los datos por la trasformacion X <- (X - media(X))/sqrt(var(X)) cuando la magnitude de X es muchos mas or mucho menos que la unidad. En esto caso aplicaria la trasformacion a V. El efecto de este trasformacion es solamente numerico, no cambia la interpretacion ni significado del problema. Espero que este sirva por alguna manera, y gracias por su interes en Maxima. Robert Dodier ```
 [Maxima-lang-es] [Fwd: Re: Ajuste no lineal por derivadas parciales de mínimos cuadrados] From: Argel Gastélum Arellánez - 2009-07-15 00:59:46 ``` -------- Mensaje original -------- Asunto: Re: [Maxima-lang-es] Ajuste no lineal por derivadas parciales de mínimos cuadrados Fecha: Mon, 13 Jul 2009 20:52:16 -0500 De: Argel Gastélum Arellánez A: Mario Rodriguez Referencias: <4A5A9A26.3090605@...> <4A5B7D6A.2060904@...> Mario Rodriguez escribió: > Argel Gastélum Arellánez escribió: >> Hola, buenas tardes. Estoy tratando de hacer un ajuste no lineal >> de una función a un grupo de 214 parejas de datos, utilizando el >> método de derivadas parciales para encontrar mínimos cuadrados. Las >> instrucciones que estoy aplicando en wxMaxima 0.8.2 son las siguientes: >> >> --------------------------------------------------------------------------------- >> >> M: read_matrix("C:/Users/Usuario/Desktop/Datos.txt")\$ >> X: col(M,1)\$ >> Y: col(M,2)\$ >> Funcion_a_minimizar : '((1/length(X))*sum((F(X[i]) - Y[i])^2, i, >> 1,length(X))); >> F(X) := exp(-a*X)/(b+c*X); >> Suma_de_Cuadrados: first(''Funcion_a_minimizar); >> Derivada_parcial_a: diff(Suma_de_Cuadrados,a)\$ >> Derivada_parcial_b: diff(Suma_de_Cuadrados,b)\$ >> Derivada_parcial_c: diff(Suma_de_Cuadrados,c)\$ >> realonly: true\$ >> Constantes_estimadas_Racionales: >> solve([Derivada_parcial_a=0,Derivada_parcial_b=0,Derivada_parcial_c=0],[a,b,c]); >> >> Constantes_estimadas_Racionales2: >> (last(Constantes_estimadas_Racionales)); >> Constantes_estimadas_Decimales: >> float(last(Constantes_estimadas_Racionales)); >> [a[racional],b[racional],c[racional]]: map(rhs, >> Constantes_estimadas_Racionales2); >> [a[decimal],b[decimal],c[decimal]]: map(rhs, >> Constantes_estimadas_Decimales); >> load(draw)\$ >> Escena_1:gr2d( >> title="Curva ajustada a Datos Experimentales", >> xlabel="X (unidades)", >> ylabel="Y (unidades)", >> xrange=[0,6], >> yrange=[0,200], >> key="Datos experimentales", >> point_type=filled_circle, >> point_size=1, >> color=red, >> points(M), >> key="Curva Ajustada", >> line_width=3, >> color=blue, >> explicit(ev(F(x),first(Constantes_estimadas_Racionales2)),x,0,10) >> )\$ >> wxdraw(Escena_1)\$ >> /* >> Ecuación de la Curva Ajustada: >> */ >> y=exp(-a[racional]*x)/(b[racional]+c[racional]*x); >> y=exp(-a[decimal]*x)/(b[decimal]+c[decimal]*x); >> /* >> Valores reportados por la fuente de los datos (Datos NIST Chwirut1): >> a = 0.19027818370, b = 0.0061314004477, c = 0.010530908399. >> */ >> --------------------------------------------------------------------------------- >> >> >> Todo marcha bien hasta llegar a la orden: >> >> Constantes_estimadas_Racionales: >> solve([Derivada_parcial_a=0,Derivada_parcial_b=0,Derivada_parcial_c=0],[a,b,c]); >> >> >> donde se queda un rato trabajando el programa y después de unos >> segundos me arroja una serie de líneas como estas: >> ----------------------------------------------------------------------------- >> >> rat: replaced -1.0 by -1/1 = -1.0 >> rat: replaced -92.9 by -929/10 = -92.9 >> rat: replaced 0.5 by 1/2 = 0.5 >> ... >> rat: replaced 6.0 by 6/1 = 6.0 >> Maxima encountered a Lisp error: >> Error in PROGN [or a callee]: The storage for BIGNUM is exhausted. >> Currently, 7581 pages are allocated. >> Use ALLOCATE to expand the space. >> Automatically continuing. >> To reenable the Lisp debugger set *debugger-hook* to nil. >> ------------------------------------------------------------------------------ >> >> y a partir de aquí no avanza. He buscado pero no he encontrado la >> forma de expandir el espacio usando ALLOCATE y no tengo idea de qué >> se puede hacer. Esta secuencia de comandos me ha sido muy útil para >> ajustar curvas de Michaelis-Menten en experimentos de cinética >> enzimática y también para hacer regresiones lineales. He logrado >> encontrar los valores de "a", "b" y "c" usando el comando "lbfgs" (no >> me resulta muy práctico tener que dar valores iniciales, sólo por >> cuestiones de tiempo) y también con "lsquares" (que me ha parecido >> mucho mejor), pero me intriga el hecho de no poder hacerlo con este >> método de derivadas parciales. >> >> Agradezco de antemano la ayuda brindada. >> >> Saludos y buen inicio de semana. >> >> -- >> Argel. >> > > Hola Argel, > > La función 'solve' se utiliza para resolver ecuaciones y sistemas de > forma simbólica, lo que conlleva ciertas limitaciones prácticas y > teóricas. > > A simple vista no parece que tu sistema sea resoluble de forma > algebraica; incluso con tamaños muestrales mucho más pequeños te vas a > encontrar con polinomios de grado muy alto. Es el típico caso en el > que no hay más remedio que echar mano de procedimientos numéricos. > > Creo que tu mejor opción es utilizar las otras funciones a las que > haces referencia. > > Mario > > Hola Mario, muchas gracias por tu respuesta. ¿Entonces no es sólo un problema de falta de memoria disponible para wxMaxima?. Me provoca curiosidad porque comencé a usar estas instrucciones para encontrar mínimos cuadrados por derivadas parciales, debido a la necesidad de ajustar la función de Michaelis-Menten [V=Vmax*S/(Km+S)] a datos de velocidad de reacción contra concentración de sustrato (en este caso funcionó muy bien), y usando "lsquares_estimates" me salía un error como el siguiente: ----------------------------------------------------------------------------------------------------- Coeficientes_de_la_curva:float(lsquares_estimates(M,[S,V],V=(Vmax*S)/(S+Km),[Vmax,Km])) Division by 0 #0: lambda([x],ev(MSE,x))(x=[Vmax = 0,Km = -1/10]) #1: lsquares_estimates_exact(mse=('sum(('data[i,2]-'data[i,1]*Vmax/(Km+'data[i,1]))^2,i,1,10))/10,parameters=[Vmax,Km]) #2: lsquares_estimates(data=matrix([0.1,47.09],[0.5,130.3],[1,216.9],[1.5,263.1],[2,338.6],[3,311.5],[4,390.9],[5,428.8],[7,415....,variables=[S,V],equation=V = Vmax*S/(S+Km),parameters=[Vmax,Km],optional_args=[])(lsquares.mac line 245) -- an error. To debug this try debugmode(true); ----------------------------------------------------------------------------------------------------- ¿En este caso qué se podría hacer para evitar el problema de la división por cero? ¿Será un problema del algoritmo utilizado en este método numérico? De nuevo muchas gracias por tu ayuda. Saludos y que estés bien. -- Argel. ```
 [Maxima-lang-es] [Fwd: Re: Ajuste no lineal por derivadas parciales de mínimos cuadrados] From: Argel Gastélum Arellánez - 2009-07-15 00:49:21 ``` -------- Mensaje original -------- Asunto: Re: [Maxima-lang-es] Ajuste no lineal por derivadas parciales de mínimos cuadrados Fecha: Mon, 13 Jul 2009 20:22:45 -0500 De: Argel Gastélum Arellánez A: CARLOS Enrique CARLEOS Artime Referencias: <4A5A9A26.3090605@...> <87my78a20z.fsf@...> CARLOS Enrique CARLEOS Artime escribió: > Argel Gastélum Arellánez skribis, > je 19h19'22" (21h21'26") de 20Âª Mesidoro 161Âª (217.10.24 = 2009.7.12): > > >> Maxima encountered a Lisp error: >> Error in PROGN [or a callee]: The storage for BIGNUM is exhausted. >> Currently, 7581 pages are allocated. >> Use ALLOCATE to expand the space. >> Automatically continuing. >> To reenable the Lisp debugger set *debugger-hook* to nil. >> ------------------------------------------------------------------------------ >> y a partir de aquí no avanza. He buscado pero no he encontrado la >> forma de expandir el espacio usando ALLOCATE y no tengo idea de qué se >> > > En la página Wikipedia de GCL señalan a > > http://savannah.nongnu.org/forum/forum.php?forum_id=1610 > > donde se menciona > > ,---- > | As of the present time, the GCL team has not tuned the default > | memory allocation scheme to be more in line with modern > | systems. One can therefore often get significant performance > | increases by preallocating memory, as in for example > | > | (progn > | (si::allocate 'cons 10000 t) > | (si::allocate 'fixnum 200 t) > | (si::allocate 'symbol 100 t) > | (si::allocate-relocatable-pages 2000 t) > | (si::allocate 'cfun 1000 t)) > `---- > > No sé si tendrá relación con lo que comentas. Tampoco lo he probado. > > Hola Carlos. Muchas gracias por tu sugerencia. ¿Cómo es que se usan estas instrucciones en wxMaxima?, mil disculpas por la ignorancia. Saludos. -- Argel. ```

Showing 4 results of 4