Это сообщение об ошибке запускается, когда отправляется сообщение перед отправкой заголовков HTTP (с помощью setcookie
или header
). Общие причины вывода чего-либо перед заголовками HTTP:
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; Чтобы избежать этого, просто оставьте закрытие ?>
- это не обязательно. g2] в начале файла php. Изучите ваши php-файлы с помощью шестнадцатеричного редактора, чтобы узнать, так ли это. Они должны начинаться с байтов 3F 3C
. Вы можете безопасно удалить спецификацию EF BB BF
с начала файлов.
echo
, printf
, readfile
, passthru
, код до
и т. д. display_errors
php.ini. Вместо того, чтобы сбой при ошибке программиста, php молча фиксирует ошибку и выдает предупреждение. Хотя вы можете изменить конфигурации display_errors
или error_reporting , вы должны скорее исправить эту проблему. Основными причинами являются доступ к неопределенным элементам массива (например, $_POST['input']
без использования empty
или isset
, чтобы проверить, установлен ли вход) или используя неопределенная константа вместо строкового литерала (как в $_POST[input]
, обратите внимание на недостающие кавычки). Включение буферизации вывода должно устранить проблему; все выходные данные после вызова ob_start
буферизуются в памяти до тех пор, пока вы не отпустите буфер, например. с ob_end_flush
.
Однако, хотя буферизация вывода исключает проблемы, вы должны действительно определить, почему ваше приложение выводит тело HTTP перед заголовком HTTP. Это будет похоже на телефонный звонок и обсуждение вашего дня и погоды, прежде чем сообщить вызывающему, что у него неправильный номер.
Вам нужно только hold on
, чтобы каждый сюжет добавлялся к предыдущим. По умолчанию каждый новый сюжет заменяет предыдущий.
Кроме того, я изменил маркер с '.'
на 'o'
для лучшей видимости.
Вы также можете включить drawnow
(и, возможно, подходящий pause
) после каждого plot
, чтобы рисунок был немедленно обновлен. Это полезно, если вы хотите, чтобы линия, обозначенная маркерами, «росла».
f = @(x) (x).^2 - 10;
f_deriv = @(x) 2*x;
x0 = 1;
x_true = sqrt(10);
x_save = (x0);
hold on %%% New line
for jj = 1:20
plot(jj,abs(x_save(jj)-x_true),'ko'); %%% Modified line
x_new = x0 - f(x0)/f_deriv(x0);
x_save(1+jj,1) = x_new;
x0 = x_new;
end
xlim([0 20]);
ylim([0 2.5]);
xticks(0:20);
yticks(0:0.1:2.5);
В вашей реализации вы генерируете 1 график за итерацию в цикле for. Это приводит к 20 участкам с 1 очком за участок, что не является желаемым результатом.
Ниже приведен код для генерации 1 сюжета с 21 точкой.
f = @(x) (x).^2 - 10;
f_deriv = @(x) 2*x;
x0 = 1;
x_true = sqrt(10);
x_save = (x0);
for jj = 1:20
% Don't plot here. Wait until all data is collected.
x_new = x0 - f(x0)/f_deriv(x0);
x_save(1+jj,1) = x_new;
x0 = x_new;
end
% Plot here. All data has been collected.
plot(0:20',abs(x_save-x_true),'kx');
xlim([0 20]);
ylim([0 2.5]);
xticks(0:20);
yticks(0:0.1:2.5);
РЕДАКТИРОВАТЬ: для решения проблемы пропущенных точек с помощью semilogy
вместо plot
.
semilogy
вычисляет лог значений. log(0) = -Inf
Ниже приведен пример изменения координат, чтобы избежать вычитания двух больших чисел.
% Original problem parameters
x0 = 1;
x_true = sqrt(10);
% Change of co-ordinates
% u = x - sqrt(10);
% f(x) = g(u(x))
g = @(u) u^2 + 2*x_true*u;
g_deriv = @(u) 2*u + 2*x_true;
u0 = x0 - x_true;
u_save = u0;
for jj = 1:20
u_new = u0 - g(u0)/g_deriv(u0);
u_save = [u_save u_new];
u0 = u_new;
end
semilogy(0:20, abs(u_save - 0), 'kx')
xlim([0 20]);
Вы заметите, что точки за 6 итераций по-прежнему исчезают, потому что ошибка все еще меньше точности машины (~ 1e-15). Однако ошибка снова не увеличивается.
Если вы хотите повысить точность своих вычислений, вы можете обратиться к функции vpa
.
https://www.mathworks.com/help/symbolic/increase-precision-of-numeric-calculations.html