查看: 139|回复: 2|关注: 0

[已解决] interal积分结果如果是inf,则用任意数字替代。

[复制链接]

新手

49 麦片

财富积分


050


30

主题

77

帖子

0

最佳答案
本帖最后由 houleilei 于 2020-11-18 16:29 编辑

syms theta
A=[1,1];Z=[-1.4,-2.8];
for i=1:2

funz1=Z(i).*log(sqrt(1+A(i).^2-2.*A(i).*cos(theta)+Z(i).^2)+A(i)-cos(theta))-cos(theta).*log(sqrt(1+A(i).^2-2.*A(i).*cos(theta)+Z(i).^2)+Z(i))-sin(theta).*atan(Z(i)*(A(i)-cos(theta))./(sqrt(1+A(i).^2-2*A(i).*cos(theta)+Z(i).^2).*sin(theta)));

FZ11(i)=(Z(i)>0&&A(i)<=1)*integral(matlabFunction(funz1),0,pi)+...
end


如上积分:当A取1,Z取-1.4时,integral积分结果为Inf, 前面的判断逻辑数为0,0*Inf是个NaN。我想把NaN这个结果变成0,请问怎么处理呢?因为不变成0的话,NaN加上后面的常数,还会是NaN,,谢谢大家!
回复主题 已获打赏: 0 积分

举报

论坛优秀回答者

5

主题

2605

帖子

799

最佳答案
  • 关注者: 219
发表于 2020-11-18 22:50:49 | 显示全部楼层 |此回复为最佳答案
本帖最后由 TouAkira 于 2020-11-18 10:53 编辑

有专门的isinf函数啊,加个该函数的判断就是了呗
  1. for i=1:2
  2.     funz1=Z(i).*log(sqrt(1+A(i).^2-2.*A(i).*cos(theta)+Z(i).^2)+A(i)-cos(theta))-cos(theta).*log(sqrt(1+A(i).^2-2.*A(i).*cos(theta)+Z(i).^2)+Z(i))-sin(theta).*atan(Z(i)*(A(i)-cos(theta))./(sqrt(1+A(i).^2-2*A(i).*cos(theta)+Z(i).^2).*sin(theta)));
  3.     tempL = (Z(i)>0&&A(i)<=1);
  4.     tempR = integral(matlabFunction(funz1),0,pi);
  5.     if isinf( tempR )
  6.         FZ11(i) = 0;
  7.     else
  8.         FZ11(i)=tempL * tempR;
  9.     end
  10. end
复制代码


另外还有专门的isnan函数,你不改循环,等全部结果出来之后用isnan把NaN全找出来改掉也行啊
提问请:①准确描述问题②提出你的思考(等着抄作业的一律锁帖)③提供代码文本而非截图④及时反馈
回复此楼 已获打赏: 0 积分

举报

新手

49 麦片

财富积分


050


30

主题

77

帖子

0

最佳答案
 楼主| 发表于 2020-11-19 08:41:33 | 显示全部楼层
谢谢谢谢大神
回复此楼 已获打赏: 0 积分

举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

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