Scilab:得到一个函数的未经证实的参数

时间:2015-04-07 13:05:17

标签: function scilab

我想知道是否有办法实现像

这样的东西
-->80923=myCoolFunction(p,56,7)

    p=24
在Scilab中?当我输入时,这是当前的结果:

-->8761.7635 = tauxcompose(p, 4, 25)
Warning: obsolete use of '=' instead of '=='.
        !       


                       !--error 4 
Undefined variable: p

感谢您的回答。

1 个答案:

答案 0 :(得分:0)

您必须使用 fsolve,如@https://help.scilab.org/docs/6.1.0/en_US/fsolve.html 所记录的

示例:

function r = myCoolFunction(p,a)
    r = p .^2 .* exp(-a*p)
endfunction

p 是变量。 a 是一个额外的参数(如您的示例中的 a=56 等)。

现在我们搜索 p 使得例如 myCoolFunction(p,1) == 100,假设至少有一个解决方案。我们构建

deff("out = gap(p,a,c)","out = myCoolFunction(p,a) - c")

初始猜测 p0:显示 myCoolFunction(p,1) 的图,看看它在 100 附近的位置

p0 = -3;

然后我们调用 fsolve

[p,v,status] = fsolve(p0, list(gap,1,100))

结果:

-->    [p,v,status] = fsolve(p0, list(gap,1,100))
 p  = 
  -2.6534493

 v  = 
   0.         means: the found solution p is exact (up to the default relative tolerance 1e-10)

 status  = 
   1.         means: fsolve() has well converged to a solution

独立检查:

--> myCoolFunction(p,1)
 ans  =
   100.

现在,什么是 p 获得 myCoolFunction(p, 2) == 1e4

p = fsolve(-4, list(gap, 2, 1e4))
myCoolFunction(p, 2)

结果和检查:

--> p = fsolve(-4, list(gap, 2, 1e4))
 p  = 
  -3.3856301

--> myCoolFunction(p, 2)
 ans  =
   10000.000