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

조회 수: 1 (최근 30일)
Anastasya
Anastasya 2023년 6월 10일
편집: Torsten 2023년 6월 10일

Код:
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
Anastasya
Anastasya 2023년 6월 10일
how then to calculate M1?
M1 =@(x) max(abs(diff(f(x), x, 2)));?
Torsten
Torsten 2023년 6월 10일
편집: Torsten 2023년 6월 10일
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 ?

댓글을 달려면 로그인하십시오.

답변 (0개)

카테고리

Help CenterFile Exchange에서 Mathematics and Optimization에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by