function ss = tweedie_safety_stock2(p, mu, phi, P) ss = mu; delta = 0.1; tol = 1e-6; while true Q = tweedie_cdf(p, mu, phi, ss); if abs(Q - P) < tol break; end if Q < P ss = ss + delta; else ss = ss - delta; delta = delta / 2; end end disp(ss); end function Q = tweedie_cdf(p, mu, phi, x) if p == 1 Q = poisscdf(x, mu); elseif p == 2 Q = gamcdf(x, phi, mu/phi); else Q = exp(tweedie_logcdf(p, mu, phi, x)); end end function logQ = tweedie_logcdf(p, mu, phi, x) if x == 0 if p < 1 logQ = -inf; else logQ = log(1 - p) + log(mu^(1-p)/((1-p)*phi^(1-p))); end elseif x < 0 logQ = -inf; else logQ = -1/p * log(x/phi) - (x/phi)^(1-p)/(1-p) + ... (1/p - 1/2) * log(x/mu) + (x/mu)^(1- p)/(1-p); end end为什么显示不了结果
时间: 2024-03-31 08:32:37 浏览: 54
这段代码并没有调用tweedie_safety_stock2函数,因此并没有执行函数内部的代码。如果要显示结果,需要在代码中调用该函数并提供函数需要的输入参数。例如,可以在代码最后添加如下语句来调用该函数:
```
ss = tweedie_safety_stock2(1.5, 10, 1.2, 0.8);
```
这里假设需要求解的Tweedie分布的参数为p=1.5,均值为mu=10,离散度参数为phi=1.2,需保护的概率为P=0.8。这样,函数将会返回计算出的安全库存量,并用disp函数将结果打印出来。
相关问题
function ss = tweedie_safety_stock(p, mu, phi, P) % Tweedie分布的安全库存计算 % p: Tweedie分布的p参数 % mu: Tweedie分布的均值参数 % phi: Tweedie分布的phi参数 % P: 目标安全库存的概率,取值范围为(0, 1) % 初始化 ss = mu; delta = 0.1; tol = 1e-6; % 迭代求解 while true Q = tweedie_cdf(p, mu, phi, ss); if abs(Q - P) < tol break; end if Q < P ss = ss + delta; else ss = ss - delta; delta = delta / 2; end end end function Q = tweedie_cdf(p, mu, phi, x) % Tweedie分布的累积分布函数计算 % p: Tweedie分布的p参数 % mu: Tweedie分布的均值参数 % phi: Tweedie分布的phi参数 % x: 自变量 if p == 1 Q = poisscdf(x, mu); elseif p == 2 Q = gamcdf(x, phi, mu/phi); else Q = exp(tweedie_logcdf(p, mu, phi, x)); end end function logQ = tweedie_logcdf(p, mu, phi, x) % Tweedie分布的对数累积分布函数计算 % p: Tweedie分布的p参数 % mu: Tweedie分布的均值参数 % phi: Tweedie分布的phi参数 % x: 自变量 if x == 0 if p < 1 logQ = -inf; else logQ = log(1 - p) + log(mu^(1-p)/((1-p)*phi^(1-p))); end elseif x < 0 logQ = -inf; else logQ = -1/p * log(x/phi) - (x/phi)^(1-p)/(1-p) + ... (1/p - 1/2) * log(x/mu) + (x/mu)^(1- p)/(1-p); end end这个应该如何输出ss
你可以在调用 tweedie_safety_stock 函数后,将其返回值 ss 输出到命令窗口或者保存到变量中。例如:
```matlab
p = 1.5;
mu = 10;
phi = 2;
P = 0.95;
ss = tweedie_safety_stock(p, mu, phi, P);
disp(ss); % 输出 ss 到命令窗口
save('ss.mat', 'ss'); % 将 ss 保存到 ss.mat 文件中
```
这样,你就可以看到 tweedie_safety_stock 函数计算得到的安全库存 ss 的值了。
function Q = tweedie_cdf(p, mu, phi, x) if p == 1 Q = poisscdf(x, mu); elseif p == 2 Q = gamcdf(x, phi, mu/phi); else Q = exp(tweedie_logcdf(p, mu, phi, x)); end end
这是一个计算tweedie分布的累积分布函数(CDF)的函数。其中p是tweedie分布的指数,mu和phi是分布的两个参数,x是要计算的值。如果p等于1,那么Q将被计算为泊松分布函数(poisscdf)在mu处的值。如果p等于2,Q将被计算为伽马分布函数(gamcdf)在mu/phi处的值。否则,Q将被计算为tweedie CDF的指数(tweedie_logcdf)的指数函数值。最终结果是tweedie分布在给定值x处的累积分布函数值。
阅读全文