Наименьшее собственное значение для большой почти сингулярной матрицы

Раньше я использую следующий код, который правильно работает для перенаправления корневого URL-адреса каждого из моих доменов / поддоменов в их подкаталоги соответствия, которые в точности называются суб-доменом, следующим образом:

RewriteCond %{HTTP_HOST} ^sub1.domain1.com
RewriteCond %{REQUEST_URI} !subs/sub1.domain1.com/
RewriteRule ^(.*)$ subs/%{HTTP_HOST}/$1 [L,QSA]

RewriteCond %{HTTP_HOST} ^sub2.domain1.com
RewriteCond %{REQUEST_URI} !subs/sub1.domain2.com/
RewriteRule ^(.*)$ subs/%{HTTP_HOST}/$1 [L,QSA]

RewriteCond %{HTTP_HOST} ^sub1.domain2.com
RewriteCond %{REQUEST_URI} !subs/sub1.domain2.com/
RewriteRule ^(.*)$ subs/%{HTTP_HOST}/$1 [L,QSA]

RewriteCond %{HTTP_HOST} ^sub2.domain2.com
RewriteCond %{REQUEST_URI} !subs/sub2.domain2.com/
RewriteRule ^(.*)$ subs/%{HTTP_HOST}/$1 [L,QSA]

Однако, когда я хочу добавить еще одну подсистему или домены, ее нужно будет добавить в код выше. Это должно быть гораздо удобнее упростить, чтобы работать как подстановочный знак (*), как показано ниже:

RewriteCond %{HTTP_HOST} ^sub
RewriteCond %{REQUEST_URI} !/subs/
RewriteRule ^(.*)$ subs/%{HTTP_HOST}/$1 [L,QSA]

Поэтому всякий раз, когда добавляются дополнительные поддомены / домены, если имя поддомена имеет префикс sub (например, : sub3.domain1.com, sub1.domain3.com и т. д.), код останется в силе.

2
задан Cris Luengo 16 January 2019 в 14:05
поделиться

1 ответ

Решение

Кажется, я решил свою конкретную проблему. Команда Matlabs chol имеет возможность вернуть значение p, которое равно нулю, если матрица положительно определена. Таким образом, выполнение

[~,p] = chol(A)

в моем случае определяет переход от положительно определенного к не положительно определенному (то есть сначала единственному, а затем неопределенному), а также является очень эффективным в вычислительном отношении. В документации для chol также предпочтительнее, чем eigs, проверять положительную определенность. Однако, по-видимому, существует некоторая путаница в отношении результата, если матрица является только положительной полу -определенной, поэтому будьте осторожны, если это так.


Альтернативные решения

Я столкнулся с несколькими возможными решениями, которые я хотел бы заявить:

Детерминант : Для положительно определенной матрицы определитель положительный. Однако для неопределенной матрицы это может быть отрицательно - это может указывать на переход. Хотя, вообще, детерминанты для больших почти сингулярных матриц не рекомендуются.

Собственные значения : Для положительно определенной матрицы действительная часть всех собственных значений положительна. Если хотя бы одно собственное значение равно нулю, матрица является сингулярной, а если одно становится отрицательным, а остальные положительными, то оно неопределенно. Обнаружение сдвига знака для наименьшего собственного значения указывает точку, в которой матрица становится сингулярной. В matlab самое низкое собственное значение может быть найдено с помощью

D = eigs(A,1,'smallestreal')

. Однако в моем случае Matlab не может этого сделать. В качестве альтернативы вы можете попробовать поискать около нуля:

D = eigs(A,1,0)

Это, однако, находит только собственное значение, наиболее близкое к нулю. Даже если вы сделаете цикл, как указано в моем первоначальном вопросе выше, вы не гарантированно найдете самый низкий. И точность собственных значений почти сингулярной матрицы в некоторых случаях кажется низкой.

Номер условия : Matlabs cond возвращает номер условия матрицы, выполняя

C = cond(A)

, который устанавливает отношение наибольшего собственного значения к наименьшему. Смещение знака в номере условия, таким образом, устанавливает переход. Это, однако, не сработало для меня, так как я получил только положительные числа условий, хотя у меня были отрицательные собственные значения. Но, возможно, это сработает в других случаях.

0
ответ дан DavidH 16 January 2019 в 14:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: