声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2754|回复: 9

[编程技巧] 赋值计算时出现NaN,如何解决

[复制链接]
发表于 2009-3-19 21:45 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
在赋值计算的时候,用subs赋值.  例如:
syms x; y=f(x); x=1; subs(y)
结果显示y为NaN

但若直接给变量赋值再带入式子,比如:
x=1; y=f(x);
y 就能得出正常的结果,这是怎么回事呢

[ 本帖最后由 ChaChing 于 2009-3-19 22:54 编辑 ]
回复
分享到:

使用道具 举报

发表于 2009-3-19 23:17 | 显示全部楼层
symbol个人不熟, 刚刚好奇试了下, 没LZ的问题?
clear; syms x; y=sin(x); x=1; subs(y)
clear; x=1; y=sin(x)

LZ几个发帖是否都已解决? 若解决建议给齐解决方法, 做个ending!
 楼主| 发表于 2009-3-20 00:06 | 显示全部楼层
我之前的那个帖子问题已经解决了,我在那贴中已经写了解决的程序啊
LS你举的例子这种情况是可以计算出结果的
但我的情况不行,如下
clear all
Ld=15e-9; q=1.6e-19; Nd=1e25; a=5e-9; tox=3e-9; esi=1.0536e-10;
eox=3.45e-11; Vd=1; Vfb=-0.485; faib=0.526; Vg=-2;
for n=0:4;
   r(n+1)=fzero(@(x)x*tan(x+pi)-a*eox/(esi*tox),[n*pi,(n+1/2)*pi-1000*eps]);
end
Ld1=2*tox*log(Ld/tox+(Ld^2/tox^2+1)^0.5);
A=[      .4,  -.3e-4,   .2e-8, -.1e-12,  .1e-16];
B=[     .4,    -.1,  .4e-1, -.2e-1,  .1e-1];

syms  v;
y=2*tox*log(v/tox+(v^2/tox^2+1)^0.5);
fais=Vg-Vfb+q*Nd*tox*a/eox+sum((A.*exp(r*y/a)+B.*exp(-r*y/a)).*cos(r));
v=Ld;
subs(fais)

ans =

   NaN

但如果写成:
v=Ld; y=2*tox*log(v/tox+(v^2/tox^2+1)^0.5);
fais=Vg-Vfb+q*Nd*tox*a/eox+sum((A.*exp(r*y/a)+B.*exp(-r*y/a)).*cos(r));
>> fais

fais =

    1.6936

fais计算结果不一样, 为什么用subs不能得出正确的结果呢

[ 本帖最后由 ChaChing 于 2009-3-20 11:52 编辑 ]
发表于 2009-3-20 09:02 | 显示全部楼层
我有时也遇到这种问题,不同的命令的算法会不一样,所以处理比较大的数要小心一些

[ 本帖最后由 无水1324 于 2009-3-21 08:12 编辑 ]
 楼主| 发表于 2009-3-20 10:04 | 显示全部楼层
我后面还需要计算fais的积分,可是用syms定义符号变量后,积分时结果就是NaN
用什么别的方法可以避免呢
发表于 2009-3-20 10:10 | 显示全部楼层
sum函数不支持符号计算吧??
 楼主| 发表于 2009-3-20 10:55 | 显示全部楼层
sum是支持符号运算的,其实我举的第一个例子,是前5项求和,结果为NaN,但如果只算前3项的话,是可以得出结果的,这也是我的另一个疑问
clear all
Ld=15e-9; q=1.6e-19; Nd=1e25; a=5e-9; tox=3e-9; esi=1.0536e-10;
eox=3.45e-11; Vd=1; Vfb=-0.485; faib=0.526; Vg=-2;
for n=0:2;
   r(n+1)=fzero(@(x)x*tan(x+pi)-a*eox/(esi*tox),[n*pi,(n+1/2)*pi-1000*eps]);
end
Ld1=2*tox*log(Ld/tox+(Ld^2/tox^2+1)^0.5);
A=[     .4,  -.3e-4,  .2e-8]; B=[     .4,    -.1,  .4e-1];

syms  v;
y=2*tox*log(v/tox+(v^2/tox^2+1)^0.5);
fais=Vg-Vfb+q*Nd*tox*a/eox+sum((A.*exp(r*y/a)+B.*exp(-r*y/a)).*cos(r));
v=Ld; subs(fais)

ans =

    1.6511

[ 本帖最后由 ChaChing 于 2009-3-22 09:46 编辑 ]
发表于 2009-3-20 22:23 | 显示全部楼层
想算数值,就用 subs 给出具体变量的数值,想继续符号计算,syms 定义的就可以啦。
 楼主| 发表于 2009-3-21 09:29 | 显示全部楼层
问题是用subs赋值时,结果为NaN
而用syms定义符号计算,后面算积分时又出现了NaN,没法解决啊
发表于 2009-3-21 23:21 | 显示全部楼层
symbolic真的不太熟! 试玩下!
猜测LZ出现NaN是因为fais中又含y, 致造成某些数值过大, 仔细观察fais会发现有e344之大数
即然要算数值, 在y=2*tox*log(v/tox+(v^2/tox^2+1)^0.5);後面多加y=subs(y);先算数值
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-6-3 00:00 , Processed in 0.066245 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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