1つめのコードでうまくいかない理由としては出力が21×63のサイズになっている点です。
つまり、21×21のサイズである変数 X, Y, Z が1つの変数になっている事が問題です。
2つめのコードでうまくいかないのは無名関数の出力は1つだからです。
-------------------------
以下のように関数を最後に書くことをオススメします。
r=1.5;
a=10;
b=10;
c=10;
[x,y,z]=Mysphr(a,b,c,r);
surf(x,y,z)
axis equal
関数は例題とほぼ変えてません。
function [X1,Y1,Z1] = Mysphr(x1,y1,z1,r,n)
% nの指定がない場合は20を規定とする
if nargin == 4
n = 20;
end
[x,y,z]=sphere(n);
X1 = x*r + x1;
Y1 = y*r + y1;
Z1 = z*r + z1;
end
