|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
17.04.2012, 16:49 | #1 |
Регистрация: 13.12.2011
Сообщений: 7
|
обратная матрица
Привет всем,мне нужна помощь ..
Нужно написать программу на Си. Задача звучит так: Задано целое число н, является размерностью квадратной матрицы действительных чисел. Найти для заданной пользователем матрицы обратную матрицу методом Гауса.Хид выполнения выводить на экран и в файл (название файла вводит пользователь). Осуществить проверку полученного результата. я попробовала что-то написать, но моя программа работает неправильно .. #include<stdio.h> #include<conio.h> int main(){ clrscr(); float M[100][100],O[100][100],E[100][100]; int i,j,k,N; printf("N="); scanf("%d",&N); for(i=0;i<N;i++) for(j=0;j<N;j++){ printf("N[%d][%d]=",i,j); scanf("%f",&M[i][j]);} printf("--------------\n"); printf("Matrix:\n"); for(i=0;i<N;i++){ for(j=0;j<N;j++) printf("%5.1f",M[i][j]); printf("\n");} for(k=0;k<N;k++){ for(i=0;i<N;i++) for(j=0;j<N;j++){ if(i==k&&j==k) O[i][j]=1/M[k][k]; if(i!=k&&j==k) O[i][j]=-M[i][j]/M[k][k]; if(i!=k&&j!=k) O[i][j]=M[i][j]-M[k][j]*M[i][k]/M[k][k];} for(i=0;i<N;i++) for(j=0;j<N;j++) M[i][j]=O[i][j];} for(i=0;i<N;i++){ for(j=0;j<N;j++) E[i][j]=0;} for(i=0;i<N;i++){ for(j=0;j<N;j++){ for(k=0;k<N;k++) E[i][j]+=M[i][k] *O[k][j];}} printf("\n Obernena matrucia\n"); for(i=0;i<N;i++){ for(j=0;j<N;j++) printf("%10.1f",M[i][j]); printf("\n");} printf("-----------------\n"); printf("M*O=E\n"); for(i=0;i<N;i++){ for(j=0;j<N;j++) printf("%10.1f",E[i][j]); printf("\n");} getch(); return 0; } помогите пожалуйста .. я не знаю что делать, а скоро нужно сдавать .. (( Последний раз редактировалось nat@; 17.04.2012 в 16:53. Причина: забыла указать язык |
17.04.2012, 17:31 | #2 |
Форумчанин
Регистрация: 29.05.2011
Сообщений: 449
|
напиши алгоритм нахождения обратной матрицы
словами или мат формулами по действиям
задания на pascal/delphi ICQ 368254335
Tel +79177425326 mail denis-naymov1985(at)mail.ru login skype denis.new.skype |
17.04.2012, 17:36 | #3 |
Регистрация: 13.12.2011
Сообщений: 7
|
Возьмём две матрицы: саму A и единичную E. Приведём матрицу A к единичной матрице методом Гаусса—Жордана. После применения каждой операции к первой матрице применим ту же операцию ко второй. Когда приведение первой матрицы к единичному виду будет завершено, вторая матрица окажется равной A-1.
|
17.04.2012, 17:48 | #4 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,291
|
nat@, это конечно алгоритм, но denisbrain, как мне кажется, хотел более развернутого ответа. Например, как работает метод Гаусса—Жордана?
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
|
17.04.2012, 17:49 | #5 | |
Форумчанин
Регистрация: 29.05.2011
Сообщений: 449
|
Цитата:
как работает метод Гаусса—Жордана. точно по пунктам
задания на pascal/delphi ICQ 368254335
Tel +79177425326 mail denis-naymov1985(at)mail.ru login skype denis.new.skype |
|
17.04.2012, 17:57 | #6 |
Регистрация: 13.12.2011
Сообщений: 7
|
берем матрицу А, любого размера и берем единичную матрицу Е такого же размера нужно свести заданную матрицу А к единичной при том все действия (элементарные преобразования) выполняемых ИЗ А нужно выполнять также с единичной матрицей Е. Когда А будет сведена к единичной, Е будет обращенной к А.
Надеюсь, это то о чем вы спрашивали .. |
17.04.2012, 18:04 | #7 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,291
|
nat@, да, это формально то, о чем я спрашивал. Но это интуитивный алгоритм, который легко (для большинства людей) выполняется человеком. Такой алгоритм не подходит для компьютера
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
|
17.04.2012, 18:19 | #8 |
Регистрация: 13.12.2011
Сообщений: 7
|
это алгоритм для матрицы, элементы которой являются нули и единицы, а мне нужно чтобы были действительные числа ..
#include< stdio.h> #include<conio.h> #define N 5 void main(){ int i,j,k; int Ai[N][N]={{0,1,0,1,0},{1,0,0,0,0},{1,1,1,0, 1},{1,1,0,1,1},{1,1,0,0,0}}; int A[N][2*N]; for (i=0;i<N;i++) for(j=0;j<N;j++) A[i][j]=Ai[i][j]; for (i=0;i<N;i++) for(j=0;j<2*N;j++) { if(i+N==j) A[i][j]=1; else A[i][j]=0;} for (i=0;i<N;i++) {if(A[i][i]==0) for(j=i+1;j<N;j++) {if(A[j][i]==1){ for(k=0;k<2*N;k++) {int c=A[j][k]; A[j][k]=A[i][k]; A[i][k]=c;} break; }} for(k=i+1;k<N;k++) {if(A[k][i]==1){ for(j=0;j<2*N;j++){ for(j=0;j<2*N;j++) {A[k][j]^=A[i][j]; }}}} for(i=N-1;i>=0;i--) {for(k=i-1;k>=0;k--){ if(A[k][i]==1){ for(j=0;j<2*N;j++) A[k][j]^=A[i][j]; }}} я знаю, что я плохой программист .. (( |
17.04.2012, 19:31 | #9 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,291
|
Вот. Вроде даже работает
Код:
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
Последний раз редактировалось BDA; 17.04.2012 в 19:33. |
17.04.2012, 19:36 | #10 |
Регистрация: 13.12.2011
Сообщений: 7
|
Очень Вам благодарна))
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Обратная матрица | ivan.tiran | Паскаль, Turbo Pascal, PascalABC.NET | 1 | 04.10.2011 13:43 |
Обратная матрица | kati412 | Помощь студентам | 0 | 09.04.2011 18:29 |
Обратная матрица на VB | Vitek.i | Помощь студентам | 1 | 21.01.2011 19:34 |
обратная матрица | LastBreath | Помощь студентам | 1 | 04.06.2010 20:30 |
Обратная матрица | Artemm | Общие вопросы C/C++ | 6 | 26.05.2009 17:55 |