1、你是怎樣呼叫的?照理說,如果是正常的呼叫,例如
yanyan(1.5,1:10,.1)
應該會出現Matrix must be square的提示,而不會是too many input。
2、vectorize不是這樣用的,它只能把一個char型別的表示式或sym、inline物件給替換成點運算,而對於一個double型別的數值,會強制轉換為char型別,可能導致丟失精度(因為char的表示範圍有限,即使在中文環境下,範圍也只是0-65535,而且只能是整數)。
3、表示式寫錯了,把2h^2給放到指數函式外面了,也就是說
exp(-(x-y)^2)/(2*z^2)
應為
exp(-(x-y)^2/(2*z^2))
4、可以簡單修改如下:
function c=yanyan(x,y,z)
n=length(y);
zz=sum(exp(-(x-y).^2/(2*z^2)));
yux=n*z*(2*pi)^0.5;
c=zz/yux;
但這樣的寫法不支援x為向量的情況,可以考慮改成
c=arrayfun(@(x)sum(exp(-(x-y).^2/(2*z^2))),x)/yux;
1、你是怎樣呼叫的?照理說,如果是正常的呼叫,例如
yanyan(1.5,1:10,.1)
應該會出現Matrix must be square的提示,而不會是too many input。
2、vectorize不是這樣用的,它只能把一個char型別的表示式或sym、inline物件給替換成點運算,而對於一個double型別的數值,會強制轉換為char型別,可能導致丟失精度(因為char的表示範圍有限,即使在中文環境下,範圍也只是0-65535,而且只能是整數)。
3、表示式寫錯了,把2h^2給放到指數函式外面了,也就是說
exp(-(x-y)^2)/(2*z^2)
應為
exp(-(x-y)^2/(2*z^2))
4、可以簡單修改如下:
function c=yanyan(x,y,z)
n=length(y);
zz=sum(exp(-(x-y).^2/(2*z^2)));
yux=n*z*(2*pi)^0.5;
c=zz/yux;
但這樣的寫法不支援x為向量的情況,可以考慮改成
function c=yanyan(x,y,z)
n=length(y);
yux=n*z*(2*pi)^0.5;
c=arrayfun(@(x)sum(exp(-(x-y).^2/(2*z^2))),x)/yux;