brook77 发表于 2009-3-19 21:45

赋值计算时出现NaN,如何解决

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

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

[ 本帖最后由 ChaChing 于 2009-3-19 22:54 编辑 ]

ChaChing 发表于 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!

brook77 发表于 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),);
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];

symsv;
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 编辑 ]

tangjikede 发表于 2009-3-20 09:02

我有时也遇到这种问题,不同的命令的算法会不一样,所以处理比较大的数要小心一些

[ 本帖最后由 无水1324 于 2009-3-21 08:12 编辑 ]

brook77 发表于 2009-3-20 10:04

我后面还需要计算fais的积分,可是用syms定义符号变量后,积分时结果就是NaN
用什么别的方法可以避免呢

ydlcsu 发表于 2009-3-20 10:10

sum函数不支持符号计算吧??

brook77 发表于 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),);
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];

symsv;
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 编辑 ]

hanihaoma 发表于 2009-3-20 22:23

想算数值,就用 subs 给出具体变量的数值,想继续符号计算,syms 定义的就可以啦。

brook77 发表于 2009-3-21 09:29

问题是用subs赋值时,结果为NaN
而用syms定义符号计算,后面算积分时又出现了NaN,没法解决啊

ChaChing 发表于 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);先算数值
页: [1]
查看完整版本: 赋值计算时出现NaN,如何解决