1) str2double - довольно сложная функция, которая может конвертировать множество различных форматов. Я предполагаю, что ваша mex реализация намного проще, и это может объяснить, почему это быстрее. Примеры сомов приведены в справке matlab:
str2double('123.45e7')
str2double('123 + 45i')
str2double('3.14159')
str2double('2.7i - 3.14')
str2double({'2.71' '3.1415'})
str2double('1,200.34')
2) почему мекс быстрее? Потому что, когда вы выполняете стандартный скрипт m-файла, в основном есть программа, которая будет читать вашу программу и выполнять ее (интерпретатор). Итак, есть два слоя. Однако, когда вы пишете mex-файл, вы компилируете его непосредственно на языке CPU, чтобы он мог запускаться непосредственно процессором. Здесь только один слой, поэтому он быстрее. Для более подробной информации, смотрите статью в Википедии:
http://en.wikipedia.org/wiki/Interpreted_language
http://en.wikipedia.org/wiki/Compiled_language
3) Вы не можете увидеть код str2double, потому что он скомпилирован. Matworks не предоставляет код этой функции. Вы можете выполнить это, но не читать это. Это одинаково для всех встроенных функций.