我有一个写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
也是如此。
答案 0 :(得分:0)
您可以尝试以下方法:
oldxl = xl;
oldxu = xu;
// your code that updates xl and xu
printf("oldxl: %f; oldxu: %f\n", oldxl, oldxu);
答案 1 :(得分:0)
在评估条件之前先获取边界的旧值
然后显示它们
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