2013-11-04 43 views
2

我想在matlab中求解給定的公式來找到beta的值,但是卻出現錯誤。我在下面發佈代碼和錯誤。我該如何解決超越方程?

在此先感謝。

n1=1.77; 
n2=1.45; 
d=1e-6; 
lambda = 1e-6; 
ko = 2*pi/lambda; 
A=(ko*n1)^2; 
B=(ko*n2)^2; 
syms beta; 
s = 'sqrt(A-beta^2)*(d/2)*tan(sqrt(A-beta^2)*d/2)=sqrt(beta^2-B)*(d/2)'; 
solve (s); 

錯誤:

Error using solve>processString (line 337) 
' sqrt(A-beta^2)*(d/2)*tan(sqrt(A-beta^2)*d/2)=sqrt(beta^2-B)*(d/2) ' is not a valid expression or equation. 

Error in solve>getEqns (line 267) 
    eqns = processString(eqns, v, vc); 

Error in solve (line 150) 
    [eqns,vars,options] = getEqns(varargin{:}); 

Error in transcendetal (line 9) 
    solve (s); 
+0

我無法重現此;如預期的那樣,我獲得了2個「beta」值。 –

+1

在您發佈的錯誤消息中,您的等式前面有一個空格,也許這會導致錯誤? – Mailerdaimon

+0

@Mailerdaimon:嗯......似乎並非如此 –

回答

1

我確認上R2013a了以下工作:

syms beta A B d 

n1=1.77; 
n2=1.45; 
d=1e-6; 
lambda = 1e-6; 
ko = 2*pi/lambda; 
A=(ko*n1)^2; 
B=(ko*n2)^2; 

solve (sqrt(A-beta^2)*(d/2)*tan(sqrt(A-beta^2)*d/2)==sqrt(beta^2-B)*(d/2)) 

然而,

Warning: Explicit solution could not be found. 
> In solve at 179 
ans = 
[ empty sym ] 

這很奇怪,因爲在R2010a版本與'老'語法你給上面,我得到

ans = 
                            0 
-(log((A + B - 2*beta^2 + 2*(A - beta^2)^(1/2)*(beta^2 - B)^(1/2)*i)/(A - B))*i)/(A - beta^2)^(1/2) 

請注意,最後的解決方案是復值,這可能是一些選項,你必須在以後的版本,使...我不知道這個符號數學工具箱非常好;我仍然更喜歡白板方法:p

相關問題