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

2 views (last 30 days)
Anastasya
Anastasya on 10 Jun 2023
Edited: Torsten on 10 Jun 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 Comments
Anastasya
Anastasya on 10 Jun 2023
how then to calculate M1?
M1 =@(x) max(abs(diff(f(x), x, 2)));?
Torsten
Torsten on 10 Jun 2023
Edited: Torsten on 10 Jun 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 ?

Sign in to comment.

Answers (0)

Categories

Find more on Mathematics and Optimization in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!