2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 заполнение матрицы в матлаб
Сообщение12.02.2019, 13:29 
Здравствуйте, уважаемые участники форума. Столкнулся с простой, но все же проблемой как заполнить матрицу используя средства векторизации Матлаб матрицы следующего вида.

$\begin{pmatrix}
 0& \frac{1}{a_{1}-a_{2}} &... &\frac{1}{a_{1}-a_{n}} \\
 \frac{1}{a_{2}-a_{1}}& 0 &...&\frac{1}{a_{2}-a_{n}} \\
 ......& ......& ......&......\\
 \frac{1}{a_{n}-a_{1}}& \frac{1}{a_{n}-a_{2}} &...&0
\end{pmatrix}$

где вектор $a_{1}... a_{n}$ задан. Подскажите как можно сделать это простейшим способом. Спасибо.

 
 
 
 Re: заполнение матрицы в матлаб
Сообщение12.02.2019, 15:36 
Например, размножив ряд и столбец до полных матриц, вычислив всё с бесконечностями на диагонали, а потом заполнив диагональ нулями.

 
 
 
 Re: заполнение матрицы в матлаб
Сообщение12.02.2019, 16:00 
Аватара пользователя
Если нигде не ошибся, то как-то так:
Используется синтаксис Matlab M
[A, B] = meshgrid(a,a);
d = length(a);
result =1./(B-A);
result(1:d+1:end) = 0;
 

 
 
 
 Re: заполнение матрицы в матлаб
Сообщение12.02.2019, 22:04 
Аватара пользователя
volchenok в сообщении #1375533 писал(а):
как заполнить матрицу используя средства векторизации Матлаб матрицы следующего вида

Зависит от версии - в последних можно просто
Используется синтаксис Matlab M
fillmissing(1./(a'-a),'constant',0)

 
 
 
 Re: заполнение матрицы в матлаб
Сообщение12.02.2019, 23:42 
Аватара пользователя
Geen, не знал о существовании этой функции и не могу проверить, но прочитал описание и у меня сомнения, что ваш код даст корректный результат:
1) Насколько я понял, она заполняет NaN, NaT и подобные, но у нас будут Inf, которые не обрабатываются fillmissing()
2) Нам надо заменить не все Inf, а только те, которые вылезли на диагональ, а если какие-то значения в векторе $a$ совпадают, то они могут вылезти и в других местах.

 
 
 
 Re: заполнение матрицы в матлаб
Сообщение13.02.2019, 00:03 
Geen в сообщении #1375681 писал(а):
Зависит от версии - в последних можно просто
In MATLAB® R2016b and later

Но всё равно менять все бесконечности на нули, в том числе, вне диагонали, некорректно.

 
 
 
 Re: заполнение матрицы в матлаб
Сообщение13.02.2019, 00:10 
Аватара пользователя
photon в сообщении #1375700 писал(а):
и у меня сомнения, что ваш код даст корректный результат

Да, Вы правы, надо подправить - в числителе не единицу надо взять, а 1-eye(n) (если считать, что в самом векторе нет nan'ов).

Хотя лучше написать один раз, отдельно, функцию для выставления диагонали в нужное значение/вектор - встречается достаточно часто такая нужда.

 
 
 [ Сообщений: 7 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group