--- a/inst/blsprice.m
+++ b/inst/blsprice.m
@@ -39,6 +39,21 @@
     print_usage ();
   endif
 
+  ## Input checking
+  persistent names = {"PRICE", "STRIKE", "RATE", "TIME", "VOLATILITY", "YIELD"};
+  inputs   = {Price, Strike, Rate, Time, Volatility, Yield};
+  numerics = cellfun (@isnumeric, inputs);
+  if (! all (numerics))
+    error ("blsprice: %s must be numeric", names(find (numerics, 1)));
+  endif
+  scalars = cellfun (@isscalar, inputs);
+  if (! all (scalars))
+    sizes = cellfun (@size, inputs(! scalars), "UniformOutput", false);
+    if (! all (cellfun (@(x) isequal (sizes{1}, x), sizes)))
+      error ("blsprice: matrix arguments must have all the same size");
+    endif
+  endif
+
   sigma_sqrtT = Volatility .* sqrt (Time);
 
   d1 = 1 ./ sigma_sqrtT .* (log (Price ./ Strike) + (Rate - Yield + ...
@@ -67,3 +82,5 @@
 %!error blsprice (1, 2)
 %!error blsprice (1, 2, 3)
 %!error blsprice (1, 2, 3, 4)
+%!error blsprice ("invalid", "type", "argument", 4, 5)
+%!error blsprice ({1, 2, 3}, [2 7 8], [8 3 1], 4, 10)