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

Requiem

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


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, 2023
Messages
89
Reaction score
21
Age
42
Все, проблема решена.
Может, кому интересно: Итерационный процесс будет обязательно сходиться, если элементы матрицы, расположенные по главной диагонали будут больше, чем сумма остальных элементов, расположенных в данной строке.
Например, процесс будет сходиться, если A[4][4]>SUM(A[4]), i=1..n, i!=4;
 
Top