错误使用fzero”乐趣必须是一个函数,一个有效的字符串表达式,或一个内联函数对象”

24日视图(30天)
我得到错误使用fsolve或fzero在下面的代码:
U = 1;
U < 20
情商= @ (q) 2。* (1-cos(2。*π。* q));
总部= @ (q, n0) ((eq (q)) ^ 2 + 2。* * n0。* (eq (q))) ^ 0.5;
y = @ (q, n0) (((eq (q)) +(美国* n0)。/总部(q, n0)) 1;
一个= -0.5;
c = -0.01;
v = @ (n0)(积分(@ (q) y (q, n0), a, c));
简历= @ (n0) n0 + (0.5 v (n0)) * 1;
n0 = fzero(简历(n0), 0.1);
情节(U, n0)
持有
U = U + 1;
结束
谁能帮帮我吗?

接受的答案

马特·J”class=
马特·J 2015年2月25日
n0 = fzero(简历,0.1);
4评论

登录置评。

答案(1)

约翰D 'Errico”class=
约翰D 'Errico 2015年2月25日
编辑:约翰D 'Errico 2015年2月25日
简历是一个函数处理。,perfectly valid for fzero to work on. It is a function that takes one argument, and returns an output that can be minimized.
简历(n0)是一个变量。一个数字。这将是,如果n0定义。它可能在你的工作空间,否则,你会得到一个不同的错误之前fzero甚至进入。
无论如何,简历(n0)不是一个有效的事情fzero可以最小化。
有一个区别。虽然你可能认为简历是n0的函数,在MATLAB看到简历(n0)的表达式,它看起来,对自己说,是的,我发现n0。我发现简历。它将评估表达式,然后将它作为参数传递给一个名为fzero的函数。
只有这样,我们才能fzero控制。它看到传入,在这种情况下,变量包含简历(n0)的结果,再次,n0必须被定义在工作区中,否则你会得到一个不同的错误。确实不是一个函数值。只是一个数字。所以fzero会心烦意乱,告诉你:
“快乐必须是一个函数,一个有效的字符串表达式,或一个内联函数对象”
所以解决方法很简单。删除(n0)在你调用fzero fsolve,像这样:
n0 = fzero(简历,0.1);
19日的评论
INFOZOU”class=
INFOZOU 2017年8月20日
编辑:INFOZOU 2017年8月20日
你好
  • 我已经改变了objfun =总和(objvec)因为我应该最大化这个函数
  • 我已经添加了下界0(大小(obj))获得只有X的积极成果
  • 我已经改变了非线性约束通过以下表达式:Qr (nn, 1, 2, jj) = min(总和(QA (:, nn, ii, jj)),德(nn, 1, 2, jj));Qr (nn 2二世,jj) = min(总和(QA (:, nn, ii, jj)) Qr (nn, 1, 2, jj)德(nn 2二世,jj));
  • 我想确认如果有差异之间的约束:一个* x < b和x * < b和我如何改变程序的第二个案例。
我得到以下结果:>在backsolveSys solveKKTsystem computeTrialStep在fmincon屏障(第798行)masterFINALMODEL2(第249行)警告:矩阵接近奇异或严重了。结果可能是不准确的。RCOND = 1.590792 e-16。
解算器过早地停止。
fmincon停止,因为它超过了评价函数极限,选项。MaxFunctionEvaluations = 1000000(选中的值)。
exitflag =
0
fval =
-1.1377 e + 23
我也尝试过使用优化工具但也有同样的问题,我得到了结果。
< <
> >
非常感谢你的合作

登录置评。

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!