Неверный вывод при запуске программы

2 vues (au cours des 30 derniers jours)
Anastasya
Anastasya le 10 Juin 2023
Modifié(e) : Torsten le 10 Juin 2023

Код:
f = @(x) x - 5 - 1/3*cos(2*x+1) + (2*x)/(2+x^2);
g = @(x) x - f(x);
a = 0; b = 1; % интервал, на котором ищем решение
M1 = @(x) max(abs(4*del2(f(x)))); % оценка модуля производной второго порядка
eps = 1e-5; % заданная точность
N_apr = @(x) ceil(log(M1(x)*(b-a)/eps)/log(2)); % априорная оценка числа итераций
x0 = (a+b)/2; % начальное приближение
N_post = 0; % счетчик числа итераций
while true
x1 = g(x0);
N_post = N_post + 1;
if abs(x1-x0) < eps*(1-M1(x1))/M1(x1) % проверка условия окончания итераций
break;
end
x0 = x1;
end
disp(['Приближенное решение: x = ', num2str(x1)]);
disp(['Число итераций: N = ', num2str(N_post)]);
disp(['Априорная оценка числа итераций: N_apr = ', num2str(N_apr(x1))]);

Вывод:
Приближенное решение: x = 4.4168
Число итераций: N = 1
Априорная оценка числа итераций: N_apr = -Inf

Как исправить то, что в N_apr = -inf?

  4 commentaires
Anastasya
Anastasya le 10 Juin 2023
how then to calculate M1?
M1 =@(x) max(abs(diff(f(x), x, 2)));?
Torsten
Torsten le 10 Juin 2023
Modifié(e) : Torsten le 10 Juin 2023
syms x
f = x - 5 - 1/3*cos(2*x+1) + (2*x)/(2+x^2);
d2f = diff(f,x,2)
d2f = 
absd2f = abs(d2f)
absd2f = 
Now you take "max" of this expression. But what does it mean ? Determine the x that makes this expression maximum over an interval ?

Connectez-vous pour commenter.

Réponses (0)

Catégories

En savoir plus sur Mathematics and Optimization dans Help Center et File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by