Matlab - problemas con ajuste de datos experimentales

 
Vista:

problemas con ajuste de datos experimentales

Publicado por principiante (3 intervenciones) el 01/11/2010 17:06:37
Hola a todos,

Necesito realizar un ajuste utilizando Matlab. Mis datos experimentales deben de ajustarse a una ecuación del tipo:

Y=1-exp(-(k*t)^c1)
donde;
k=c2*exp(-c3/T)
Y es la variable dependiente.
T y t son las variables independientes.
c1,c2 y c3 son los coeficientes que deseo calcular.

En este mismo foro lei acerca del uso de la funcion fminsearch e incluso aparece un esquema de la rutina a implementar (el titulo de la consulta es: "problema con las limitaciones de cftool")...pero resulta que la rutina no anda bien con mis datos...
Me pasa que cuando corro la rutina no obtengo ningun tipo de ajuste..ya que las respuestas son precisamente los valores de entrada utilizados durante el llamado de la función fminsearch...es decir:
si c0=[1 2 3] y ejecuto [c,f,EF,out]=fminsearch('mifuncion',C0) obtengo como resultado c(1)=1, c(2)=2, c(3)=3..(y sucede aun en el caso de utilizar un c0 que contiene valores muy proximos a solucion..)

Desconozco si matlab contiene otra herramienta para resolver este tipo de problemas..
Alguna sugerencia?

Gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:problemas con ajuste de datos experimentales

Publicado por Jorge (226 intervenciones) el 05/11/2010 07:19:52
La instrucción fminsearch encuentra el valor de las variables que minimizan una función arbitraria.

El problema en realidad está en la formulación que hagas del problema, de tal manera que ese mínimo sea la solución. fminsearch encuentra mínimos locales, no globales, de tal manera que la solución depende del punto de arranque que tomes.

Normalmente hay que explorar varios puntos de arranque, hasta que encuentres la mejor solución.

La 'toolbox' de Optimización tiene varias instrucciones que te pueden servir para ajuste de curvas.

Déjame ver los datos experimentales, a ver si se me ocurre algo más específico.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:problemas con ajuste de datos experimentales

Publicado por principiante (2 intervenciones) el 11/11/2010 18:32:49
ahi van algunos datos...agradezco tu ayuda

Y T t
0 401.105 0
0.000175034 401.188 0.996
0.00036305 401.272 2.004
0.000564496 401.355 3
0.000778923 401.438 3.996
0.001009914 401.522 5.004
0.001257021 401.606 6.012
0.00151129 401.688 6.996
0.001778094 401.771 7.992
0.00205967 401.853 8.976
0.002390936 401.936 9.972
0.002807257 402.021 10.992
0.003315348 402.104 11.988
0.003948335 402.187 12.984
0.004709352 402.27 13.98
0.005577807 402.352 14.964
0.006616819 402.438 15.996
0.007804453 402.521 16.992
0.009309476 402.605 18
0.011300206 402.69 19.02
0.013840212 402.772 20.004
0.017256283 402.855 21
0.021838053 402.938 21.996
0.027957525 403.021 22.992
0.036000578 403.104 23.988
0.04621074 403.186 24.972
0.058797065 403.267 25.944
0.074175427 403.349 26.928
0.091963974 403.43 27.9
0.112303272 403.511 28.872
0.135670073 403.594 29.868
0.160832875 403.675 30.84
0.188930964 403.758 31.836
0.21887519 403.84 32.82
0.251220201 403.923 33.816
0.284904154 404.005 34.8
0.319646817 404.086 35.772
0.356219501 404.168 36.756
0.394146795 404.25 37.74
0.43380876 404.333 38.736
0.475139591 404.417 39.744
0.517070282 404.5 40.74
0.559911955 404.583 41.736
0.604251041 404.668 42.756
0.647727044 404.752 43.764
0.690423228 404.837 44.784
0.730504201 404.921 45.792
0.767878638 405.005 46.8
0.803447675 405.092 47.844
0.835640035 405.179 48.888
0.86319825 405.263 49.896
0.887651963 405.349 50.928
0.908433097 405.435 51.96
0.925637005 405.52 52.98
0.939896672 405.605 54
0.951752421 405.691 55.032
0.961201118 405.775 56.04
0.968966176 405.86 57.06
0.975188161 405.944 58.068
0.98028026 406.029 59.088
0.984384827 406.114 60.108
0.987605272 406.197 61.104
0.990190939 406.28 62.1
0.992267172 406.363 63.096
0.993931561 406.446 64.092
0.995283038 406.53 65.1
0.996354729 406.613 66.096
0.997222736 406.697 67.104
0.997906756 406.78 68.1
0.998451107 406.864 69.108
0.9988728 406.948 70.116
0.999193322 407.031 71.112
0.999437295 407.114 72.108
0.999617253 407.197 73.104
0.999753789 407.282 74.124
0.999858093 407.365 75.12
0.999939119 407.447 76.104
1 407.53 77.1
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:problemas con ajuste de datos experimentales

Publicado por Jorge (226 intervenciones) el 12/11/2010 00:14:19
Esto fue lo que intenté:

Primero, definí la función objetivo, que es que la diferencia entre las Y original y encontrada sea cero. A esta función la llamé OF_exp

------------------------------------
function U = OF_exp(C)
global Y T t

k = C(2)* exp(-C(3)./ T);
Y2 = 1 - exp(-(k .* t) .^ C(1));

U = norm(Y - Y2, 1);
------------------------------------

Después, armé la función que utiliza a fminsearch para minimizar la función ofbjetivo.
Grafico antes del ajuste y después de él.

------------------------------------

clear, clc, close all, format compact
global Y T t

data = [
%... aquí van tus datos
];

Y = data(:,1)';
T = data(:,2)';
t = data(:,3)';

fx = 'OF_exp';

% punto de arranque
C0 = [1 2 3]

% gráfica antes de ajuste
k = C0(2)* exp(-C0(3)./ T);
Y0 = 1 - exp(-(k .* t) .^ C0(1));
plot(Y,'g')
hold on
plot(Y0,'r')

% ajuste
[C, f, EF, out] = fminsearch(fx, C0)

% gráfica después de ajuste
k = C(2)* exp(-C(3)./ T);
Y2 = 1 - exp(-(k .* t) .^ C(1));

figure
plot(Y,'g')
hold on
plot(Y2,'b')

------------------------------------

Con C0 = [1 2 3], resulta
C = [4.9777 0.0218 -22.0922]

Con C0 = [0 0 3], resulta
C = 1.0e+003 * [ 0.0052 0.0000 -2.3071]

pero los resultados finales son casi idénticos. Hay muchas soluciones.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:problemas con ajuste de datos experimentales

Publicado por principiante (2 intervenciones) el 16/11/2010 18:58:10
muchísimas gracias Jorge..lo intentaré

saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:problemas con ajuste de datos experimentales

Publicado por Anna Juliana (1 intervención) el 10/10/2018 20:30:58
Hola no entiendo tu solucion encontraste las constantes C1,C2,C3 pero de que forma?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

RE:problemas con ajuste de datos experimentales

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 11/10/2018 04:54:43
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
function optimizacion1
 close all,
global Y T t
data = [
                 0	  401.105	0
                0.000175034	401.188 0.996
                0.00036305	401.272	2.004
                0.000564496	401.355	3
                0.000778923	401.438	3.996
                0.001009914	401.522	5.004
                0.001257021	401.606	6.012
                0.00151129	401.688	6.996
                0.001778094	401.771	7.992
                0.00205967	401.853	8.976
                0.002390936	401.936	9.972
                0.002807257	402.021	10.992
                0.003315348	402.104	11.988
                0.003948335	402.187	12.984
                0.004709352	402.27	13.98
                0.005577807	402.352	14.964
                0.006616819	402.438	15.996
                0.007804453	402.521	16.992
                0.009309476	402.605	18
                0.011300206	402.69	19.02
                0.013840212	402.772	20.004
                0.017256283	402.855	21
                0.021838053	402.938	21.996
                0.027957525	403.021	22.992
                0.036000578	403.104	23.988
                0.04621074	403.186	24.972
                0.058797065	403.267	25.944
                0.074175427	403.349	26.928
                0.091963974	403.43	27.9
                0.112303272	403.511	28.872
                0.135670073	403.594	29.868
                0.160832875	403.675	30.84
                0.188930964	403.758	31.836
                0.21887519	403.84	32.82
                0.251220201	403.923	33.816
                0.284904154	404.005	34.8
                0.319646817	404.086	35.772
                0.356219501	404.168	36.756
                0.394146795	404.25	37.74
                0.43380876	404.333	38.736
                0.475139591	404.417	39.744
                0.517070282	404.5	40.74
                0.559911955	404.583	41.736
                0.604251041	404.668	42.756
                0.647727044	404.752	43.764
                0.690423228	404.837	44.784
                0.730504201	404.921	45.792
                0.767878638	405.005 46.8
                0.803447675	405.092 47.844
                0.835640035	405.179 48.888
                0.86319825	405.263 49.896
                0.887651963	405.349 50.928
                0.908433097	405.435 51.96
                0.925637005	405.52 52.98
                0.939896672	405.605 54
                0.951752421	405.691 55.032
                0.961201118	405.775 56.04
                0.968966176	405.86 57.06
                0.975188161	405.944 58.068
                0.98028026	406.029 59.088
                0.984384827	406.114 60.108
                0.987605272	406.197 61.104
                0.990190939	406.28 62.1
                0.992267172	406.363 63.096
                0.993931561	406.446 64.092
                0.995283038	406.53 65.1
                0.996354729	406.613 66.096
                0.997222736	406.697 67.104
                0.997906756	406.78 68.1
                0.998451107	406.864 69.108
                0.9988728	406.948	70.116
                0.999193322	407.031 71.112
                0.999437295	407.114 72.108
                0.999617253	407.197 73.104
                0.999753789	407.282 74.124
                0.999858093	407.365 75.12
                0.999939119	407.447 76.104
                1	407.53 77.1
];
Y = data(:,1)';
T = data(:,2)';
t = data(:,3)';
% punto de arranque 
C0 = [1 2 3] 
% gráfica antes de ajuste 
k = C0(2)* exp(-C0(3)./ T); 
Y0 = 1 - exp(-(k .* t) .^ C0(1)); 
figure(1)
plot(Y,'g')
hold on 
plot(Y0,'r')

% ajuste 
C= fminsearch(@(C) OF_exp(C), C0) 
% gráfica después de ajuste 
k = C(2)* exp(-C(3)./ T); 
Y2 = 1 - exp(-(k .* t) .^ C(1)); 
figure(2) 
plot(Y,'g')
hold on 
plot(Y2,'b')
end

function U = OF_exp(C) 
global Y T t 
k = C(2)* exp(-C(3)./ T); 
Y2 = 1 - exp(-(k .* t) .^ C(1)); 
U = norm(Y - Y2, 1); 
end

1
2
3
4
5
>> optimizacion1
C0 =
     1     2     3
C =
    4.9777    0.0218  -22.0922

Saludos
JOSE JEREMIAS CABALLERO
Asesor de Proyectos con Matlab
Servicios de programación matlab


http://matlabcaballero.blogspot.com
https://www.facebook.com/matlabcaballero
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar