필터 지우기
필터 지우기

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