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

时间:2015-10-22 20:41:45

标签: matlab equation

我有对数正态的等式:

  

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来表示。有什么想法吗???

谢谢!

1 个答案:

答案 0 :(得分:1)

以下是使用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
sigsig==1开始

并将其返回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会为您输入的sigma的每个值提供mu。假设参数xy在第一个匿名函数声明之前设置。

或者你可以 reaaally 一般,并定义

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会返回NaN

Oliver Amundsen的更新sig(mu)生成的x=100, y=0.001函数如下所示:

figure