我希望这是正确的领域。我试图让这段代码在MatLab中运行。
function y=test(x)
y=-x+(B/(B-1))*(r-a)*p+(B/(B-1))*(r-a)*(b((1-(b/x)^(B-1))/r- a)+p* ((b/x)^B))/(1-(b/x)^B);
end
然后我跳转到命令值并输入:
B=3.0515;
b=1.18632*10^5;
a=.017;
r=.054;
p=5931617;
然后我通过输入这个来尝试找到第一个等式的零,我得到错误:
solution=fzero(@test,5000000)
我收到以下错误:
错误:文件:test.m行:5列:1此语句不是 在任何功能内。 (它跟随END终止了 函数的定义" test"。)
新错误
使用fzero时出错(第289行) FZERO无法继续,因为用户提供的function_handle ==> @(X) (测试(X,B,B,A,R,P)) 因以下错误而失败。
下标索引必须是实数正整数或逻辑。
答案 0 :(得分:1)
我猜这是scoping的问题,你在命令行中定义变量(B
,b
等...但是试图在里面使用它们你的test
函数超出范围。您应该更改测试功能,将其作为参数使用,然后使用anonymous function,这样您在test
中对fsolve
的调用仍然只需要一个参数:
function y=test(x, B, b, r, a, p)
y=-x+(B/(B-1))*(r-a)*p+(B/(B-1))*(r-a)*(b((1-(b/x)^(B-1))/r- a)+p* ((b/x)^B))/(1-(b/x)^B);
end
和
B=3.0515;
b=1.18632*10^5;
a=.017;
r=.054;
p=5931617;
solution=fzero(@(x)(test(x,B,b,a,r,p)),5000000)
顺便说一下,除非你确实意味着矩阵乘法,否则我建议你用{-1}}中的*
和/
替换所有{@ 1}}和test
的元素运算符{{ 1}}和.*
。如果你正在处理标量,现在没关系,但如果你以后想要扩展你的项目并需要一个矢量化的解决方案,它会产生很大的不同。
关于您添加到问题中的错误:
./
之后的代码放在函数文件中。 (本地功能除外)。您的目标函数应该是一个包含单个函数代码的.m文件。end
在MATLAB中意味着你试图索引变量...b((1-(b/x)^(B-1))...
,在这种情况下b
的值必须是一个正整数。我猜你错过了(1-(b/x)^(B-1)
答案 1 :(得分:0)
你的
scala> count2002to2011.keys // all artists within the time period
res0: Iterable[String] = Set(Sue, Joe, Tom)
scala> count2002to2011.values.sum // total count within the time period
res1: Int = 6
scala> count2002to2011("Sue") // count for just this artist
res2: Int = 4
无法访问工作区中的变量。您需要以某种方式传递值。你可以这样做:
function y=test(x)
y=-x+(B/(B-1))*(r-a)*p+(B/(B-1))*(r-a)*(b((1-(b/x)^(B-1))/r- a)+p* ((b/x)^B))/(1-(b/x)^B);
end
然后你可以创建一个隐式包装函数:
function y=test(x,B,b,a,r,p)
y=-x+(B/(B-1))*(r-a)*p+(B/(B-1))*(r-a)*(b((1-(b/x)^(B-1))/r- a)+p* ((b/x)^B))/(1-(b/x)^B);
end
我还没有测试fzero是否会返回合理的结果,但这段代码不应该出错。