1

大家好,我在编写算法的编程代码时遇到了一个问题,如下所示

当定义为(当前近似值-先前近似值)/当前近似值的近似误差小于 0.01 时,该程序将终止。它可以简化为 (f(xr)i+1 - f(xr)i)/f(xr)i+1。下面是我编写的代码,我真的很想知道如何编写一个迭代,当遇到上述情况时该迭代将停止。

xl = input('Enter lower limit : ');

xu = input('Enter upper limit : ');

xr = (xl+xu)/2;

R = 3; V = 30;

fl = (pi*R*xl^2)-(pi*(xl^3)/3)-V;    % between is there anyway can call these functions 

fu = (pi*R*xu^2)-(pi*(xu^3)/3)-V;      other than typing 3 times

fh = (pi*R*xr^2)-(pi*(xr^3)/3)-V;


while relative error is less than 0.01 then display value of xr

if fl*fu<0

    xu = xr;


elseif fl*fu>0

    xl = xr;


end

end
4

3 回答 3

0

您忘记执行步骤 3(c)。

如说明所述,您也没有在步骤 3(a) 和 3(b) 中“返回到步骤 2”。为此,您需要按照此处while所述创建一个循环;将保持循环的条件放入您的while循环中。如果该条件评估为假,则应按照步骤 3(c) 退出循环。

使用 CONTINUE 完成步骤 3(a) 和 3(b) 中的“返回步骤 2”部分;将执行移回循环的顶部。另请参见MATLAB 中的跳转命令

祝你好运。

于 2013-03-04T16:28:30.847 回答
0

你可以把计算放在一个函数中:

function f = some_function(x)
    R = 3;
    V = 30;
    f = (pi*R*x^2)-(pi*(x^3)/3)-V; 

您可以尝试 100 次通行证(为了安全起见):

for i=1:100
    xr_old = xr
    fr_old = fr

    xr = (xl+xu)/2;
    fr = some_function(xr);

    if abs((xr - xr_old)/xr) < MIN_STEP
        break
    end

    temp = fl*fr
    if temp < 0:
        xu = xr
        fu = fr
    else if temp > 0:
        xl = xr
        fl = fr
    end
end
于 2013-03-04T16:31:26.037 回答
0

我现在更新了代码,我可以运行它了。我用 f(x)=x^2-2 对其进行了测试。它在 6 次迭代中收敛到 1.4141。我建议您将该代码与您必须了解的代码进行比较,以了解以前不适合您的代码。这将是一次很好的学习经历。

>> example(1,2);
Crossing found after 6 iterations: 1.414062

其中 example.m 如下:

function xr = root(xl,xu)

MAX_NUMBER_ITERATIONS = 1000;
MAX_DELTA=.01;

numberIterations=0;
xr_old=xu;
xr = (xl+xu)/2;

while ((numberIterations<MAX_NUMBER_ITERATIONS) & (abs(xr_old-xr)>=MAX_DELTA))
    numberIterations=numberIterations+1;
    xr_old = xr;;

    product=f(xl)*f(xr);
    if product<0
        xu = xr;
        xr = (xl+xu)/2;
        continue;  
    elseif product>0
        xl = xr;
        xr = (xl+xu)/2;
        continue;
    else
        break;
    end
end
fprintf('Crossing found after %d iterations: %f\n',numberIterations,xr)

end


function y = f(x)
y=x^2-2;
end
于 2013-03-04T16:33:15.390 回答