Программа (код) на С++ решения жесткой краевой задачи методом А.Ю.Виноградова — страница 4
- Категория Математика Программирование
- Раздел Монографии
- Просмотров 7538
- Скачиваний 551
- Размер файла 277 Кб
C[3][k]=A[3][k]-mult0*C[0][k]-mult1*C[1][k]-mult2*C[2][k]; } NORM=norma(C,3); for(int k=0;k<8;k++){ C[3][k]/=NORM; } d[3]=(b[3]-mult0*d[0]-mult1*d[1]-mult2*d[2])/NORM; } //Произведение матрицы A1 размерности 4х8 на матрицу А2 размерности 8х8. Получаем матрицу rezult размерности 4х8: void mat_4x8_on_mat_8x8(double A1[4][8], double A2[8][8], double rezult[4][8]){ for(int i=0;i<4;i++){ for(int j=0;j<8;j++){ rezult[i][j]=0.0; for(int k=0;k<8;k++){ rezult[i][j]+=A1[i][k]*A2[k][j]; } } } } //Умножение матрицы A на вектор b и получаем rezult. void mat_on_vect(double A[8][8], double b[8], double rezult[8]){ for(int i=0;i<8;i++){ rezult[i]=0.0; for(int k=0;k<8;k++){ rezult[i]+=A[i][k]*b[k]; } } } //Умножение матрицы A размерности 4х8 на вектор b размерности 8 и получаем rezult размерности 4. void mat_4x8_on_vect_8(double A[4][8], double b[8], double rezult[4]){ for(int i=0;i<4;i++){ rezult[i]=0.0; for(int k=0;k<8;k++){ rezult[i]+=A[i][k]*b[k]; } } } //Вычитание из вектора u1 вектора u2 и получение вектора rez=u1-u2. Все вектора размерности 4. void minus(double u1[4], double u2[4], double rez[4]){ for(int i=0;i<4;i++){ rez[i]=u1[i]-u2[i]; } } //Вычисление матричной экспоненты EXP=exp(A*delta_x) void exponent(double A[8][8], double delta_x, double EXP[8][8]) { //n - количество членов ряда в экспоненте, m - счетчик членов ряда (m<=n) int n=100, m; double E[8][8]={0}, TMP1[8][8], TMP2[8][8]; int i,j,k; //E - единичная матрица - первый член ряда экспоненты E[0][0]=1.0; E[1][1]=1.0; E[2][2]=1.0; E[3][3]=1.0; E[4][4]=1.0; E[5][5]=1.0; E[6][6]=1.0; E[7][7]=1.0; //первоначальное заполнение вспомогательного массива TMP1 - предыдущего члена ряда для следующего перемножения //и первоначальное заполнение экспоненты первым членом ряда for(i=0;i<8;i++) {
Похожие работы
- Доклады
- Рефераты
- Рефераты
- Рефераты
- Контрольные