function [a,b] = powerlaw(x,y,x_name,y_name,plt) %Plot basic power law fits on a log log plot from linear data % Input values as x and y, and (optional) x_name & y_name (strings) as the % x and y axis names. % % Karlie Rees % University of Utah % if ~exist('x_name','var') || ischar(x_name) == 0 x_name = 'x'; % If x_name and y_name are not defined, end % or if they are not char, just default % them to x and y if ~exist('y_name','var') || ischar(y_name) == 0 y_name = 'y'; end if ~exist('plt','var') plt = 1; end log_x = log(x); % Convert x and y data into logs log_y = log(y); fit = polyfit(log_x,log_y,1); % Find linear fit of log data c1 = exp(fit(2)); % Coefficient [p,S] = polyfit(log_x,log_y,1); [y_fit,delta] = polyval(p,log_x,S); R2 = 1 - (S.normr/norm(log_y - mean(log_y)))^2; if plt figure; loglog(x,y,'o','Color',[0 0.45 0.74],'LineWidth',1); % plot x and y data as circles hold on p1 = loglog(x,exp(polyval(fit,log_x)),'-k','LineWidth',2); % plot fit curve xlabel(x_name,'FontSize',12,'FontWeight','bold'); ylabel(y_name,'FontSize',12,'FontWeight','bold'); legend([p1],sprintf('Fit: %s = %.2f %s^{%.2f} \n R^2= %.2f',y_name,c1,x_name,fit(1),R2),... 'FontSize',12,'Location','best'); pbaspect([1 1 1]); yticks = get(gca,'YTick'); set(gca,'YTickLabel',yticks); xticks = get(gca,'XTick'); set(gca,'XTickLabel',xticks); end a=c1; b=(fit(1));