69 lines
2.9 KiB
Python
69 lines
2.9 KiB
Python
|
|
from config import QR_RESULTS, PLOTS_PATH, nanoseconds_to_seconds, setup
|
||
|
|
import pandas as pd
|
||
|
|
import matplotlib.pyplot as plt
|
||
|
|
import matplotlib.ticker as ticker
|
||
|
|
import seaborn as sns
|
||
|
|
import numpy as np
|
||
|
|
|
||
|
|
|
||
|
|
def plot_lambda(kind, smoothing_window=2):
|
||
|
|
if kind not in ['error', 'time']:
|
||
|
|
raise ValueError("kind must be one of 'error', 'time'")
|
||
|
|
|
||
|
|
df = pd.read_csv(QR_RESULTS.format("statisticsQR-lambda-m300n20--{}.csv".format(kind)))
|
||
|
|
lambda_values = df['lambda']
|
||
|
|
|
||
|
|
if kind == 'time':
|
||
|
|
|
||
|
|
setup(title='QR running time with respect to λ', y_label='Time (s)', x_label='λ')
|
||
|
|
meantime_values = df['meantime']
|
||
|
|
stdtime_values = df['stdtime']
|
||
|
|
sns.lineplot(data=df, x='lambda', y='meantime', label='Mean Time', color='blue')
|
||
|
|
plt.fill_between(
|
||
|
|
lambda_values,
|
||
|
|
meantime_values - stdtime_values,
|
||
|
|
meantime_values + stdtime_values,
|
||
|
|
alpha=0.3,
|
||
|
|
label='Standard Deviation',
|
||
|
|
color='lightblue'
|
||
|
|
)
|
||
|
|
plt.ylim(0, 3.5 * max(meantime_values + stdtime_values))
|
||
|
|
plt.gca().yaxis.set_major_formatter(ticker.FuncFormatter(nanoseconds_to_seconds))
|
||
|
|
else:
|
||
|
|
setup(title='QR errors with respect to λ', y_label='Error', x_label='λ')
|
||
|
|
|
||
|
|
df['relative'] = np.convolve(df['relative'], np.ones(smoothing_window) / smoothing_window, mode='same')
|
||
|
|
df['residual'] = np.convolve(df['residual'], np.ones(smoothing_window) / smoothing_window, mode='same')
|
||
|
|
df['stability'] = np.convolve(df['stability'], np.ones(smoothing_window) / smoothing_window, mode='same')
|
||
|
|
|
||
|
|
sns.lineplot(data=df, x='lambda', y='relative', label='Relative Error', color='blue')
|
||
|
|
sns.lineplot(data=df, x='lambda', y='residual', label='Residual', color='red')
|
||
|
|
sns.lineplot(data=df, x='lambda', y='stability', label='Stability', color='green')
|
||
|
|
plt.yscale('log')
|
||
|
|
|
||
|
|
plt.legend(loc='upper right', fontsize=15)
|
||
|
|
plt.xscale('log', base=10)
|
||
|
|
|
||
|
|
plt.savefig(PLOTS_PATH.format('QR', "QR-lambda-{}.png".format(kind)))
|
||
|
|
plt.show()
|
||
|
|
|
||
|
|
|
||
|
|
def plot_forward_error(smoothing_window=5):
|
||
|
|
df = pd.read_csv(QR_RESULTS.format("statisticsQR-forward-m300n20--error.csv"))
|
||
|
|
setup(title='QR forward error with respect to λ', y_label='Error', x_label='λ')
|
||
|
|
df['forwardQ'] = np.convolve(df['forwardQ'], np.ones(smoothing_window) / smoothing_window, mode='same')
|
||
|
|
df['forwardR'] = np.convolve(df['forwardR'], np.ones(smoothing_window) / smoothing_window, mode='same')
|
||
|
|
sns.lineplot(data=df, x='lambda', y='forwardQ', label='Forward Error on Q', color='blue')
|
||
|
|
sns.lineplot(data=df, x='lambda', y='forwardR', label='Forward Error on R', color='red')
|
||
|
|
plt.yscale('log')
|
||
|
|
plt.xscale('log', base=10)
|
||
|
|
plt.legend(loc='upper right', fontsize=15)
|
||
|
|
plt.savefig(PLOTS_PATH.format('QR', "QR-forward_error.png"))
|
||
|
|
plt.show()
|
||
|
|
|
||
|
|
|
||
|
|
if __name__ == '__main__':
|
||
|
|
plot_lambda('error')
|
||
|
|
plot_lambda('time')
|
||
|
|
plot_forward_error()
|