24小时热门版块排行榜    

查看: 1496  |  回复: 9
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

亮亮1283

新虫 (小有名气)

[交流] 【求助】请教Mathematica程序问题 已有5人参与

为什么我的程序对一个是函数求导后,得到的函数带入数值后竟然是复数!
以下是程序的一部分,M是一个2*2矩阵,矩阵中每一项均是Omega的函数,而S1,S2是关于omega的复函数

S1 = M[[1, 1]];
S2 = M[[2, 1]];
\[Phi]1 = Arg[S1];
\[Phi]2 = Arg[S2];
\[Tau]1 = D[\[Phi]1, \[Omega]];
得到的Tau代入数值后却是复数!不知道怎么回事!请好心人帮忙!
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

mshwangg

至尊木虫 (正式写手)

★ ★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖交流
resonant(金币+3):辛苦。 2010-05-26 23:01:22
好吧,我再解释一下这个问题
第一个程序(后赋值的)是按照楼主的程序思想做的。先对Arg函数求导,结果前面有了一项-3 (x^2)。所以当x是复数时,最终结果当然就是复数。
第二个程序(先赋值的)就不用多解释了,自然是先带入x的数值然后求导,所以看起来是Arg‘[-x^3+8I],因此-3 (x^2) 这一项不是随便加上的。最终结果当然是实数了。不过我没有考虑到的是mathematica对Arg‘[-x^3+8I]的计算结果等同于Arg[-x^3+8I],失策失策!见笑了。

那么对楼主的问题再说几句。1、Arg[]给出结果应当是实数,起码我没有想出来什么情况这个函数会给出复数结果。2、对Arg求导会多出来一些表达式,建议楼主仔细看看这些表达式的结果是否是复数。3、如果楼主珍惜大家的唾沫星子和脑细胞并且不违反保密的话,还是把S1等的表达式贴出来更好一些。
引用回帖:
Originally posted by RongShe at 2010-05-26 00:40:50:

其实先赋值和后赋值结果是一样的,你给的例子4楼里面少了前面的-3 (x^2) ,加上这一项结果就相同了
D[Arg[-x^3 + 8 I], x]
N[% /. x -> 3 + 4 I]
x = 3 + 4 I;
N[-3 x^2*
\!\(\*SuperscriptBox["A ...

10楼2010-05-26 22:49:20
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 10 个回答

resonant

木虫 (正式写手)

独自为政

不明白,难道是没有延迟赋值的问题?
交朋识友,猛搞科研。两手抓,两手都要硬。
2楼2010-05-21 17:31:05
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

mshwangg

至尊木虫 (正式写手)

★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖交流
resonant(金币+2):感谢回帖交流:-) 2010-05-21 21:42:53
给个例子,自己看吧
In[17]:= D[Arg[-x^3 + 8 I], x]
N[% /. x -> 3 + 4 I]

Out[17]=-3 x^2
\!\(\*SuperscriptBox["Arg", "\[Prime]",
MultilineFunction->None]\)[8 I - x^3]

Out[18]= 0.0504505 - 0.172973 I
3楼2010-05-21 21:21:58
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

mshwangg

至尊木虫 (正式写手)

★ ★
小木虫(金币+0.5):给个红包,谢谢回帖交流
resonant(金币+1):感谢回帖交流:-) 2010-05-21 21:42:59
然后是这个
不同的是x的赋值顺序
In[23]:= x = 3 + 4 I
N[
\!\(\*SuperscriptBox["Arg", "\[Prime]",
MultilineFunction->None]\)[-x^3 + 8 I]]

Out[23]= 3 + 4 I

Out[24]= 0.0024024
4楼2010-05-21 21:25:40
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
普通表情 高级回复 (可上传附件)
信息提示
请填处理意见