Тёмный
Tim Davis
Tim Davis
Tim Davis
Подписаться
Mathematics for matrix algorithms and for the sheer beauty of art. Translating music into art via mathematical algorithms.
JITIFYER for SuiteSparse:GraphBLAS
1:11:58
Год назад
For Jim Demmel's 60th Birthday
4:43
8 лет назад
Timothy at TAMU
13:39
9 лет назад
Комментарии
@manojdhiman1541
@manojdhiman1541 11 дней назад
Thanks Prof for such a clear and insightful material. Hopefully you will excuse me for including your SIAM presentation in one of my presentations. Though it will not go without citation.
@morskaya_svinka
@morskaya_svinka Месяц назад
send him South Park season 5 episode 3 "Cripple fight"
@zhengxinglei-eg4xt
@zhengxinglei-eg4xt 4 месяца назад
The picture is so blur
@DocSparse
@DocSparse 4 месяца назад
It’s the best I have. It was taped many years ago on VHS and only later digitized.
@abhijitpatil9697
@abhijitpatil9697 8 месяцев назад
lol i collect matrices hit me
@xiaoq123
@xiaoq123 8 месяцев назад
great teacher
@ArifYunando
@ArifYunando Год назад
Let me just salute sub 400 people who watch this playlist to the end from 15k in episode 1 after 8 years of uploading time.
@stevenminot7075
@stevenminot7075 Год назад
Thank you for your videos, really give a great passion on the way to the linear algebra
@ajinkya95
@ajinkya95 2 года назад
Hello Dr. Davis, I understand that when solving for x in Lx = b with a sparse b, you first compute the non-zero pattern of x by finding the reach of b in the graph of L using DFS (done using a call to cs_reach()). Once this is done, then only you move onto the numerical computation of x. Similar thing is also done for Ux = b (where U is upper triangular) in the cs_spsolve() function by appropriately setting the "lo" flag. Just a small follow up question on this. Suppose now one is trying to solve U'x = b (where U' is the transpose of U), but has the matrix U stored in compressed column format. Will it be possible to find the reach of b in this case without actually transposing U? Or one HAS TO transpose U for finding the reach of b in order to compute the non-zero pattern of x? Apologies for such a long question. Thanks in advance for your reply.
@DocSparse
@DocSparse 2 года назад
Solving U'x=b where U is stored by column would be the same as solve Lx=b where L is stored by row. That forward solve can be done with a dense x, but a sparse x would be tough. The DFS to compute the reach of b, to get the pattern of x, needs to traverse the outgoing edges of any given node. But if L is stored by row, each row i would hold the incoming edges of the node i in the graph of L. In this graph, L(i,j) is the edge from j to i. So the storage for this matrix L (or U' for U stored by column) is backwards. I don't think this would work.
@VivekTR
@VivekTR 2 года назад
Thanks Tim for posting your lectures online for free. You are a great teacher. 🙂
@jierlp
@jierlp 2 года назад
My son also has the problem with b & d, and p & q. :-)
@stefaningiadalbjornsson8214
@stefaningiadalbjornsson8214 2 года назад
An overview of Chapter 7 (ordering methods) starts ~ 43:00
@easonjiang6282
@easonjiang6282 3 года назад
nonrecurive code is so hard to understand
@easonjiang6282
@easonjiang6282 3 года назад
Why there is no subtitle of this video?
@easonjiang6282
@easonjiang6282 3 года назад
Dear professor, do you have higher resolution video?
@easonjiang6282
@easonjiang6282 3 года назад
Thank you very much. This is great
@ajinkya95
@ajinkya95 3 года назад
Hello Dr. Davis, At 13:04, you refer to a very subtle point inside the cs_lu() function. About how you set all x[i] = 0 for the next iteration without hampering the asymptotic performance of this algorithm (i.e., by NOT putting a O(n) loop to set all x[i] = 0 inside another O(n) loop). This is to ensure that all values in x are equal to 0 before the next time you call cs_spsolve(). What I noticed inside cs_spsolve() is that after you compute the reach of the sparse RHS vector, you explicitly set all x[xi[top]] to x[xi[n-1]] to 0 before scattering the values in the sparse RHS vector into x. My question is: Do we then actually need to set all the x[i] = 0 in cs_lu() at the end of every kth step of factorization when we gather the entries into L? Thanks in advance :)
@DocSparse
@DocSparse 3 года назад
Yes, it's still required, at least part of it, but the reason is very subtle. In cs_lu, I check to see if the diagonal entry can be chosen as a pivot, which is x [col]. The entry x [col] might not be in the pattern xi, and in that case x [col] needs to be zero. But if only x [xi [top...n-1]] is initialized, x[col] could contain garbage. It would be possible to set x[col] to zero before doing the cs_spsolve, I think.
@ajinkya95
@ajinkya95 3 года назад
​@@DocSparse Oh yeah, that makes sense. I forgot about the condition where you check for x[col] to be a pivot if row "col" is not yet pivotal. Thanks for clarifying that :)
@Austin-hm6qq
@Austin-hm6qq 3 года назад
P=NP if P=0 as well!
@ajinkya95
@ajinkya95 3 года назад
Dear Dr. Davis, I want to thank you for uploading this lecture series on RU-vid. It is very helpful in understanding the contents of your book. Will it be possible for you to share the scanned version of the example that you have used in order to explain the working of row_cnt() and cs_leaf() in this lecture? I tried it myself but the visual explanation that you have given in this lecture is very intuitive compared to just going through the code that I was doing. I will contact you by email if you cannot share it on RU-vid. Let me know. Thanks so much :)
@DocSparse
@DocSparse 3 года назад
All the slides for the lectures are at this link: faculty.cse.tamu.edu/davis/classes_files/sparse_lectures.zip
@ajinkya95
@ajinkya95 3 года назад
@@DocSparse Hello Dr. Davis, thank you so much for your reply. I had already downloaded these notes from the Dropbox link that you have shared in the description of the first lecture in this course. This zip file does not contain the scanned copy that I was referring to. I was actually referring to the visual example that you have used in this lecture to show how the ancestral tree gets built in the row_cnt() function (you refer to it at 1:36 in the video). But never mind, you have explained it so well in this lecture that I was able to do it on my own. Thank you so much :)
@DocSparse
@DocSparse 3 года назад
@@ajinkya95 OK. I don't have the scanned version of that example, at least not that I can find. The pdf notes are all that I have.
@ajinkya95
@ajinkya95 3 года назад
@@DocSparse Thank you for checking for it and replying, Dr. Davis. But as I said, I was able to work it out based on your explanation in the lecture. So its all fine. Thanks :)
@marsag3118
@marsag3118 4 года назад
Dear Prof. @Tim Davis would you be so kind to provide a link to access the slides? thanks in advance
@DocSparse
@DocSparse 4 года назад
I dug them up but I have 2 copies: one long one and one short one. I'll just post both.
@durugappap3014
@durugappap3014 Год назад
Excellent teaching sir
@yumiandHamVlog
@yumiandHamVlog 4 года назад
Hey dear new friends here
@huangjieyu6035
@huangjieyu6035 4 года назад
Great lecture! Thanks!
@youchuanwang1738
@youchuanwang1738 4 года назад
Hi, I'm working on a project involving sparse matrix and function optimization. Is it possible to contact and consult with you?
@kashmira_zambad
@kashmira_zambad 4 года назад
This is awesomastic Tim! Inspiring and pretty😍👌
@yuwuxiong1165
@yuwuxiong1165 4 года назад
Good lecture! The 2nd character, which seems more important and more complex, appears from in this lecture :)
@yuwuxiong1165
@yuwuxiong1165 4 года назад
Is the following reasoning true? if the graph is pruned to a tree (i.e., the elimination tree), then both DFS and BFS given a topological order, even post-order walk of the tree gives a topological order (reversed though).
@yuwuxiong1165
@yuwuxiong1165 4 года назад
The 2006 book (and the 2016 survey) is a kind of terse (i.e., unfriendly for newbees like me), but the video is great!
@Hodpril
@Hodpril 5 лет назад
Way cool!
@ishan_kumar
@ishan_kumar 5 лет назад
Awesome !
@j7gy8b
@j7gy8b 5 лет назад
44:05 if you test for overflow after the fact by checking to see if the mark value is negative, that's undefined behavior and the compiler is allowed to remove the check - at least in C++. Check against MAXINT or std::numeric_limits<int>::max() instead.
@j7gy8b
@j7gy8b 5 лет назад
Great motivation for, and introduction to, elimination trees starting at 40:45
@yuwuxiong1165
@yuwuxiong1165 4 года назад
thanks...I was looking for that part from lecture 4...
@j7gy8b
@j7gy8b 5 лет назад
All this extra work to avoid memory leaks is unnecessary in C++
@j7gy8b
@j7gy8b 5 лет назад
and the amortized constant time insertion described starting around 30:00 is a standard feature of the vector container
@puncherinokripperino2500
@puncherinokripperino2500 2 года назад
@@j7gy8b dude, std::vector is a giant mess, you don't want to use it in your linear algebra library
@FastFSharp
@FastFSharp 6 лет назад
Such a wealth of information here.
@j7gy8b
@j7gy8b 6 лет назад
Unfortunately the link to the slides has succumbed to bit rot. Any chance for a fresh one? Thanks.
@DocSparse
@DocSparse 6 лет назад
Sure thing. I've update the link. Thanks for catching the dead url.
@j7gy8b
@j7gy8b 6 лет назад
Thanks for all your excellent videos :)
@shulzr
@shulzr 6 лет назад
I wish there was a table of content for these lectures! Quite interesting but search for topic almost impossible.
@DocSparse
@DocSparse 6 лет назад
Yes, it's on my to-do list ...
@shulzr
@shulzr 6 лет назад
Thank you! and thank you for these detailed video lectures!
@周振亚-t2m
@周振亚-t2m 6 лет назад
huge fan of yours. I am developing circuit simulation software, used a lots of your algrithoms
@trackmyactivity
@trackmyactivity 6 лет назад
Thanks Tim, great content. I was wondering if your notation for sparse matrix indexing was correct? Most probably I missed some point. You write "column j is Ai[Ap[j] … Ap[j+1]-1], ditto in Ax", but I don't get the correct answer, because lets say j=1 (first col) then Ap[1] = 0, and Ai[0] is a bad Matlab index (i guess) :/ Using (Ap(j)+1:Ap(j+1)) works for Ax and Ai+1. With it you can get the nonzero values from Ax and their row positions from Ai+1 in the original matrix: Ap: [0, 3, 6, 8, 10] Ai : [0, 1, 3, 1, 2, 3, 0, 2, 1, 3] Ax: [4.5, 3.1, 3.5, 2.9, 1.7, 0.4, 3.2, 3.0, 0.9, 1.0] Ex: Lets say j = 3 Ax(Ap(j)+1:Ap(j+1)) ---------- Ax(Ap(3)+1: Ap(4)) = Ax(6+1:8) = Ax(7:8) = [3.2, 3.0] Ai(Ap(j)+1 : Ap(j+1))+1 ---------- Ai(7:8)+1 = [0,2] + 1 = [1,3] So column j = 3 has values [3.2, 3.0] non-zero values, which are in rows [1, 3] of the original matrix Show less REPLY
@DocSparse
@DocSparse 6 лет назад
The first column is j=0, not j=1. So Ap[0]=0. Ap[1] is the index of the start of the *second* column, j=1. For the MATLAB user, and in all m-files, indices are 1-based and the first column is 1. But internally in MATLAB, all matrices are stored with 0-based indexing. The MATLAB user (and in the m-file) all indices are 1-based but when using them internally, they are converted to 0-based indexing.
@trackmyactivity
@trackmyactivity 6 лет назад
Ok perfect, thank you for your quick answer
@andrzejreinke
@andrzejreinke 7 лет назад
quality it's little bit off, but actually lectures are very valuable
@DocSparse
@DocSparse 7 лет назад
Andrzej Reinke: yes the quality isn’t great. These were recorded by the university of Florida using their equipment. These are from my copy on DVD and it’s the best available format.
@afrahnajib1218
@afrahnajib1218 7 лет назад
Could I ask a question please , how did you make simulations at around 46:30?
@DocSparse
@DocSparse 7 лет назад
I use MATLAB's image drawing capability. I start with a matrix I'm working on and then create a new matrix that holds an image, and color it with whatever I'm doing. It uses the MATLAB 'image' function and MATLAB 'colormap'. To paint a large block, I have to draw a block of pixels all the same color. So I have to do it all myself. I have my main algorithm that works on the matrix. Then I write another function that uses 'image' and 'colormap' to draw my matrix.
@afrahnajib1218
@afrahnajib1218 7 лет назад
I started learing on sparse matrices ... your book and your videos are my bread and salt these days .. My thesis will be on large scale hybrid solvers.. could you please suggest me any open source library for sparse matrix hybrid solver . Hybrid here means those solvers that combine iterative and ddirect methods?
@DocSparse
@DocSparse 7 лет назад
I'm not aware enough about them to make a suggestion.
@lordphu
@lordphu 7 лет назад
haha Prof. Tim Davis' quite comic explanation @44:41 "FACTORIZE, FACTorize, factorize, factorize" ^__^
@FrankDellaert
@FrankDellaert 8 лет назад
Results 11days->7mins, on www.cise.ufl.edu/research/sparse/matrices/Rucci/Rucci1.html
@FrankDellaert
@FrankDellaert 8 лет назад
Multifrontal QR
@FrankDellaert
@FrankDellaert 8 лет назад
Nested dissection. Graphs not matrices epilogue.
@FrankDellaert
@FrankDellaert 8 лет назад
More AMD, interesting historical anecdote at 24mins, switch to matching at 30mins
@FrankDellaert
@FrankDellaert 8 лет назад
From minimum degree to amd, key ideas at 50:00
@FrankDellaert
@FrankDellaert 8 лет назад
Chapter 7, Ordering Methods
@DocSparse
@DocSparse 8 лет назад
The slides of the talk are posted at faculty.cse.tamu.edu/davis/research_files/Stanford2013.pdf
@ziyuhuang6237
@ziyuhuang6237 Год назад
Great talk!
@cronosddd
@cronosddd 8 лет назад
Can you please attach or provide link of the presentation slides ?
@MegLivingInsideOut
@MegLivingInsideOut 9 лет назад
You are beyond adorable. Love you both! Happy Birthday Uncle Tim!
@swamihuman9395
@swamihuman9395 9 лет назад
BEAUTIFUL!:)
@thegoon5202
@thegoon5202 9 лет назад
Nine lectures in before we learn how to add matrices. This shows how working with sparse matrices is quite different.