Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > Алгоритм Бернулл


Автор: killc0de 13.3.2013, 08:52
Здравствуйте, по учебе возник вопрос с реализацией алгоритма нахождения максимального корня полинома методом Бернулли. Получилось реализовать, пример, данный в книге моя программа решает, а любой другой полином отказывается, не знаю что и делать. Если кто-нибудь сталкивался с этой темой, очень прошу ответить.

Автор: Фантом 13.3.2013, 11:38
Я сталкивался. Больше отвечать пока не на что...

Автор: killc0de 13.3.2013, 20:36
Извиняюсь, писал с работы, поэтому неопределенно. Вот код, уравнение из книги x^5+5*x^4-5=0, переходим к конечно-разностному уравнению: -5*y5+5*y1; и оно решается на ура. Любое же другое уравнение не решает. В основном вопрос о первых, начальных значениях y1,y2,y3,y4,y5. В книге написано, что что значения берутся произвольно, здесь значения соответственно : 0,0,0,1,1. Может, при задании другого уравнения необходимо как-то определенно задавать эти значения?
Код

program bernuli;

var
    N,max:integer;
    mY:array[0..1000]of real;
    

function newY(y5,y4,y3,y2,y1:real):real;
begin
//y=x^5+5*x^4-5 - отсюда выражаем x^5=-5*x^4-5*x^1 =>  -5*(y 
newY:=-5*y5+5*y1;
end;


procedure foundY(N,S:integer);
var
  i:integer;
begin
for i:=N to S do
  mY[i]:=newY(mY[i-N],0,0,0,mY[i-N+4]);
end;

var
    i:integer;
begin
mY[0]:=0;
mY[1]:=0;
mY[2]:=0;
mY[3]:=1;
mY[4]:=1;

max:=40;
foundY(5,max);
writeln('Результаты:');
for i:=1 to max-1 do
  writeln(mY[i+1]/mY[i]);
readln();
end.

Автор: Фантом 13.3.2013, 23:53
Вообще говоря, странно, что этот код и заданное уравнение решает, поскольку первое, что он должен выдать - ошибку деления на 0 в циле вывода в основной программе.

Начальный вектор действительно нужно заменить на случайный. Ну и, честно говоря, я бы переписал всю программу, в таком виде это малосъедобно.

Автор: killc0de 14.3.2013, 08:12
В этом вся и беда, не могу придумать, как по другому написать. Как формировать конечно-разностное уравнение из исходного автоматически, а не в ручную в коде?

Автор: Фантом 14.3.2013, 22:27
Цитата(killc0de @  14.3.2013,  09:12 Найти цитируемый пост)
Как формировать конечно-разностное уравнение из исходного автоматически, а не в ручную в коде? 

Хранить исходное уравнение в виде списка коэффициентов (или массива переменной длины). Компоненты y - аналогично.

Автор: killc0de 15.3.2013, 07:56
Спасибо.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)