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

2 ビュー (過去 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 Center および File ExchangeMathematics and Optimization についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by