2014-04-15 2 views
0

내 while 루프에서 OR 문을 사용하여 두 조건 중 하나가 충족되지 않을 때마다 루프가 종료되도록하려고합니다. (2) R (i, i) -R (i-1, i-1)의 절대 값이 지정된 델타보다 작음While 루프 및 논리 연산자

(1) i는 nmax보다 작거나 같아야한다. (Nmax 개의 모든 시간에 도달 할 때까지 함수가 실행될 때 모든 것이 동안 조건을 제외하고 잘 작동하는 것 같다)

여기 내 코드입니다 :

function [R] = romberg(f,a,b,delta,nmax) 
    R=zeros(nmax,nmax); 
    R(1,1)=(f(a)+f(b))*(b-a)/2; 
    i=2; 
    while i<nmax || abs(R(i,i)-R(i-1,i-1))<delta 
     m=2^(i-1); 
     R(i,1)=trapez(f,a,b,m); 
     for j=2:i 
      R(i,j)=R(i,j-1)+(R(i,j-1)-R(i-1,j-1))/(4^j-1); 
     end 
     i=i+1; 
    end 
    R 
+0

while 루프 정의에 and,'|| '가 아닌', &&'를 사용하고 싶습니다. 당신은'i David

+0

나는 똑같이 생각하고 그것을 시도했다. 그러나, && 루프를 사용하면 1 회 반복 후에 종료됩니다. – Matt

+0

오류가 발생하는 동안 루프가 있다고 가정하고 'abs (R (i, i) -R (i-1, i-1))> delta' 또는 뭔가가 델타보다 큽니다. – David

답변

1

이 시도합니다. while 루프의 경우 abs(R(i,i)-R(i-1,i-1)) 조건에 몇 가지 문제가있었습니다.

function [R] = romberg(f,a,b,delta,nmax) 
    R=zeros(nmax,nmax); 
    R(1,1)=(f(a)+f(b))*(b-a)/2; 
    i=2; 
    E=2*delta; 
    while i<nmax && E>delta 
     m=2^(i-1); 
     R(i,1)=trapez(f,a,b,m); 
     for j=2:i 
      R(i,j)=R(i,j-1)+(R(i,j-1)-R(i-1,j-1))/(4^j-1); 
     end   
     E=abs(R(i,i)-R(i-1,i-1)); 
     i=i+1; 
    end