Mathematica或matlab怎麼求解含有復變數的方程?

我現在有一個方程

0.1/2π=Im(sqrt(10.9+i*x)),想問下可以編程求解x的值嗎?

x應該是實數。


Solve[0.1/(2 π) == Im[Sqrt[10.9 + I x]] x ∈ Reals, x]
(* {{x -&> 0.105092}} *)

將常數改為精確的數就可以得到解析解。

Solve[1/(20 π) == Im[Sqrt[109/10 + I x]] x ∈ Reals, x]
(* {{x -&> Sqrt[1 + 4360 π^2]/(200 π^2)}} *)


對於MATLAB可以用fzero求解:

&>&> x1 = fzero(@(x)0.1/(2*pi)-imag(sqrt(10.9+1i*x)),0)
x1 =
0.105091701225983

如果你有符號計算工具箱可以用solve求出符號解:

&>&> syms x real
eq = imag(sqrt(sym(109/10)+x*1i))==sym(1/(20*pi));
x = simplify(solve(eq,x))
x2 = double(x)
x =
(4360*pi^2 + 1)^(1/2)/(200*pi^2)
x2 =
0.105091701225983


如果只是一次性的中間計算步驟,可以直接用 Wolfram|Alpha 偷個懶。

Mathematica 里自己寫的話,我找到一個法子:設 z = 10.9 + i*x, 然後解 z:

In[57]:= Solve[{0.1/(2 [Pi]) == Im[Sqrt[z]], Re[z] == 10.9}, z, Complexes]

During evaluation of In[57]:= Solve::ratnz: Solve was unable to solve the system with inexact coefficients. The answer was obtained by solving a corresponding exact system and numericizing the result. &>&>

Out[57]= {{z -&> 10.9 + 0.105092 I}}

先試了幾種都不好用:

In[58]:= Assuming[Element[x, Reals],
Solve[0.1/(2 [Pi]) == Im[Sqrt[10.9 + I*x]], x]]

During evaluation of In[58]:= Solve::fulldim: The solution set contains a full-dimensional component; use Reduce for complete solution information. &>&>

During evaluation of In[58]:= Solve::ratnz: Solve was unable to solve the system with inexact coefficients. The answer was obtained by solving a corresponding exact system and numericizing the result. &>&>

Out[58]= {{}}

In[59]:= Reduce[0.1/(2 [Pi]) == Im[Sqrt[10.9 + I*x]], x, Reals]

During evaluation of In[59]:= Reduce::nddc: The system 0.0159155==Im[Sqrt[10.9 +I x]] contains a nonreal constant I. With the domain Reals specified, all constants should be real. &>&>

Out[59]= Reduce[0.0159155 == Im[Sqrt[10.9 + I x]], x, Reals]

In[60]:= Reduce[0.1/(2 [Pi]) == Im[Sqrt[10.9 + I*x]]]

Out[60]= Im[Sqrt[10.9 + I x]] == 0.0159155

可能得分成實部虛部才好做。

補充:

問過高人後得解:

In[67]:= Solve[
TrigToExp@
ComplexExpand[1/10/(2 [Pi]) == Im[Sqrt[109/10 + I*x]],
TargetFunctions -&> {Re, Im}], x]

Out[67]= {{x -&> Sqrt[1 + 4360 [Pi]^2]/(200 [Pi]^2)}}

求更好的理解的話,估計得多看看 TrigToExp,

ComplexExpand,TargetFunctions 這幾個函數/符號的文檔,並且看看中間結果。


謝邀

絕大多數復方程都可以轉換為實方程求解,只是需要題主付出一點計算量。

如果是硬要直接解復方程,也可以通過設置代價函數

設置的時候注意,先把方程化為

F(x)=0

然後|F(x)|就可以作為代價函數

然後用梯度下降的方式,或者其它優化方式就可以求解了,只要有解。

但是兩個變數(a+bj)終歸繁瑣,化為實方程求解更快。

車間沒有電腦,我就打個草稿了,公式也不能編輯,抱歉。

以上。


目前最高得票的解法有誤導性。這個是我的答案:

Solve[{1/10/(2 [Pi]) == Im[Sqrt[109/10+I x]],Im[x]==0}, x]

解釋:

1)參考文檔中Solve的解釋:Solve[expr,vars] 預設假設以代數形式出現在不等式中的量為實數,而其他所有量為複數.

2)數值解請用NSolve, 符號解請用 Solve,用Solve的時候請將浮點數轉化成代數形式,別混雜。


謝@肖書源邀請~

如果我沒算錯的話:

x=2*(0.1/2*pi)^2*sqrt(10.9+((0.1/2*pi)^2))

ans=0.1631(暫且精確到四位數)

————分割線————

看到匿名答案之後發現自己算錯了,計算過程少加了個擴號,囧……

x=2*(0.1/(2*pi))^2*sqrt(10.9+((0.1/(2*pi))^2))

ans=0.1051

我能悄悄的問一下題主這個方程不用編程啥子的要個筆和草稿本就可以解出來為啥子要編程求解?

我的結論是完全不用編程便可求解,既不用樓上那麼繁瑣的計算過程也不用樓下那麼高大上的庫函數:

設Z=a+ib=Im(sqrt(10.9+ix))

&>&>b=0.1/(2*pi)

&>&>x=2*sqrt(10.9+b^2)*b

&>&>x=0.1051(暫且精確到小數點後四位)

說明:

1.fzero函數的確可以解本題,是因為本題只有一個零點,但需要注意的是fzero函數是根據函數是否穿越橫坐標軸來決定零點的,因此fzero對那些無法確定函數曲線僅僅觸及橫坐標軸而不穿過的那些零點無能為力,換句話就是解不出來。

2.如果所求函數有多個零點也須慎用fzero函數,容易漏解,具體為啥子有興趣的請help fzero

3.這道題真的不用編程便可求解,難道是幻覺?求解釋。


推薦閱讀:

TAG:數學 | MATLAB | WolframMathematica |