yqing 发表于 2006-7-23 23:57

怎样能正确求数的(1/3)次方?

我要求一个数的(1/3)方。发现居然出现一个虚数。
比如(-8)^(1/3)=1.0000 + 1.7321i
可是现在我要得到(-2)这个答案的话要怎样解决?matlab的命令应该怎样写呢?
因为我的算法其中一步要求(1/3)次方,搞不定这一步,下面的就运行不下去。各位大侠帮个忙吧。

F117_ren_0 发表于 2006-7-24 10:35

<<精通matlab6.5>>中这个题目是个例题,你自己看吧,很简单的说

toes 发表于 2006-7-24 11:43

好像是因为有3个根,这应该算是个数学问题。但MATLAB在这一点上处理的好像也不好。

yqing 发表于 2006-7-25 00:37

我看到了精通matlab6.5的例子,可是我只要求实数的答案才能运行下面的程序,虚数就不行了。所以哪位大侠能帮解决一下。
比如:(0.2-3*x-4*y-5*z)的(1/3)次方,求
x=0.33,y=0.011,z=0.02
x=0.23,y=0.25,z=0.18
这两组的值。可是求出的是虚数。我们都知道无论是正数或是负数,求(1/3)次方都应该是实数。而我的程序必须是实数才运行的下去。所以,如何能得到实数的答案。请各位大侠指教一下。不胜感激了

toes 发表于 2006-7-25 10:07

对虚数解求模,再乘以一个符号就行了。
比如-8的1/3次方,得到的是1.0000 + 1.7321i,那么先求模,再乘上sign(-8)即可。
sign(-8)*abs( (-8)^(1/3) )

feifeifool 发表于 2006-7-25 10:22

matlab求解的时候,是将-8写成8*exp(i*pi)的形式.
所以开1/3次方,由棣莫夫定理就变成8^(1/3)*exp(i*pi/3).
计算方法可以采用toes兄的方法进行求解.

[ 本帖最后由 ChaChing 于 2010-7-25 01:06 编辑 ]

toes 发表于 2006-7-25 10:33

feifeifool兄强,一针见血,^_^

hyl2323 发表于 2006-7-25 10:45

我也遇到过这个问题,不知道matlab是怎么搞的

yqing 发表于 2006-7-26 01:22

非常感谢各位,程序已经可以运行了。
但有时取值不当的时候会出现下列提示:
Warning: Large-scale (trust region) method does not currently solve this type of problem,
switching to medium-scale (line search).
> In D:\matlab\toolbox\optim\fmincon.m at line 213
Optimization terminated successfully:
Magnitude of directional derivative in search direction
less than 2*options.TolFun and maximum constraint violation
is less than options.TolCon
No Active Constraints
有谁能告诉我大概是什么意思吗?会是那里出了错误?

txhdd1985 发表于 2007-10-12 12:30

正确解法

:@)
a=-8; m=;
R=abs(a)^(1/3); Theta=(angle(a)+2*pi*m)/3;
r=R*exp(i*Theta)

r =

   1.0000 + 1.7321i-2.0000 + 0.0000i   1.0000 - 1.7321i

[ 本帖最后由 ChaChing 于 2010-7-25 01:05 编辑 ]
页: [1]
查看完整版本: 怎样能正确求数的(1/3)次方?