Matlab - ejercicio1.3

 
Vista:

ejercicio1.3

Publicado por Ana (4 intervenciones) el 23/06/2008 13:01:34
buenas, he conseguido hacer parte del segundo ejercicio. Ahí va mi codigo:

>> U=[16 82 39 86 86 73 07 32 72 35 12 82 87 21 30 30 60 53 89 92];
>> f=inf;
>> n=20;
>> for i=1:n
x(i)=0.48 + 0.0198*(U(i)/100);
fx(i)=polyval([1/4 -17/36 5/24 0 0],x(i));
if fx(i) < f
f=fx(i);

end
end

lo que me da como resultados si quiero imprimir los valores aleatorios (x) y la funcion de x, así como el valor minimo de la funcion...

>> fx

fx =

Columns 1 through 14

0.0090 0.0088 0.0089 0.0087 0.0087 0.0088 0.0090 0.0089 0.0088 0.0089 0.0090 0.0088 0.0087 0.0090

Columns 15 through 20

0.0089 0.0089 0.0088 0.0089 0.0087 0.0087

>> f

f =

0.0087

>> x

x =

Columns 1 through 14

0.4832 0.4962 0.4877 0.4970 0.4970 0.4945 0.4814 0.4863 0.4943 0.4869 0.4824 0.4962 0.4972 0.4842

Columns 15 through 20

0.4859 0.4859 0.4919 0.4905 0.4976 0.4982

Lo que pasa es que no se como mostrarlo en una grafica, he pensado en poner un plot con la x y fx pero no sé si lo que representa es lo correcto.

Ademas, ¿como puedo hacer para que se marquen en la grafica los valores minimos qe el algoritmo vaya encontrando?
¿y marcar el minimo (f = 0.0087) con una 'x'?

Graciass!!Saludos
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:ejercicio1.3 (se me olvidaba el enunciado)

Publicado por Ana (4 intervenciones) el 23/06/2008 13:04:25
La evolución de los precios de cierto tipo de pescado en función de un índice de
calidad del agua esta descrita a través de la función f(x) = x4/4 -17x3/36 + 5x2/24, para
un intervalo de x ∈ [-0.5,1.5]. Se desea encontrar la solución al problema de encontrar
el mínimo valor del pescado mediante el método de búsqueda aleatoria pura.

Necesitamos un procedimiento para generar valores aleatorios de x en el intervalo
[-0.5, 1.5]. Utilizar los incluidos en la tabla 1.1 que se encuentran en el fichero
Numeros.txt y transformar el valor u(i) mediante x(i)=-0.48+0.0198u(i).
Mostrar una gráfica de f(x) y marcar sobre ella los sucesivos valores mínimos que el
algoritmo vaya encontrando. Por último marcar con un símbolo ‘x’ el mínimo
encontrado.
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:ejercicio1.3 (se me olvidaba el enunciado)

Publicado por Kike (304 intervenciones) el 25/06/2008 05:54:02
No entendí lo que hace tu programa, pero te dejo un ejemplo sencillo de una función que encuentra los valores mínimos y los grafica (no es búsqueda aleatoria pura ni otro algoritmo similar). Espero que sea esto te sea útil.

% Sea el vector x
x=0:0.05:10;

% Sea la función f(x) = cos(x)+cos(3*x)+sin(2*x)+sin(3*x)
f=cos(x)+cos(3*x)+sin(2*x)+sin(3*x);

% Encuentro los valores mínimos de f(x). Si el (k-1)-ésimo elemento es
% mayor que el k-ésimo elemento, significa que la función va decreciendo.
% Si el k-ésimo elemento es menor que el (k+1)-ésimo elemento, significa
% que la función va creciendo. Si estas condiciones se presentan al mismo
% tiempo para un k-ésimo elemento, significa que es un punto de inflexión,
% y es un mínimo relativo.
minimosx=[ ];
minimosf=[ ];
for k=2:length(f)-1
if f(k-1)>f(k) && f(k)<f(k+1)
minimosx(end+1)=x(k);
minimosf(end+1)=f(k);
end
end

% Grafico f(x) versus x
plot(x,f);
hold on;

% Grafico los mínimos y los represento con un diamante (rombo)
plot(minimosx,minimosf,'rd');

% Grafico el menor de los mínimos (mínimo absoluto en este intervalo de x) y lo
% represento con un diamante verde.
minimox=minimosx(find(minimosf==min(minimosf)));
minimof=min(minimosf);
plot(minimox,minimof,'d','MarkerSize',10,'MarkerEdgeColor','k','MarkerFaceColor','g');
grid on;

disp('El mínimo se encuentra en:')
fprintf('x=%f y=%f',minimox,minimof);
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