Собственно есть след. задача:
Написать програмулинку, которая бы решала систему линейных алгебраических уравнений методом Якоби(простых итераций).
Саму прогу я уже написал вот функция, которая по сути и вычисляет одну итерацию:
private boolean do_iteration(EquationDataStore eq_data)
{
int i,j;
double sum;
boolean AllowedMiss=false;
int XNum=eq_data.getXNumber();
for (i=begin_x_index;i<=end_x_index;i++)
{
sum=eq_data.get_f(i);
for (j=0;j<=XNum-1;j++)
{
if (i!=j)
{
sum=sum-eq_data.geta(i,j)*eq_data.get_lastx(j);
}
NewXVector=sum/eq_data.geta(i,i);
}
if (Math.abs(Math.abs(NewXVector[i-begin_x_index])-Math.abs(eq_data.get_lastx(i)))<=eq_data.getEps())
{
AllowedMiss=true;
}
}
return AllowedMiss;
}
Все, вроде, работает, НО.
Чтобы протестировать работу программы на разных компах нужно задавать матрицы А размерностью хотябы 1000х1000.
Понятно, руками набивать матрицы такого размера не реально.
Написал генератор уравнений, который работает следующим образом:
1. Рандомом выбираем значение Х(i).
2. Рандомом выбираем значение A(i).
3. Суммируем значения X(i)*A(i) и получаем значение функции.
Но уже для уравнений размерностью 5х5 и более у нас почти со 100% вероятностью генерируется уравнение, при решении которого итерационный процесс расходится.
Вопрос: каким образом можно сгенерировать уравнение, при решении которого итерационный процесс не расходился бы?
Заранее благодарен.
Написать програмулинку, которая бы решала систему линейных алгебраических уравнений методом Якоби(простых итераций).
Саму прогу я уже написал вот функция, которая по сути и вычисляет одну итерацию:
private boolean do_iteration(EquationDataStore eq_data)
{
int i,j;
double sum;
boolean AllowedMiss=false;
int XNum=eq_data.getXNumber();
for (i=begin_x_index;i<=end_x_index;i++)
{
sum=eq_data.get_f(i);
for (j=0;j<=XNum-1;j++)
{
if (i!=j)
{
sum=sum-eq_data.geta(i,j)*eq_data.get_lastx(j);
}
NewXVector=sum/eq_data.geta(i,i);
}
if (Math.abs(Math.abs(NewXVector[i-begin_x_index])-Math.abs(eq_data.get_lastx(i)))<=eq_data.getEps())
{
AllowedMiss=true;
}
}
return AllowedMiss;
}
Все, вроде, работает, НО.
Чтобы протестировать работу программы на разных компах нужно задавать матрицы А размерностью хотябы 1000х1000.
Понятно, руками набивать матрицы такого размера не реально.
Написал генератор уравнений, который работает следующим образом:
1. Рандомом выбираем значение Х(i).
2. Рандомом выбираем значение A(i).
3. Суммируем значения X(i)*A(i) и получаем значение функции.
Но уже для уравнений размерностью 5х5 и более у нас почти со 100% вероятностью генерируется уравнение, при решении которого итерационный процесс расходится.
Вопрос: каким образом можно сгенерировать уравнение, при решении которого итерационный процесс не расходился бы?
Заранее благодарен.