방정식의 근원을 찾기 위해 Matlab에서 이분법을 사용하려고합니다. q
은 10-3 단계에서 2000-3000까지 다양합니다. 내 코드는 비록 비록 내가 plot
문을 가지고있는 그래프를 인쇄하지 않습니다 그리고 내가 그것을 실행하면 무한 루프를 만드는 것 같아요. 그리고 내가 강제로 닫지 않으면 프로그램을 닫을 수 없다. 내 코드에서이 문제를 일으킬만한 것을 볼 수 없지만 누군가 나를 도울 수 있습니까?Matlab은 플롯하지 않고 끝없는 루프
function myFunction
a = 20;
b = 40;
tol = 1e-4;
q = 2000:10:3000;
t = zeros(101,1);
for i=(1:length(q))
f = @(x) (((1800).*log((160000)./(160000 - (x.*q(i)))) - (9.812).*x)./750) - 1;
t(i) = bisect(f,a,b,tol);
end
figure(1)
plot(q,t)
function c=bisect(f,a,b,tol)
k=0;
while b-a > tol
c = (a-b)/2;
if sign(f(c)) == sign(f(b))
b=c;
else
a=c;
end
k=k+1;
end
end
end
그것은 또한 내가 전에이 bisect
방법을 사용하고 그렇게 나는 문제가 그 기능을 생각하지 않는다 작동 않음을 유의해야한다.
시도 단지 i를 t (I) 아래의 문자가있는 줄을 추가 = 양분 (F, ...) 및 함수를 실행하십시오. 그런 다음 매 반복마다 루프 카운터가 MATLAB 명령 창에 인쇄되는 것을 볼 수 있습니다. 당신이 기대하는대로하고 있습니까? 정말 천천히가는거야? 그게 당신에게 뭐라고 말합니까? –
실제로 그것을 추가하여 시도 :'fprintf ('% i', i);'아무 것도 출력하지 않습니다. –
for 루프에서 멈추지 않고 while 루프에서 멈추게됩니다. for 루프는 제거 할 수 있으며 동작을 변경하지는 않습니다. 함수 f가 루트를 가지고 있습니까? 나는 그것이 당신의 기능과 관련이 있다고 생각합니다 ... 아니면 초기 값이 적절하게 선택되지 않았습니다. – thewaywewalk