<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Hi, in Intel® oneAPI Math Kernel Library</title>
    <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Reduced-Row-Echelon-Form-of-a-matrix-rref/m-p/1019847#M19673</link>
    <description>&lt;P&gt;Hi,&lt;/P&gt;

&lt;P&gt;Assume the matrix under consideration is represented as a compound matrix A=(A1|A2). What you want can be described by the following formula A1^{-1}*(A1|A2).&amp;nbsp;See the&amp;nbsp;code in Fortran&amp;nbsp;below. Please don't be surprised with a small difference appered due to low accuracy of data you provided (only 4 digits).&lt;/P&gt;

&lt;PRE class="brush:fortran;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; program test
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; implicit none
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; integer m,n,i,j
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; parameter (m=5,n=9)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; double precision a(m,n),b(n,m),c(m,m), work(m), d(m,n),alpha,beta
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; integer info, ipiv(m)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; data alpha/1D0/, beta/0D0/
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; data b/ 0.8147D0, 0.0975D0, 0.1576D0, 0.1419D0, 0.6557D0, 0.7577D0, 0.7060D0, 0.8235D0, 0.4387D0,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.9058D0, 0.2785D0, 0.9706D0, 0.4218D0, 0.0357D0, 0.7431D0, 0.0318D0, 0.6948D0, 0.3816D0,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.1270D0, 0.5469D0, 0.9572D0, 0.9157D0, 0.8491D0, 0.3922D0, 0.2769D0, 0.3171D0, 0.7655D0,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.9134D0, 0.9575D0, 0.4854D0, 0.7922D0, 0.9340D0, 0.6555D0, 0.0462D0, 0.9502D0, 0.7952D0,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.6324D0, 0.9649D0, 0.8003D0, 0.9595D0, 0.6787D0, 0.1712D0, 0.0971D0, 0.0344D0, 0.1869D0/

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do i=1,m
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do j=1,n
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a(i,j)=b(j,i)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; d(i,j)=0D0
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end do
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end do
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do i=1,m
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do j=1,m
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; c(i,j)=a(i,j)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end do
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end do

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print *,"initial matrix (A1|A2)"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do i=1,m
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print 1,(a(i,j), j=1,n)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end do&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; call dgetrf(m,m,c,m,ipiv,info)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(info.ne.0) then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print *,"dgetrf returned info=",info
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; stop
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end if
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; call dgetri( m, c, m, ipiv, work, m, info )
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(info.ne.0) then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print *,"dgetri returned info=",info
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; stop
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end if
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; call dgemm('N', 'N', m, n, m, alpha, c, m, a, m, beta, d, m)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print *,"result A^{-1}*(A1|A2)"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do i=1,m
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print 1,(d(i,j), j=1,n)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end do&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; stop
&amp;nbsp;&amp;nbsp; 1&amp;nbsp; format(1x, 9(1x, D11.4)) 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end&lt;/PRE&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;The&amp;nbsp;output of the code is&amp;nbsp;as follows:&lt;/P&gt;

&lt;P&gt;&amp;nbsp; initial matrix (A1|A2)&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; 0.8147D+00&amp;nbsp; 0.9750D-01&amp;nbsp; 0.1576D+00&amp;nbsp; 0.1419D+00&amp;nbsp; 0.6557D+00&amp;nbsp; 0.7577D+00&amp;nbsp; 0.7060D+00&amp;nbsp; 0.8235D+00&amp;nbsp; 0.4387D+00&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; 0.9058D+00&amp;nbsp; 0.2785D+00&amp;nbsp; 0.9706D+00&amp;nbsp; 0.4218D+00&amp;nbsp; 0.3570D-01&amp;nbsp; 0.7431D+00&amp;nbsp; 0.3180D-01&amp;nbsp; 0.6948D+00&amp;nbsp; 0.3816D+00&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; 0.1270D+00&amp;nbsp; 0.5469D+00&amp;nbsp; 0.9572D+00&amp;nbsp; 0.9157D+00&amp;nbsp; 0.8491D+00&amp;nbsp; 0.3922D+00&amp;nbsp; 0.2769D+00&amp;nbsp; 0.3171D+00&amp;nbsp; 0.7655D+00&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; 0.9134D+00&amp;nbsp; 0.9575D+00&amp;nbsp; 0.4854D+00&amp;nbsp; 0.7922D+00&amp;nbsp; 0.9340D+00&amp;nbsp; 0.6555D+00&amp;nbsp; 0.4620D-01&amp;nbsp; 0.9502D+00&amp;nbsp; 0.7952D+00&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; 0.6324D+00&amp;nbsp; 0.9649D+00&amp;nbsp; 0.8003D+00&amp;nbsp; 0.9595D+00&amp;nbsp; 0.6787D+00&amp;nbsp; 0.1712D+00&amp;nbsp; 0.9710D-01&amp;nbsp; 0.3440D-01&amp;nbsp; 0.1869D+00&lt;BR /&gt;
	&amp;nbsp;result A^{-1}*(A1|A2)&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; 0.1000D+01&amp;nbsp; 0.0000D+00&amp;nbsp; 0.0000D+00&amp;nbsp; 0.0000D+00&amp;nbsp; 0.4441D-15 -0.8384D+00&amp;nbsp; 0.1973D+01 -0.2399D+01 -0.2755D+01&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; 0.0000D+00&amp;nbsp; 0.1000D+01 -0.1776D-14&amp;nbsp; 0.0000D+00&amp;nbsp; 0.0000D+00&amp;nbsp; 0.3764D+01 -0.5919D+01&amp;nbsp; 0.8812D+01&amp;nbsp; 0.7998D+01&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; 0.8882D-15&amp;nbsp; 0.1776D-14&amp;nbsp; 0.1000D+01&amp;nbsp; 0.0000D+00&amp;nbsp; 0.1776D-14&amp;nbsp; 0.3852D+01 -0.4055D+01&amp;nbsp; 0.7631D+01&amp;nbsp; 0.7059D+01&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; 0.3553D-14&amp;nbsp; 0.0000D+00&amp;nbsp; 0.0000D+00&amp;nbsp; 0.1000D+01&amp;nbsp; 0.0000D+00 -0.7995D+01&amp;nbsp; 0.9205D+01 -0.1698D+02 -0.1508D+02&lt;BR /&gt;
	&amp;nbsp; -0.8882D-15&amp;nbsp; 0.0000D+00 -0.4441D-15 -0.8882D-15&amp;nbsp; 0.1000D+01&amp;nbsp; 0.2442D+01 -0.1512D+01&amp;nbsp; 0.4768D+01&amp;nbsp; 0.4470D+01&lt;BR /&gt;
	&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Fri, 27 Feb 2015 06:40:29 GMT</pubDate>
    <dc:creator>Victor_K_Intel1</dc:creator>
    <dc:date>2015-02-27T06:40:29Z</dc:date>
    <item>
      <title>Reduced Row Echelon Form of a matrix (rref)</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Reduced-Row-Echelon-Form-of-a-matrix-rref/m-p/1019846#M19672</link>
      <description>&lt;P&gt;Hi,&lt;/P&gt;

&lt;P&gt;I'm newbie to the Intel&amp;nbsp; MKL library and I'm trying to convert a code from Matlab to C using the C interface of Intel MKL routines.&lt;/P&gt;

&lt;P&gt;I haven't found a function to achieve the RREF of a matrix in Intel MKL. In fact, the RREF in Matlab performs gaussian elimination with partial pivoting and I want to apply it to a 5x9 matrix.&lt;/P&gt;

&lt;P&gt;Here is an example of RREF applied to a 5x9 matrix A&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.8147&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.0975&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.1576&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.1419&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.6557&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.7577&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.7060&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.8235&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.4387&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.9058&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.2785&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.9706&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.4218&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.0357&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.7431&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.0318&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.6948&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.3816&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.1270&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.5469&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.9572&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.9157&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.8491&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.3922&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.2769&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.3171&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.7655&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.9134&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.9575&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.4854&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.7922&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.9340&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.6555&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.0462&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.9502&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.7952&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.6324&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.9649&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.8003&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.9595&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.6787&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.1712&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.0971&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.0344&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.1869&lt;/P&gt;

&lt;P&gt;The RREF of A is composed of an 5x5 identity matrix and a 5x4 matrix&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1.0000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp; -0.8409&amp;nbsp;&amp;nbsp;&amp;nbsp; 1.9764&amp;nbsp;&amp;nbsp; -2.4048&amp;nbsp;&amp;nbsp; -2.7594&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp; 1.0000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp; 3.7698&amp;nbsp;&amp;nbsp; -5.9264&amp;nbsp;&amp;nbsp;&amp;nbsp; 8.8249&amp;nbsp;&amp;nbsp;&amp;nbsp; 8.0095&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp; 1.0000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp; 3.8571&amp;nbsp;&amp;nbsp; -4.0608&amp;nbsp;&amp;nbsp;&amp;nbsp; 7.6411&amp;nbsp;&amp;nbsp;&amp;nbsp; 7.0677&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp; 1.0000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp; -8.0047&amp;nbsp;&amp;nbsp;&amp;nbsp; 9.2175&amp;nbsp; -17.0036&amp;nbsp; -15.1016&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp; 1.0000&amp;nbsp;&amp;nbsp;&amp;nbsp; 2.4444&amp;nbsp;&amp;nbsp; -1.5157&amp;nbsp;&amp;nbsp;&amp;nbsp; 4.7735&amp;nbsp;&amp;nbsp;&amp;nbsp; 4.4750&lt;/P&gt;

&lt;P&gt;I tried to apply the LU factorisation with dgetrf and also the LAPACKE_dgels function but I dindn't get the wanted result.&lt;/P&gt;

&lt;P&gt;Thank you for your help&lt;/P&gt;

&lt;P&gt;&lt;BR /&gt;
	&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 24 Feb 2015 11:34:52 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Reduced-Row-Echelon-Form-of-a-matrix-rref/m-p/1019846#M19672</guid>
      <dc:creator>safa_o_</dc:creator>
      <dc:date>2015-02-24T11:34:52Z</dc:date>
    </item>
    <item>
      <title>Hi,</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Reduced-Row-Echelon-Form-of-a-matrix-rref/m-p/1019847#M19673</link>
      <description>&lt;P&gt;Hi,&lt;/P&gt;

&lt;P&gt;Assume the matrix under consideration is represented as a compound matrix A=(A1|A2). What you want can be described by the following formula A1^{-1}*(A1|A2).&amp;nbsp;See the&amp;nbsp;code in Fortran&amp;nbsp;below. Please don't be surprised with a small difference appered due to low accuracy of data you provided (only 4 digits).&lt;/P&gt;

&lt;PRE class="brush:fortran;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; program test
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; implicit none
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; integer m,n,i,j
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; parameter (m=5,n=9)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; double precision a(m,n),b(n,m),c(m,m), work(m), d(m,n),alpha,beta
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; integer info, ipiv(m)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; data alpha/1D0/, beta/0D0/
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; data b/ 0.8147D0, 0.0975D0, 0.1576D0, 0.1419D0, 0.6557D0, 0.7577D0, 0.7060D0, 0.8235D0, 0.4387D0,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.9058D0, 0.2785D0, 0.9706D0, 0.4218D0, 0.0357D0, 0.7431D0, 0.0318D0, 0.6948D0, 0.3816D0,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.1270D0, 0.5469D0, 0.9572D0, 0.9157D0, 0.8491D0, 0.3922D0, 0.2769D0, 0.3171D0, 0.7655D0,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.9134D0, 0.9575D0, 0.4854D0, 0.7922D0, 0.9340D0, 0.6555D0, 0.0462D0, 0.9502D0, 0.7952D0,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.6324D0, 0.9649D0, 0.8003D0, 0.9595D0, 0.6787D0, 0.1712D0, 0.0971D0, 0.0344D0, 0.1869D0/

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do i=1,m
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do j=1,n
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a(i,j)=b(j,i)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; d(i,j)=0D0
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end do
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end do
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do i=1,m
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do j=1,m
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; c(i,j)=a(i,j)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end do
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end do

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print *,"initial matrix (A1|A2)"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do i=1,m
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print 1,(a(i,j), j=1,n)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end do&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; call dgetrf(m,m,c,m,ipiv,info)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(info.ne.0) then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print *,"dgetrf returned info=",info
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; stop
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end if
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; call dgetri( m, c, m, ipiv, work, m, info )
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(info.ne.0) then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print *,"dgetri returned info=",info
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; stop
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end if
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; call dgemm('N', 'N', m, n, m, alpha, c, m, a, m, beta, d, m)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print *,"result A^{-1}*(A1|A2)"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do i=1,m
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print 1,(d(i,j), j=1,n)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end do&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; stop
&amp;nbsp;&amp;nbsp; 1&amp;nbsp; format(1x, 9(1x, D11.4)) 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end&lt;/PRE&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;The&amp;nbsp;output of the code is&amp;nbsp;as follows:&lt;/P&gt;

&lt;P&gt;&amp;nbsp; initial matrix (A1|A2)&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; 0.8147D+00&amp;nbsp; 0.9750D-01&amp;nbsp; 0.1576D+00&amp;nbsp; 0.1419D+00&amp;nbsp; 0.6557D+00&amp;nbsp; 0.7577D+00&amp;nbsp; 0.7060D+00&amp;nbsp; 0.8235D+00&amp;nbsp; 0.4387D+00&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; 0.9058D+00&amp;nbsp; 0.2785D+00&amp;nbsp; 0.9706D+00&amp;nbsp; 0.4218D+00&amp;nbsp; 0.3570D-01&amp;nbsp; 0.7431D+00&amp;nbsp; 0.3180D-01&amp;nbsp; 0.6948D+00&amp;nbsp; 0.3816D+00&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; 0.1270D+00&amp;nbsp; 0.5469D+00&amp;nbsp; 0.9572D+00&amp;nbsp; 0.9157D+00&amp;nbsp; 0.8491D+00&amp;nbsp; 0.3922D+00&amp;nbsp; 0.2769D+00&amp;nbsp; 0.3171D+00&amp;nbsp; 0.7655D+00&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; 0.9134D+00&amp;nbsp; 0.9575D+00&amp;nbsp; 0.4854D+00&amp;nbsp; 0.7922D+00&amp;nbsp; 0.9340D+00&amp;nbsp; 0.6555D+00&amp;nbsp; 0.4620D-01&amp;nbsp; 0.9502D+00&amp;nbsp; 0.7952D+00&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; 0.6324D+00&amp;nbsp; 0.9649D+00&amp;nbsp; 0.8003D+00&amp;nbsp; 0.9595D+00&amp;nbsp; 0.6787D+00&amp;nbsp; 0.1712D+00&amp;nbsp; 0.9710D-01&amp;nbsp; 0.3440D-01&amp;nbsp; 0.1869D+00&lt;BR /&gt;
	&amp;nbsp;result A^{-1}*(A1|A2)&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; 0.1000D+01&amp;nbsp; 0.0000D+00&amp;nbsp; 0.0000D+00&amp;nbsp; 0.0000D+00&amp;nbsp; 0.4441D-15 -0.8384D+00&amp;nbsp; 0.1973D+01 -0.2399D+01 -0.2755D+01&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; 0.0000D+00&amp;nbsp; 0.1000D+01 -0.1776D-14&amp;nbsp; 0.0000D+00&amp;nbsp; 0.0000D+00&amp;nbsp; 0.3764D+01 -0.5919D+01&amp;nbsp; 0.8812D+01&amp;nbsp; 0.7998D+01&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; 0.8882D-15&amp;nbsp; 0.1776D-14&amp;nbsp; 0.1000D+01&amp;nbsp; 0.0000D+00&amp;nbsp; 0.1776D-14&amp;nbsp; 0.3852D+01 -0.4055D+01&amp;nbsp; 0.7631D+01&amp;nbsp; 0.7059D+01&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; 0.3553D-14&amp;nbsp; 0.0000D+00&amp;nbsp; 0.0000D+00&amp;nbsp; 0.1000D+01&amp;nbsp; 0.0000D+00 -0.7995D+01&amp;nbsp; 0.9205D+01 -0.1698D+02 -0.1508D+02&lt;BR /&gt;
	&amp;nbsp; -0.8882D-15&amp;nbsp; 0.0000D+00 -0.4441D-15 -0.8882D-15&amp;nbsp; 0.1000D+01&amp;nbsp; 0.2442D+01 -0.1512D+01&amp;nbsp; 0.4768D+01&amp;nbsp; 0.4470D+01&lt;BR /&gt;
	&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Fri, 27 Feb 2015 06:40:29 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Reduced-Row-Echelon-Form-of-a-matrix-rref/m-p/1019847#M19673</guid>
      <dc:creator>Victor_K_Intel1</dc:creator>
      <dc:date>2015-02-27T06:40:29Z</dc:date>
    </item>
    <item>
      <title>For small example problems</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Reduced-Row-Echelon-Form-of-a-matrix-rref/m-p/1019848#M19674</link>
      <description>&lt;P&gt;For small example problems efficiency may not be considered important, but note that if you are going to perform the same calculation with larger problems or do the calculation a large number of times, instead of forming the inverse of the leading m X m submatrix A&lt;SUB&gt;1&lt;/SUB&gt; and multiplying that inverse by the remaining submatrix A&lt;SUB&gt;2&lt;/SUB&gt;, it would be more efficient to regard A&lt;SUB&gt;2&lt;/SUB&gt; as consisting of multiple right-hand sides, and use a single call to DGETRS instead of calling DGETRI and DGEMM as was done in #2. The corresponding lines of code:&lt;/P&gt;

&lt;PRE class="brush:fortran;"&gt;      call dgetrs('N',m,n-m,c,m,ipiv,a(1,m+1),m,info)
      print *,"result A^{-1}*A2)"
      do i=1,m
          print 1,(a(i,j), j=m+1,n)
      end do
&lt;/PRE&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 03 Mar 2015 14:28:00 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Reduced-Row-Echelon-Form-of-a-matrix-rref/m-p/1019848#M19674</guid>
      <dc:creator>mecej4</dc:creator>
      <dc:date>2015-03-03T14:28:00Z</dc:date>
    </item>
  </channel>
</rss>

