赋值计算时出现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 编辑 ] symbol个人不熟, 刚刚好奇试了下, 没LZ的问题?
clear; syms x; y=sin(x); x=1; subs(y)
clear; x=1; y=sin(x)
LZ几个发帖是否都已解决? 若解决建议给齐解决方法, 做个ending! 我之前的那个帖子问题已经解决了,我在那贴中已经写了解决的程序啊
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 编辑 ] 我有时也遇到这种问题,不同的命令的算法会不一样,所以处理比较大的数要小心一些
[ 本帖最后由 无水1324 于 2009-3-21 08:12 编辑 ] 我后面还需要计算fais的积分,可是用syms定义符号变量后,积分时结果就是NaN
用什么别的方法可以避免呢 sum函数不支持符号计算吧?? 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 编辑 ] 想算数值,就用 subs 给出具体变量的数值,想继续符号计算,syms 定义的就可以啦。 问题是用subs赋值时,结果为NaN
而用syms定义符号计算,后面算积分时又出现了NaN,没法解决啊 symbolic真的不太熟! 试玩下!
猜测LZ出现NaN是因为fais中又含y, 致造成某些数值过大, 仔细观察fais会发现有e344之大数
即然要算数值, 在y=2*tox*log(v/tox+(v^2/tox^2+1)^0.5);後面多加y=subs(y);先算数值
页:
[1]