Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.15.156.140] |
|
Сообщ.
#1
,
|
|
|
Помогите, друг попросил написать,а я не мыслю в высшей математике, я уже нашёл кучу функций как реализовывать эти методы(кроме Матричного), но там нету комментов и я многого не понимаю... мне желательно с комментами, или если можете прокоментируйте функции ниже:
Для нахождения определителя double Matrix::det(double **p, int n) { if(n==1) return **p; double d=0; double **add = new double*[n-1]; for(int i=0; i<n-1; i++) add[i] = new double[n-1]; for(int i=0; int m=n>i; i++) { for(int y=1; y<n; y++) { for(int x=0; x<n; x++) { if(x==i) continue; if(x<i) add[x][y-1] = p[x][y]; else add[x-1][y-1] = p[x][y]; } } if(i%2) d -= p[i][0]*det(add, n-1); else d += p[i][0]*det(add, n-1); } return d; } Метод Гаусса реализованный в классе void Matrix::GaussProc() { int i,j,k; double l; for(k=0;k<M-1;k++) { Memo->Lines->Add("Перестановка столбца "+IntToStr(k+1)); //PrintMatrix(); Permutation(k); PrintMatrix(); for(i=k+1;i<M;i++) { l=Data[i][k]/Data[k][k]; for(j=k;j<N;j++) { Data[i][j]=Data[i][j]-Data[k][j]*l; } } } } void Matrix::ExtractX(Matrix &X) { X.SetSize(M,1); for(int i=M-1,j;i>=0;i--) { X.Data[i][0]=Data[i][N-1]; for(j=M-1;j>i;j--) { X.Data[i][0]-=(Data[i][j]*X.Data[j][0]); } X.Data[i][0]/=Data[i][i]; } } void Matrix::Permutation(int k) { int i,Max=k; for(i=k+1;i<M;i++) { if(fabs(Data[i][k])>fabs(Data[Max][k]))Max=i; } if(Max!=k) { double *Tmp=Data[Max]; Data[Max]=Data[k]; Data[k]=Tmp; sgn=-sgn; } } Буду очень сильно благодарен, было бы неплохо функцию по нахождению определителя не рекурсивным методом(с комментами) |
Сообщ.
#2
,
|
|
|
Цитата Shedy @ Буду очень сильно благодарен, было бы неплохо функцию по нахождению определителя не рекурсивным методом(с комментами) По сути применяешь к матрице алгоритм Гауса, точнее прямой алгоритм т.е. приводишь матрицу к верхнетреугольному виду (все элементы ниже главной диагонали - нули) и определитель равен произведению элементов на главной диагонали. |