2014-04-15 57 views
0

我想在我的while循环中使用OR语句,以便在两个条件中的任何一个不满足时循环终止。 (1)i必须小于或等于nmax,并且(2)R(i,i)-R(i-1,i-1)的绝对值小于规定的增量虽然循环和逻辑运算符

这里是我的代码(一切似乎工作除了条件的同时细如函数执行,直至达到n最大每次):

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循环定义中使用&,'&&',而不是或者''''。只要'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