查看: 120|回复: 17|关注: 0

[已答复] 积分出错:FUN 必须为函数、有效的字符向量表达式或内联函数对象

[复制链接]

新手

22 麦片

财富积分


050


152

主题

444

帖子

0

最佳答案
  • 关注者: 1
发表于 3 天前 | 显示全部楼层 |阅读模式
10 财富积分

本帖最后由 zhizi123410 于 2020-3-27 13:18 编辑

老师好,我有个积分程序,不知道什么原因,老是提示:
错误使用 fcnchk (line 107)
FUN 必须为函数、有效的字符向量表达式或内联函数对象。

出错 quad (line 57)
f = fcnchk(funfcn);

请求解答一下,谢谢啊!!

带函数积分,试下Q=quadv(@(x)spincurrent(x),E-omega,E);

论坛优秀回答者

18

主题

2239

帖子

454

最佳答案
  • 关注者: 89
发表于 3 天前 | 显示全部楼层
Q(j)=quad(spincurrent(N,LN,eta,E,H0,Hlr,HC,omega,v0),E-omega,E);  这一行的第一个参数要用函数句柄,看看quad的文档就知道了! 新版本不建议使用quad,使用integral函数求积分
多看帮助文档
说明你的matlab版本

新手

22 麦片

财富积分


050


152

主题

444

帖子

0

最佳答案
  • 关注者: 1
 楼主| 发表于 3 天前 | 显示全部楼层
这里有矩阵,矩阵相乘等操作,最后积分是对Sy进行的,积分路径由E-omega到E,其他是常数,

新手

22 麦片

财富积分


050


152

主题

444

帖子

0

最佳答案
  • 关注者: 1
 楼主| 发表于 3 天前 | 显示全部楼层
您好,感谢您的指导,能否帮我看看啊?我郁闷好久了。谢谢您的帮助。

新手

22 麦片

财富积分


050


152

主题

444

帖子

0

最佳答案
  • 关注者: 1
 楼主| 发表于 3 天前 | 显示全部楼层
深蓝孩童 发表于 2020-3-27 09:17
Q(j)=quad(spincurrent(N,LN,eta,E,H0,Hlr,HC,omega,v0),E-omega,E);  这一行的第一个参数要用函数句柄,看 ...

老大,帮忙看看吧,弄不出来就痛苦啊,折磨我好久了。

新手

22 麦片

财富积分


050


152

主题

444

帖子

0

最佳答案
  • 关注者: 1
 楼主| 发表于 3 天前 | 显示全部楼层
真实有偿:):):)

论坛优秀回答者

18

主题

2239

帖子

454

最佳答案
  • 关注者: 89
发表于 3 天前 | 显示全部楼层
zhizi123410 发表于 2020-3-27 09:23
老大,帮忙看看吧,弄不出来就痛苦啊,折磨我好久了。

看quad文档哦。句柄如果你不会写,我也不知道怎么做。
多看帮助文档
说明你的matlab版本

新手

22 麦片

财富积分


050


152

主题

444

帖子

0

最佳答案
  • 关注者: 1
 楼主| 发表于 3 天前 | 显示全部楼层
本帖最后由 zhizi123410 于 2020-3-27 11:03 编辑
深蓝孩童 发表于 2020-3-27 10:21
看quad文档哦。句柄如果你不会写,我也不知道怎么做。

感谢,我好像有点明白了。
E=0.04;
omega=0.01;

Q=quad(@(x) spincurrent(x,N,LN,eta,H0,Hlr,HC,omega,v0),E-omega,E);

这个用上以后,我想让函数spincurrent对x积分,x范围从E-omega到E,但是为什么x传递到函数里的时候变成了一行7列,7个数字,不是一个数字啊?
x =

    0.0300    0.0314    0.0327    0.0350    0.0373    0.0386    0.0400


它不应该这样啊!!

论坛优秀回答者

18

主题

2239

帖子

454

最佳答案
  • 关注者: 89
发表于 3 天前 | 显示全部楼层
zhizi123410 发表于 2020-3-27 11:00
感谢,我好像有点明白了。
E=0.04;
omega=0.01;

不知道,在2019b运行你的这三行代码的结果是下边的错误,没办法复现你的问题。
>> E=0.04;
omega=0.01;

Q=quad(@(x) spincurrent(x,N,LN,eta,H0,Hlr,HC,omega,v0),E-omega,E);
Error using eye
N-dimensional arrays are not supported.
Error in spincurrent (line 5)
binv = (E+eta.*1i).*eye(N) - H;
Error in @(x)spincurrent(x,N,LN,eta,H0,Hlr,HC,omega,v0)

Error in quad (line 67)
y = f(x, varargin{:});
多看帮助文档
说明你的matlab版本

论坛优秀回答者

18

主题

2239

帖子

454

最佳答案
  • 关注者: 89
发表于 3 天前 | 显示全部楼层
zhizi123410 发表于 2020-3-27 11:00
感谢,我好像有点明白了。
E=0.04;
omega=0.01;

@(x) 中的x要对应你的积分变量,而不是非要放在函数的第一个参数。
多看帮助文档
说明你的matlab版本
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /4 下一条

快速回复 返回顶部 返回列表