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 шагов слишком рано.

0 ответов

Другие вопросы по тегам