2014-10-20 67 views
0

这里有很多变数,所以忍受着我。经过调试等所有变量都工作正常,除了Tinf,所以假设所有其他变量是恒定的。 TINF被定义为矩阵功能,fzero不工作

Tinf=34.5*cos((2*pi).*(t-5))+275.5 

是t的函数,其中t为

t=linspace(0,50,600) 

我试图计算

T(1)=fzero(fun_Partridge,0) 

其中

[email protected](x) ((I(1).^2).*Rprime(1))+(Alpha.*D(1).*Gs)-(o*E*pi.*D(1).*(x.^4-Tinf.^4))-(h*pi.*D(1).*(x-Tinf)) 

(记住,所有其他变量正在工作,并在那里矿石基本上是常数,也即是矩阵的每一个值),只有两列变量

一切都正常运行,直到

T(1)=fzero(fun_Partridge,0) 

,我得到的错误信息:

“操作数到||和& &运算符必须可转换为逻辑标量值。

在fzero(线308) 错误ELSEIF〜ISFINITE(FX)|| 〜isreal(fx)

MaxSag_Take_2错误(第102行) T(1)= fzero(fun_Partridge,0); “

我非常初学者,当谈到MATLAB的,所以请不要犹豫,愚蠢的事了一些。 提前感谢!

+0

你可以试试这个'选项= optimset(“显示”,“ITER”);',看看它甚至开始重复与否。并通过'[x fval exitflag output] = fzero(fun,x0,options)' – NKN 2014-10-20 21:26:25

+0

'来跟踪它,我对MatLab并不熟悉,所以我不确定代码中的所有时间段,并且我不知道您是否在做任何部门,但我会检查以确保您在任何时候都不会被零分。 – TheBlindSpring 2014-10-20 21:31:39

回答

0

不知道的大小,形状和类型,你的其他变量,这是很难说,但基于该错误消息,fx应该是一个标量和它的未来作为一个载体,这意味着你传递的东西fzero,它不喜欢。

我现在没有MATLAB在我面前,但看着你的fun_Partridge函数,你正在做一些变量的矩阵乘法和其他元素的乘法。如果o和/或E是向量,则可能会以矩阵而不是向量函数结束,如果fzero正在使用类似sum的函数构造fx,则会产生向量而不是标量,从而导致短路行为的&&||呛。

除了上面@ NKN的评论,请尝试执行size(fun_Partridge(1)),看看你得到了一个向量或矩阵。

+0

我最终做了一个for循环与计数器,它似乎有固定的东西,无论如何短期... – 2014-10-21 00:21:10