Se queda paralizado no corre todo el código y no me dice el error tampoco

12 次查看(过去 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

采纳的回答

Walter Roberson
Walter Roberson 2023-11-27
编辑:Walter Roberson 2023-11-28
e=0.11 %epsilion
e = 0.1100
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
e = 0.0100
%% Desarrollo del algoritmo %%
xm= (a+b)/2; % Punto medio del intervalo
xa= (a+b)/2 - e/2 % limite inferior
xa = 0.4950
xb= (a+b)/2 + e/2 % limite superior
xb = 0.5050
%% 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
K = 5×4
-1.0000 -0.2525 0.5050 -0.2425 -0.2525 0.1212 0.5050 0.1313 -0.2525 -0.0656 0.1313 -0.0556 -0.0656 0.0278 0.1313 0.0378 -0.0656 -0.0189 0.0378 -0.0089
%% Grafica prueba 1 %%
x= -5:0.1:5;
y= exp(sin(x))-x;
toc %tiempo final de ejecucion
Elapsed time is 4.336120 seconds.
plot(x,y)
title('Búsqueda Dicotómica')
hold on
disp('El intervalo final es:'), [a(end) b(end)]
El intervalo final es:
ans = 1×2
-0.0656 0.0378
disp('La aproximacion buscada es:'), res=(a(end)+ b(end))/2
La aproximacion buscada es:
res = -0.0139
disp('La aproximacion del minimo es:'), f(res)
La aproximacion del minimo es:
ans = 1.0001
disp('El numero de iterados es:'), iter
El numero de iterados es:
iter = 5

更多回答(1 个)

Torsten
Torsten 2023-11-27
编辑:Torsten 2023-11-27
Do you see why your code fails ?
f=@(x)exp(sin(x))-x;
f(-1)
ans = 1.4311
f(2)
ans = 0.4826
x=-1:0.01:2;
plot(x,f(x))
You must start with two points xa, xb for which f(xa)*f(xb) <= 0, and hold this condition until xb-xa <= eps.

类别

Help CenterFile Exchange 中查找有关 Introduction to Installation and Licensing 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by