出了什么问题?
p*q^x-1 % Your original code
您的原始代码采用q,将其提升为xth 次方,乘以p,然后减去 1。这相当于您肯定没有的以下代码不打算。
(p*(q^x)) - 1 % What your code was doing written differently
考虑到order of operations,更正很容易。
p*q^(x-1) % Your corrected code
另一个可能错误来源是您的函数未保存为独立的 m 文件“Geometric.m”,该文件也必须在您的 MATLAB 路径上(MATLAB 必须“看到”它)。如果您将函数文件“MyFunction.m”存储在文件夹中,则可以将该文件夹添加到 MATLAB 的可见路径中,只需一行(或手动导航到该路径)。详情请见how to create a function。
mypathtoMyFunction = 'C:\Users\SonnyJordan\Documents\SweetCode\FunctionFolder';
path(path,'mypathtoMyFunction')
完整的解决方案(3 种方法)
从Geometric distribution 的参数化中,您需要对 {1, 2, 3, 4, ...} 的支持。
两件事。 (1) 我会推荐一个anonymous function 来处理这样的事情。 (2) 由于 p + q = 1,因此一个决定另一个(即q = 1-p)。
方法一:匿名函数
% MATLAB R2018b
geopmfh =@(p,k) p.*((1-p).^(k-1)); % Define pmf
k = 5; % Number of trials
p = 0.2; % Prob("Success" on trial)
geopmfh(p,k) % Probability
以上代码完全是vectorized,因此您可以将其传递给向量和/或输入数组。
快速检查以验证它是有效的probability mass function (pmf)。
M = 500;
sum(geopmfh(p,[1:M])) % should return 1 if M large enough
方法 2:函数(带错误检查)
顺便说一句,如果您想在函数输入上添加错误检查以确保 k 是一个正整数并且 p介于 [0 1] 之间。
function [pmf] = geopmf(p,k)
%GEOPMF Calculates pmf for Geometric(p,k) distribution on {1,2,3,...}
% pmf = geopmf(p,k)
% p = n x d matrix of n d-dimensional success probabilities; must be [0,1]
% k = m x d matrix of m d-dimensional numbers of trials
% pmf = n x m matrix of probabilities
%
% Examples:
% k = 4; p = .5;
% pmf = geopmf(p,k) % pmf = 0.0625
% Input Error Checking ****************************************************
if isempty(p) | isempty(k), pmf = []; return, end
if nargin ~= 2, error('Function requires two inputs.'), end
if p < 0 | p > 1, error('p must be between 0 and 1.'), end
if k < 1 | ~isint(k), error('k must be positive integer & k > 0.'), end % with this parameterization
n = size(p,1); d = size(p,2);
m = size(k,1);
if isempty(p) | ~isnumeric(p) | ~ismatrix(p)
error('p must be non-empty numeric scalar, vector, or 2-D matrix.');
elseif isempty(k) | ~isnumeric(k) | ~ismatrix(k)
error('k must be non-empty numeric scalar, vector, or 2-D matrix.');
elseif size(k,2) ~=d
error('Rows of p and k must have same dimensions.');
end
% End (Input Error Checking) **********************************************
pmf = p.*((1-p).^(k-1));
end
方法三:MATLAB的内置函数
如果您有统计工具箱,MATLAB 有一个已经调用的函数geopdf,但请注意它是根据支持 {0,1,2,...} 的另一个“版本”参数化的(请参阅wiki page)。
p.*((1-p).^k) % The other parameterization
geopdf(k,p) % Note order of inputs
您可以通过调整输入来纠正这一点。
geopdf(k-1,p) % Subtract 1 trial
使用 MATLAB R2018b 测试的代码。