Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.06.2018, 18:27   #1
Александр121
Форумчанин
 
Регистрация: 17.09.2017
Сообщений: 265
По умолчанию вычислить определитель

Как вычеслить определитель когда x и y?

как такой пример,
Код:
x y 0 0 0
0 x y 0 0 
0 0 x 0 0
0 0 0 x y
y 0 0 0 x
Изображения
Тип файла: jpg как такой пример.jpg (11.1 Кб, 148 просмотров)
Александр121 вне форума Ответить с цитированием
Старый 09.06.2018, 18:34   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Строго по определению.
p51x вне форума Ответить с цитированием
Старый 09.06.2018, 19:50   #3
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Удобнее всего вычислять, разложив, например, по третьей строке. В этом случае, определитель будет равен произведению элемента с индексами 3,3 на его алгебраическое дополнение. Алгебраическое дополнение = [(-1)^(i+j)]*(Минор этого элемента).

Минор элемента с индексами (i, j) - это определитель матрицы, полученной путём удаления i-й строки и j-го столбца из исходной матрицы.

Всё разжёвано, считайте.
Вадим Мошев вне форума Ответить с цитированием
Старый 09.06.2018, 20:03   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Цитата:
Сообщение от Вадим Мошев Посмотреть сообщение
Удобнее всего вычислять, разложив, например, по третьей строке.
Зачем? Если строго по определению там два слагаемых, которые видны невооруженным глазом.
p51x вне форума Ответить с цитированием
Старый 09.06.2018, 20:31   #5
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Давая ответ на тот или иной вопрос, я прежде всего опираюсь на собственные знания, потому как дать ответ, используя их, быстрее. в ВУЗе нам давали определителя матрицы, мне эту формулировку удалось запомнить (сейчас немного забыта), по определению считать нам не приходилось, да и нам не рассказывали, как это делать, сам я тоже не изучал как это делать, как знал другие способы вычисления определителя (треугольники, Сарриус, разложение по столбцу/строке) и мне этого всегда хватало. Хотя, думаю, для реализации вычисления определителя в ЭВМ используется определение детерминанта. Например, если в MathCAD символьно посчитать определитель матрицы 4-го порядка, то результатом будет алгебраическая сумма произведений элементов матрицы, состоящая из 24 (факториал 4) слагаемых.

Я верно понимаю, что считать по определению определитель матрицы такого порядка нецелесообразно, как так придётся считать 120 (факториал 5) слагаемых?

Последний раз редактировалось Вадим Мошев; 09.06.2018 в 20:35.
Вадим Мошев вне форума Ответить с цитированием
Старый 09.06.2018, 20:41   #6
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Вообще-то в задании определитель nxn. И в общем виде да, там до фига выписывать. Но этот то определитель особенный...
p51x вне форума Ответить с цитированием
Старый 09.06.2018, 20:47   #7
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Вообще-то в задании определитель nxn
Я знаю, что об определителе имеет смысл говорить, только если матрица квадратная.


Цитата:
Сообщение от p51x Посмотреть сообщение
Но этот то определитель особенный
Тем, что тут нули?

А вообще, как проще получается посчитать? По определению или разложив определитель по строке?
Вадим Мошев вне форума Ответить с цитированием
Старый 09.06.2018, 20:51   #8
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Цитата:
Сообщение от Вадим Мошев Посмотреть сообщение
Тем, что тут нули?
Именно и почти все слагаемые будут равны...

Цитата:
Сообщение от Вадим Мошев Посмотреть сообщение
А вообще, как проще получается посчитать? По определению или разложив определитель по строке?
Как я уже сказал - по определению. Что вам здесь даст разложение по строке? Вы задолбаетесь миноры выписывать... а по определению - устно.
p51x вне форума Ответить с цитированием
Старый 09.06.2018, 20:53   #9
NetSpace
Участник клуба
 
Аватар для NetSpace
 
Регистрация: 03.06.2009
Сообщений: 1,814
По умолчанию

привести к треугольному виду (чтоб ниже главной диагонали были все нули) и потом чисто перемножить элементы на главной диагонали.
вот там код на С++, с моего студенчества, 2002-й год
Код:
/****************************************************************************
   Процедуры для решения системы линейных уравнений.
   Вариант для матриц вида A[1..n][1..n].
*****************************************************************************/
#include<conio.h>
#include<iostream.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
const int n = 9;
double index[n+1];
double a[n+1][n+1];
/****************************************************************************
   Приведение матрицы к треугольному виду (прямой ход)
*****************************************************************************/
void triang(double matr[n+1][n+1], int n)
{
   int j, k, p, pmax;
   double Amax, temp;
   for(k = 1; k < n; k++) index[k] = k;
   index[n] = 1;  /* здесь будем запоминать знак определителя,
				обусловленный перестановкой строк */
   for(k = 1; k < n; k++)
   {
      // Найдем ведущий элемент в k-ом столбце матрицы
      Amax = 0.0;  // максимальное значение в k-ом столбце
      for(p = k; p <= n; p++)
	if( (temp = fabs(matr[p][k])) > Amax )
	{
	   Amax = temp;
	   pmax = p;
	}
      if(Amax < 1.0e-32)
      {
	 printf("Матрица сингулярная\n");
	 exit(1);
      }
      // Переставляем строки с номерами k и pmax
      if(pmax != k)
      {
	 for(j = k; j <= n; j++)
	 {
	    temp = matr[k][j];
	    matr[k][j] = matr[pmax][j];
	    matr[pmax][j] = temp;
	 }
	 index[k] = pmax;  // запомним номер строки на главной диагонали
	 index[n] *= -1;
      }
      // Прямой ход
      for(p = k + 1; p <= n; p++)
      {
	 temp = matr[p][k] / matr[k][k];
	 matr[p][k] = temp;  /* запоминаем множители, которые
	 				  потребуются для обратного хода */
	 for(j = k + 1; j <= n; j++)
	 {
	    matr[p][j] -= temp * matr[k][j];
	 }
      }
   }
}                    /* triang */
/****************************************************************************
   Нахождение неизвестных (обратный ход)
   b[1..n] -- массив свободных членов, сюда же записываются
   значения неизвестных
*****************************************************************************/
void solve(double matr[n+1][n+1], double b[n+1], int n)
{
   int i, j, k;
   double temp;
   for(i = 1; i < n; i++)
   {
      k = index[i];
      temp = b[k];
      b[k] = b[i];
      b[i] = temp;
      for(j = i + 1; j <= n; j++)
      {
	 b[j] -= matr[j][i] * temp;
      }
   }
   // Обратный ход
   for(k = 1; k <= n; k++)
   {
      i = n - k + 1;  // номер очередной неизвестной

      for(j = 1; j < k; j++)
      {
	 b[i] -= matr[i][i+j] * b[i+j];
      }
      b[i] /= matr[i][i];
   }
}                       /* solve */

void PrintMatr(double matr[n+1][n+1])
{
 int i,j;
 for(i=1;i<=n;i++)
 {
 for(j=1;j<=n;j++)
 {
 printf("%3.0f",matr[i][j]);
 }
 printf("\n");
 }
 printf("\n");
 }
void main()
{
 clrscr();
 int i,j;
 for(i=1;i<=n;i++)
 for(j=1;j<=n;j++)
 {
  double c=i+j-1;
  if(c>n) c=n;
  a[i][j]=c;
 }
 cout<<"Ваша матрица:"<<"\n";
 PrintMatr(a);
 cout<<"Преобразованная матрица:"<<"\n";
 triang(a,n);
 PrintMatr(a);
double det=1;
 for(i=1;i<=n;i++)
 {
  det*=a[i][i];
  }
  det*index[n];
  cout<<"Oпределитель равен "<<det<<";";
 getch();
}
/***************************************************************************/
Программирование - это единственный способ заставить компьютер делать то, что тебе хочется, а не то, что приходится.
NetSpace на форуме Ответить с цитированием
Старый 09.06.2018, 21:04   #10
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

NetSpace, так какое значение определителя выдаст ваша программа для заданного с x,y?
p51x вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вычислить определитель Александр121 Помощь студентам 9 10.06.2018 03:29
Вычислить определитель методом Крамера kimi_ Общие вопросы C/C++ 1 30.06.2015 06:09
Определитель Юля23 Паскаль, Turbo Pascal, PascalABC.NET 0 07.05.2015 15:28
Вычислить определитель третьего порядка DIGOREC Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 27.12.2012 21:24
Вычислить определитель пятого порядка Jasmin Помощь студентам 0 20.12.2011 22:44