24小时热门版块排行榜    

CyRhmU.jpeg
查看: 1477  |  回复: 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的回帖

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的回帖

亮亮1283

新虫 (小有名气)

引用回帖:
Originally posted by mshwangg at 2010-05-21 21:21:58:
给个例子,自己看吧
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] ...

我不是很懂你说的两者的区别,难道复制顺序不一样会造成这种差别吗?那要是我所付的值全是实数呢?怎么也会是复数!
5楼2010-05-25 14:45:53
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

yhj70

铜虫 (正式写手)

★ ★
小木虫(金币+0.5):给个红包,谢谢回帖交流
余泽成(金币+1):欢迎常来程序软件版! 2010-05-25 18:50:22
检查一下,在适当的语句行设置Clear命令清除所涉变量的中间值。有可能运行过程中用到一部分前面的变量的值
6楼2010-05-25 18:12:24
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

mshwangg

至尊木虫 (正式写手)

★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖交流
resonant(金币+2):多谢解答。 2010-05-25 23:00:54
我的意思是说,先对Arg求导再代入数值,和,先对变量赋值再去求Arg的导数,两个结果是不一样的
估计这是mathematica不分数据类型导致的(没有经过验证)
你可以看看后一种计算方法是否违背你的本意,若否,那么问题也就解决了
引用回帖:
Originally posted by 亮亮1283 at 2010-05-25 14:45:53:





我不是很懂你说的两者的区别,难道复制顺序不一样会造成这种差别吗?那要是我所付的值全是实数呢?怎么也会是复数!

7楼2010-05-25 22:13:52
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

RongShe

★ ★
小木虫(金币+0.5):给个红包,谢谢回帖交流
jjdg(金币+1):辛苦了 2010-05-26 04:53:02
引用回帖:
Originally posted by mshwangg at 2010-05-25 22:13:52:
我的意思是说,先对Arg求导再代入数值,和,先对变量赋值再去求Arg的导数,两个结果是不一样的
估计这是mathematica不分数据类型导致的(没有经过验证)
你可以看看后一种计算方法是否违背你的本意,若否,那么 ...

其实先赋值和后赋值结果是一样的,你给的例子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["Arg", "\[Prime]",
MultilineFunction->None]\)[-x^3 + 8 I]]
Clear[x];
8楼2010-05-26 00:40:50
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

RongShe


小木虫(金币+0.5):给个红包,谢谢回帖交流
引用回帖:
Originally posted by 亮亮1283 at 2010-05-21 14:27:31:
为什么我的程序对一个是函数求导后,得到的函数带入数值后竟然是复数!
以下是程序的一部分,M是一个2*2矩阵,矩阵中每一项均是Omega的函数,而S1,S2是关于omega的复函数

S1 = M[[1, 1]];
S2 = M[[2, 1]];
...

没有具体公式,别人很难判断
9楼2010-05-26 00:43:10
已阅   回复此楼   关注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的回帖
相关版块跳转 我要订阅楼主 亮亮1283 的主题更新
普通表情 高级回复(可上传附件)
信息提示
请填处理意见