codex/dual-basis-skew-coordinates.py

dual-basis-skew-coordinates.py
"""Show how two dual measurements recover a vector's skew-basis coordinates."""

from pathlib import Path

import matplotlib.pyplot as plt
import numpy as np


def main():
    basis=np.array([[1.,1.],[0.,1.]])
    dual=np.linalg.inv(basis)
    v=np.array([3.,1.])
    coefficients=dual @ v
    assert np.allclose(dual @ basis,np.eye(2))
    assert np.allclose(coefficients,[2,1])
    assert np.allclose(basis @ coefficients,v)
    old_row=np.array([2.,-1.]);new_row=old_row @ basis
    assert np.allclose(new_row,[2,1])
    assert old_row @ v==new_row @ coefficients==5
    assert np.allclose(basis.T @ v,[3,4])
    fig,axes=plt.subplots(1,2,figsize=(11,5.8),dpi=120,facecolor='white')
    x=np.linspace(-.4,3.7,200)
    for j,ax in enumerate(axes):
        row=dual[j]
        for c in [-1,0,1,2,3]:
            y=(row[0]*x-c)/(-row[1])
            focus=c==coefficients[j]
            ax.plot(x,y,color='#2b709f' if focus else '#cbd4dc',
                    lw=2.3 if focus else 1.1,ls='-' if focus else '--')
        for vec,label,color in [(basis[:,0],r'$b_1$','#3a7252'),
                                (basis[:,1],r'$b_2$','#8c5a9d'),(v,r'$v$','#2b709f')]:
            ax.annotate('',xy=vec,xytext=(0,0),
                        arrowprops={'arrowstyle':'->','color':color,'lw':2.3})
            offset=(-.12,.15) if label==r'$b_1$' else (-.18,.05)
            ax.text(vec[0]+offset[0],vec[1]+offset[1],label,color=color,fontsize=14)
        ax.plot([0,2,3],[0,0,1],color='#c67b2f',lw=2,ls=':',zorder=4)
        ax.scatter(*v,s=60,color='#2b709f',zorder=5)
        ax.axhline(0,color='#8d9ba7',lw=.7);ax.axvline(0,color='#8d9ba7',lw=.7)
        ax.set(xlim=(-.4,3.7),ylim=(-.4,3.2),aspect='equal',xlabel='x',ylabel='y')
        ax.spines[['top','right']].set_visible(False)
        formula=r'$b_1^*(x,y)=x-y$' if j==0 else r'$b_2^*(x,y)=y$'
        ax.set_title(formula,fontsize=16,pad=12)
        ax.text(.5,-.25,rf'$b_{j+1}^*(3,1)={int(coefficients[j])}$',
                ha='center',transform=ax.transAxes,fontsize=16,color='#2b709f')
        label=rf'$b_{j+1}^*={int(coefficients[j])}$'
        ax.text(2.68,.51 if j==0 else 1.1,label,fontsize=12,color='#2b709f',
                bbox={'facecolor':'white','edgecolor':'none','pad':2})
    fig.suptitle('Dual measurements recover coefficients, even for a skew basis',fontsize=17,y=.975)
    fig.text(.5,.03,r'$v=(3,1)=2b_1+b_2$; blue lines are equal-measurement sets.',
             ha='center',fontsize=14)
    fig.subplots_adjust(left=.065,right=.965,bottom=.26,top=.83,wspace=.28)
    fig.savefig(Path.cwd()/Path(__file__).with_suffix('.png').name,
                facecolor='white',transparent=False)
    plt.close(fig)


if __name__=='__main__':
    main()