Как заставить код печатать исходное значение, а затем печатать новое значение? - PullRequest
0 голосов
/ 09 ноября 2019

У меня есть домашняя работа, чтобы написать программу 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 и то же самое для xu и xmid.

Ответы [ 2 ]

0 голосов
/ 09 ноября 2019
  • Сначала получите старые значения границ до оценки условия

  • Затем отобразите их

  • Инициализировать xnew перед циклом for, например xnew = нули (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 

0 голосов
/ 09 ноября 2019

Вы можете попробовать это:

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