Ньютон Рафсон в MATLAB

Я хотел бы реализовать следующее: я написал сценарий, который выполняет алгоритм Ньютона Рафсона для моей конкретной функции. Теперь я хотел бы написать сценарий, который повторяется, используя предыдущий найденный ноль в качестве следующей начальной точки:

x=zeros(1,31);
for i=1:31
    x(i)=(i-1)/10;
end
y0=0;
for i=1:length(x)
    y0=newton(x(i),y0)
end

Итак, я хочу, чтобы этот скрипт выполнял newton(x,y0). Итак, он начнется с newton (0,0), он найдет новое значение y0, а затем я хочу, чтобы скрипт выполнил newton (0,1, y0) и т. д. Я хочу, чтобы эти значения отображались в таблице вместе с количеством итераций, необходимых для нахождения значения y0.

Надеюсь, мой вопрос понятен. Спасибо с уважением.

Опять же: у меня есть вектор x с элементами 0, 0.1, 0.2, ..., 3. Когда я реализую x (i) с начальным значением y0, newton (x, y) даст мне значение. Затем я хочу, чтобы скрипт снова выполнил newton(x,y) со значением x(2) для x и предыдущим найденным y0. Так что мне нужен какой-то цикл, но я не могу это сделать.. :(

EDIT
Это моя newton-функция:

function nulpunt=newton(x,y0)

tolerantie=1e-8;
iteraties=0;

while (abs(functie1(y0,x))>tolerantie)
    y0=y0-functie1(y0,x)/afgeleide_functie1(y0);
    iteraties=iteraties+1;
end

if iteraties==100;
    fprintf('Maximaal aantal iteraties bereikt')
else
    fprintf('De benadering van het nulpunt y*(%.2f) is %.4f gevonden in %d iteraties.\n',x,y0,iteraties)
end
end

person Community    schedule 17.01.2014    source источник
comment
Ваша функция также возвращает количество итераций, необходимых для поиска y0?   -  person Chris Taylor    schedule 17.01.2014
comment
1.) Рассматривали ли вы возможность размещения функции внутри цикла for или while? 2.) Где вы хотите распечатать количество итераций и y0 значений? На экране, в файле?   -  person Schorsch    schedule 18.01.2014
comment
на экране, как мне это настроить?   -  person    schedule 18.01.2014


Ответы (1)


Ваш цикл уже должен использовать предыдущий y0 каждый раз, когда он работает.
Если вы хотите отобразить y0 и количество итераций в командном окне Matlab, вам сначала нужно изменить newton-функцию, чтобы она возвращала не только y0, но и также количество итераций, iteraties:

function [nulpunt, iteraties]=newton(x,y0)

Кроме того, ваша функция должна фактически вернуть окончательный y0as nulpunt:

if iteraties==100;
    fprintf('Maximaal aantal iteraties bereikt')
    nulpunt = 0; % in this case, no solution was found, return the baseline value;
else
    fprintf('De benadering van het nulpunt y*(%.2f) is %.4f gevonden in %d iteraties.\n',x,y0,iteraties)
    nulpunt = y0;
end

чтобы отображать количество итераций и y0 после каждого выполнения newton, добавьте эти две строки после вызова функции:

[y0, iteraties] = newton(x(i),y0);
disp(['This point was found: ',num2str(y0)])
disp(['It took ',num2str(iteraties),' iterations.'])  

На самом деле это может быть излишним, так как ваша функция уже выводит, какие y0 она нашла и сколько времени это заняло.

person Schorsch    schedule 18.01.2014
comment
В Matlab я получаю сообщение об ошибке, что ''nulpunt'' не назначен во время вызова. Кроме того, сама функция Ньютона работает нормально, пока вы даете ей значение для x и y0. Проблема в том, что мне нужен цикл, который при заданном значении x и y0 использует найденное значение в качестве нового y0. - person ; 18.01.2014
comment
Попробуй снова. Ваша функция на самом деле должна присвоить значение nulpunt- Я полагаю, вам нужно y0 для этого. У вас уже должен быть вывод решения на экран. Пока вы находитесь внутри цикла, значение y0 будет перезаписываться после каждого вызова newton, поэтому оно будет использоваться в качестве начального значения для следующего запуска. - person Schorsch; 18.01.2014