在 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 sig
从 sig==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
。假定参数 x
和 y
在第一个匿名函数声明之前设置。
或者你可以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);
这里的主要区别是x
和y
每次都被送入sigmafun2
的函数中,所以可以改变。在较早的情况下,x
和 y
的值在匿名函数定义时 是固定的 ,即当我们发出 myfun = @(sig)...
.根据您的需要,您可以找到您想要使用的内容。
作为概念证明,我没有检查它对实际问题的表现如何。你绝对应该对你期望的参数类型有一个初步的想法,因为会有很多情况没有解决方案,并且 fzero
将 return a NaN
.
Oliver Amundsen 的更新: 带有 x=100, y=0.001
的结果 sig(mu)
函数如下所示:
我有对数正态方程:
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 sig
从 sig==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
。假定参数 x
和 y
在第一个匿名函数声明之前设置。
或者你可以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);
这里的主要区别是x
和y
每次都被送入sigmafun2
的函数中,所以可以改变。在较早的情况下,x
和 y
的值在匿名函数定义时 是固定的 ,即当我们发出 myfun = @(sig)...
.根据您的需要,您可以找到您想要使用的内容。
作为概念证明,我没有检查它对实际问题的表现如何。你绝对应该对你期望的参数类型有一个初步的想法,因为会有很多情况没有解决方案,并且 fzero
将 return a NaN
.
Oliver Amundsen 的更新: 带有 x=100, y=0.001
的结果 sig(mu)
函数如下所示: