在 Matlab 中给定固定 y 和 x 求解 mu 和 sigma 的对数正态方程

Solve Lognormal equation for mu and sigma given fixed y and x in Matlab

我有对数正态方程:

y = 1/(3.14*x*sig)*exp(-(log(x)-mu)^2/(2*sig^2))

和固定

y = a

x = b

我需要找到 mu 和 sig 的值。我可以像这样在 Matlab 中设置 mu:

mu = [0 1 1.1 1.2...]

并找到所有与 sig 值对应的值,但我不能用 solve 或 subs 来解决。有什么想法吗???

谢谢!

这是使用 fzero 以数字方式搜索 sigma(x,y,mu) 函数的概念证明。

假设你已经x,y固定,你可以设置

mu = 1; %or whatever
myfun = @(sig) y-1./(3.14*x*sig).*exp(-(log(x)-mu)^2./(2*sig.^2)); %x,y,mu from workspace

sigma = fzero(myfun,1);

这将求解方程

y-1/(3.14*x*sig)*exp(-(log(x)-mu)^2/(2*sig^2))==0

for sigsig==1 开始 return 变成 sigma.

你可以将它泛化得到mu:

的函数
myfun2 = @(mu,sig) y-1./(3.14*x*sig).*exp(-(log(x)-mu).^2./(2*sig.^2));
sigmafun=@(mu) fzero(@(sig)myfun2(mu,sig),1);

然后 sigmafun 将为您输入的每个 mu 值提供一个 sigma。假定参数 xy 在第一个匿名函数声明之前设置。

或者你可以reaaally general,然后定义

myfun3 = @(x,y,mu,sig) y-1./(3.14*x*sig).*exp(-(log(x)-mu).^2./(2*sig.^2));
sigmafun2 = @(x,y,mu) fzero(@(sig)myfun3(x,y,mu,sig),1);

这里的主要区别是xy每次都被送入sigmafun2的函数中,所以可以改变。在较早的情况下,xy 的值在匿名函数定义时 是固定的 ,即当我们发出 myfun = @(sig)... .根据您的需要,您可以找到您想要使用的内容。

作为概念证明,我没有检查它对实际问题的表现如何。你绝对应该对你期望的参数类型有一个初步的想法,因为会有很多情况没有解决方案,并且 fzero 将 return a NaN.


Oliver Amundsen 的更新: 带有 x=100, y=0.001 的结果 sig(mu) 函数如下所示: