Подкиньте идею, плз

Requiem

Member
Joined
Nov 15, 2004
Messages
88
Reaction score
2
Age
41
Собственно есть след. задача:
Написать програмулинку, которая бы решала систему линейных алгебраических уравнений методом Якоби(простых итераций).
Саму прогу я уже написал вот функция, которая по сути и вычисляет одну итерацию:


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% вероятностью генерируется уравнение, при решении которого итерационный процесс расходится.

Вопрос: каким образом можно сгенерировать уравнение, при решении которого итерационный процесс не расходился бы?
Заранее благодарен.
 

Requiem

Member
Joined
Nov 15, 2004
Messages
88
Reaction score
2
Age
41
Все, проблема решена.
Может, кому интересно: Итерационный процесс будет обязательно сходиться, если элементы матрицы, расположенные по главной диагонали будут больше, чем сумма остальных элементов, расположенных в данной строке.
Например, процесс будет сходиться, если A[4][4]>SUM(A[4]), i=1..n, i!=4;
 
Top