用matlaB求定积分的时候报错

在用matlaB求定积分的时候报错信息如下:
错误使用 sym/subsindex (line 663)
Invalid indexing or function definition. When defining a function, ensure that the body of
the function is a SYM object. When indexing, the input must be numeric, logical or ':'.

出错 landscape1fig6 (line 79)
E(j)=eta_e(j).*n*Zr.*int((S(i)-Sh)./(Sstar-Sw).*p(i),S(i),Sh,Sfc);
代码如下:
syms S(i) E(j) T(j) L(j) R(j)
E(j)=eta_e(j).*n*Zr.*int((S(i)-Sh)./(Sfc-Sh).*p(i),S(i),Sh,Sfc);
T(j)=eta_t(j).*n*Zr.*(int((S(i)-Sw)./(Sstar-Sw).*p(i),S(i),Sw,Sstar)+int(p(i),S(i),Sfc,1));
L(j)=m.*n*Zr.*int(exp(beta*(S(i)-Sfc)-1).*p(i),S(i),Sfc,1);
R(j)=E(j)+E(j)+L(j);

S(i)相当于x 定积分范围是Sh,Sfc,只有S(i)是变量,其他都是常数

请问这是什么原因?如何修改?

matlab中求定积分一般用int函数。
int(expr,var,a,b)是int函数求定积分的一般形式。其中,expr为符号表达式,var为符号变量,为积分变量,缺省为x。a、b为积分上下限,可以是数字,也可以是符号变量。

出错时,可以检查代码是否有如下问题:
1、是否有调用格式的错误,expr需要为符号表达式,var需要为符号变量。(在旧的matlab版本中,支持使用字符串作为表达式与积分变量,在新的版本中已经不支持了)

2、表达式中有错误。
习惯性错误,如 2x+1、xy、sinx、e^x、ln(x) 等等,这些都是错误的,会直接报错。
应该改为2*x+1、x*y、sin(x)、exp(x)、log(x)

3、有时候会碰到积分不可积的情况或者积分结果为特殊函数。
温馨提示:内容为网友见解,仅供参考
第1个回答  2014-12-02
我不确定积分中的上下限是否能用syms类型的变量
int((S(i)-Sh)./(Sstar-Sw).*p(i),S(i),Sh,Sfc);

你可以把其中的常数都换为实际对应的数字,然后试试能不能行追问

我这里积分的上下线没有用syms类型的变量呢,Sh,Sfc是常数

这里的把常数代进去之后求出来的定积分还是个定积分!

追答

你的S(i)是表达式么??

本回答被提问者和网友采纳
第2个回答  2014-12-02
syms S(i) E(j) T(j) L(j) R(j)

不能这样定义, 去掉()
相似回答