Se queda paralizado no corre todo el código y no me dice el error tampoco
2 次查看(过去 30 天)
显示 更早的评论
%% Datos de entrada %%
f=inline('exp(sin(x))-x'); %funcion unimodal
a=-1; %Limite inferior del intervalo
t=0.11; %tolerancia del metodo
%% Definicion del usuario %%
b=2; %Limite inferior del intervalo
e=0.11 %epsilion
%% Desarrollo del algoritmo %%
xm= (a+b)/2; % Punto medio del intervalo
xa= (a+b)/2 - e/2 % limite inferior
xb= (a+b)/2 + e/2 % limite superior
%% Evaluaciones por el metodo de Bolzano %%
fl= f(xa); % Altura en extremo izquierdo
fr= f(xb); % Altura en extremo derecho
%% Iteracion %%
iter=0; % inicio del contador
% Grafico inicial
figure(1)
plot(xa,fl,'*g',xb,fr,'*k') %grafico de las primeras evaluaciones
hold on;
while abs(b-a)>=t % Parametro de Parada
iter=iter+1; %Actualiza el contador
if fl>fr %Verificacion f(xa)>f(xb)
a=xa; %Actualizacion del limite inferior
elseif fl<=fr %Verificacion f(xa)<=f(xb)
b=xb; %Actualizacion del limite derecho
end
xm= (a+b)/2; %Actualizacion Punto medio
xa= (a+b)/2 - e/2; %Actualizacion limite inferior
xb= (a+b)/2 + e/2; %Actualizacion limite superior
fl= f(xa); % Altura en extremo izquierdo
fr= f(xb); % Altura en extremo derecho
K(iter,:)=[a xa b xb]; %Registro de intervalos
%figure(iter+1)
plot(xa,fl,'*',xb,fr,'OR') %Grafica de iteraciones
end
K %Matriz con todos los intervalos e iterados
%% Grafica prueba 1 %%
x= -5:0.1:5;
y= exp(sin(x))-x;
toc %tiempo final de ejecucion
plot(x,y)
title('Búsqueda Dicotómica')
hold on
disp('El intervalo final es:'), [a(end) b(end)]
disp('La aproximacion buscada es:'), res=(a(end)+ b(end))/2
disp('La aproximacion del minimo es:'), f(res)
disp('El numero de iterados es:'), iter
0 个评论
采纳的回答
Walter Roberson
2023-11-27
编辑:Walter Roberson
2023-11-28
e=0.11 %epsilion
That epsilon is too large -- large enough that it keeps expanding the search range instead of it being narrowed. Try more like 0.01
%% Datos de entrada %%
f=inline('exp(sin(x))-x'); %funcion unimodal
a=-1; %Limite inferior del intervalo
t=0.11; %tolerancia del metodo
%% Definicion del usuario %%
b=2; %Limite inferior del intervalo
e=0.01 %epsilion
%% Desarrollo del algoritmo %%
xm= (a+b)/2; % Punto medio del intervalo
xa= (a+b)/2 - e/2 % limite inferior
xb= (a+b)/2 + e/2 % limite superior
%% Evaluaciones por el metodo de Bolzano %%
fl= f(xa); % Altura en extremo izquierdo
fr= f(xb); % Altura en extremo derecho
%% Iteracion %%
iter=0; % inicio del contador
% Grafico inicial
figure(1)
plot(xa,fl,'*g',xb,fr,'*k') %grafico de las primeras evaluaciones
hold on;
while abs(b-a)>=t % Parametro de Parada
iter=iter+1; %Actualiza el contador
if fl>fr %Verificacion f(xa)>f(xb)
a=xa; %Actualizacion del limite inferior
elseif fl<=fr %Verificacion f(xa)<=f(xb)
b=xb; %Actualizacion del limite derecho
end
xm= (a+b)/2; %Actualizacion Punto medio
xa= (a+b)/2 - e/2; %Actualizacion limite inferior
xb= (a+b)/2 + e/2; %Actualizacion limite superior
fl= f(xa); % Altura en extremo izquierdo
fr= f(xb); % Altura en extremo derecho
K(iter,:)=[a xa b xb]; %Registro de intervalos
%figure(iter+1)
plot(xa,fl,'*',xb,fr,'OR') %Grafica de iteraciones
end
K %Matriz con todos los intervalos e iterados
%% Grafica prueba 1 %%
x= -5:0.1:5;
y= exp(sin(x))-x;
toc %tiempo final de ejecucion
plot(x,y)
title('Búsqueda Dicotómica')
hold on
disp('El intervalo final es:'), [a(end) b(end)]
disp('La aproximacion buscada es:'), res=(a(end)+ b(end))/2
disp('La aproximacion del minimo es:'), f(res)
disp('El numero de iterados es:'), iter
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!