如何使代码打印原始值然后打印新值?

时间:2019-11-09 11:02:18

标签: octave

我有一个写Matlab程序的作业,但是我面临的问题是程序正在打印更新的值。我需要先打印旧值,然后再打印新值。

我尝试使用向量和循环来完成它,但是我有点迷茫了。

for i=2:10000   %Starting from 2 since Octave Index starts from 1.

xmid=(xu+xl)/2;   %Finding the middle Value
if f(xl)*f(xmid)>0  %Test first condition for bisection.
    xl=xmid;
else
    xu=xmid;
    end

fprintf('%2i \t %f \t %f \t %f \n', i-1, xl, xu, xmid);   

xnew(1)=0;
xnew(i)=xmid;
if abs((xnew(i)-xnew(i-1))/xnew(i))<tol,break,end  %Test the error value.
    end

在上述代码中,当f(xl)*f(xmid)>0时,程序应打印旧的xl值,然后将其更新为xmid,并且对xuxmid也是如此。

2 个答案:

答案 0 :(得分:0)

您可以尝试以下方法:

    oldxl = xl;
    oldxu = xu;
    // your code that updates xl and xu
    printf("oldxl: %f; oldxu: %f\n", oldxl, oldxu);

答案 1 :(得分:0)

  • 在评估条件之前先获取边界的旧值

  • 然后显示它们

  • 在for循环之前初始化xnew,例如xnew = zeros(1,10000);

通读评论

% Initialization for illustration
f = @(x)2*x-1;
xu = 10;
xl = 5;
tol = 0.5;
xnew = zeros(1, 10);

fprintf('\t  xlold \t  xlnew\t\t  xuold \t  xunew \t midlle\n\n');  
for i=2:10  %Starting from 2 since Octave Index starts from 1.

    xmid=(xu+xl)/2;   %Finding the middle Value
    % get the old bounds first 
    xlold = xl;
    xuold = xu;
    if f(xl)*f(xmid)>0  %Test first condition for bisection.
        xl=xmid;
    else
        xu=xmid;
    end

    % add xold and xulod here
    fprintf('%2i \t %f \t %f \t %f \t %f \t %f \n', i-1, xlold,xl, xuold,xu, xmid);   

    xnew(1)= 0;
    xnew(i)= xmid;
    if abs((xnew(i)-xnew(i-1))/xnew(i))<tol %Test the error value.
       break;
    end  
end

结果

      xlold       xlnew       xuold       xunew      midlle

 1   5.000000    7.500000    10.000000   10.000000   7.500000 
 2   7.500000    8.750000    10.000000   10.000000   8.750000