Matlab: найти результат с точностью до определенного десятичного знака с минимальными итерациями
Я использую метод численного интегрирования для аппроксимации интеграла. Мне нужно использовать минимальное количество итераций, которые дают правильный ответ до 5 десятичных знаков.
Я не могу найти общий способ сделать это. Я смог заставить его работать только в некоторых случаях.
Вот что я попробовал:
%num2str(x,7) to truncate the value of x
xStr = num2str(x(n),7);
x5dp(n) = str2double(xStr); %convert back to a truncated number
%find the difference between the values
if n>1 %cannot index n-1 = 0
check = x5dp(n)-x5dp(n-1);
end
Это позволит найти первый экземпляр, в котором первые 5dp одинаковы, не принимая во внимание, что изменения могут произойти за пределами этой точки, что произошло, итерация, которую я ищу, была около 450, но остановилась на 178 из-за к этому.
Тогда я попробовал это
while err>errLim & n<1000
...
r = fix(x(j)*1e6)/1e1 %to move the 6th dp to the 1stplace
x6dp = rem(r,1)*10 %to 'isolate' the value of the 6th dp
err = abs(x(j)-x(j-1)) % calculate the difference between the two
%if the 6th decimal place is greater than 5 and err<1e-6
% then the 6th decimal place won't change the value of the 5th any more
if err<errLim && x6dp<5
err=1;
end
...
end
Это работает для одного метода и функции, которую я протестировал один. Однако, когда я вставил его в другой метод для другой функции, я получаю окончание итерации до достижения конечного результата. последние 4 результата:4.39045203734423 4.39045305948901 4.39045406364900 4.39045505024365
Тем не менее, ответ мне нужен на самом деле 4.39053
, это остановило итерацию около 300 шагов слишком рано.