Skip to main content

General Matrix inversion by MKL in C++.

Here is a example of complex matrix inversion code by using MKL.




#include
#include
#define MKL_Complex16 std::complex<double>
#include "mkl.h"
using namespace std;

void inverse(complex<double>* A, int N)
{
   int *IPIV = new int[N+1];
   int LWORK = N*N;
   complex<double> *WORK = new complex<double>[LWORK];
   int INFO;
   zgetrf_(&N,&N,A,&N,IPIV,&INFO);
   zgetri_(&N,A,&N,IPIV,WORK,&LWORK,&INFO);

   delete IPIV;
   delete WORK;
}
int main()
{
   int n=2;
   complex<double> * A = new complex<double> [n*n];
   A[0]=complex<double>(1.,2.);
   A[1]=complex<double>(3.,4.);
   A[2]=complex<double>(5.,6.);
   A[3]=complex<double>(7.,8.);
   inverse(A,n);
   for(int i=0;i<4;i++)
       cout<
   return 0;
}

Output is:
(-0.5,0.4375)
(0.25,-0.1875)
(0.375,-0.3125)
(-0.125,0.0625)

For comparing same code in numpy :

In [1]: from numpy.linalg import inv

In [2]: x=np.array([[1+2j,3+4j],[5+6j,7+8j]], dtype=complex)

In [3]: inv(x)
Out[3]:  
array([[-0.500+0.4375j,  0.250-0.1875j],
      [ 0.375-0.3125j, -0.125+0.0625j]])









Comments

Popular posts from this blog

Filling between curves with color gradient or cmap in Matplotlib

I was trying to plot fill_between () in matplotlib with color gradient or any cmap defined in pyplot.  After googleing a lot i couldn't find any solution.  An alternative method is to use imshow() . I have created this example :  import numpy as np import matplotlib.pyplot as plt from matplotlib.path import Path from matplotlib.patches import PathPatch xx=np.arange(0,10,0.01) yy=xx*np.exp(-xx) path = Path(np.array([xx,yy]).transpose()) patch = PathPatch(path, facecolor='none') plt.gca().add_patch(patch) im = plt.imshow(xx.reshape(yy.size,1),  cmap=plt.cm.Reds,interpolation="bicubic",                 origin='lower',extent=[0,10,-0.0,0.40],aspect="auto", clip_path=patch, clip_on=True) #im.set_clip_path(patch) plt.savefig("out.png") Source: Matplotlib Example  http://matplotlib.org/examples/pylab_examples/image_clip_path.html  

pm3d map of gnuplot in matplotlib

In gnuplot pm3d map plot a 3d data into a surface with color as value of "z". Lets say we have a data file something like this .. 0.00    0.00    0.00 0.00    1.00    0.00 0.00    2.00    0.00 0.00    3.00    1.9358 0.00    4.00    3.618 0.00    5.00    5.17 0.00    6.00    6.93 0.00    7.00    8.82 0.00    8.00    10.692 1.00    0.00    0.00 1.00    1.00    0.00 1.00    2.00    0.00 1.00    3.00    2.1318 .... ... In gnuplot prompt we will do something like this . set pm3d map; set dgrid  20,20 sp "data.dat" u 1:2:3    and this will produce a figure something like a...

Lecture notes on Condensed Matter Theory

Though there is lot of good text books on condensed matter physics. But there are many good lecture note available by various people. Here i will list some of them . These are mainly on the subject of strongly correlated eletrons. 1.  "Quantum Magnetism Approaches to Strongly Correlated Electrons"  by Assa Auerbach     ( http://arxiv.org/abs/cond-mat/9801294v1   ) 2. "Theory of Superconductivity" by N. B. Kopnin      ( https://ltl.tkk.fi/wiki/images/8/8f/TheorySC10.pdf ) 3. "SISSA Lecture notes on Numerical methods for strongly correlated electrons" by Sandro Sorella and Federico Becca      ( http://people.sissa.it/~sorella/Simulazioni.pdf ) 4. "Quantum Theory of Condensed Matter" by John Chalker       ( http://www-thphys.physics.ox.ac.uk/people/JohnChalker/qtcm/lecture-notes.pdf ) 5. "Quantum Condensed Matter Physics - Lecture Notes" by Chetan Nayak      ( http:/...