2014-12-09 30 views
-1

發現我已經方程式迭代在Matlab

(250-25)/((0.0106+1.89799*10^-3)+(log(x/15)/2*3.14*45)+(1/10*2*3.14*x))... 
    ==157.19; 

我試圖找到x的值,使右側等於左側以下(X)的值。

到目前爲止,我已經嘗試過,沒有任何運氣

syms x 
eqn=(250-25)/((0.0106+1.89799*10^-3)+(log(x/15)/2*3.14*45)+(1/10*2*3.14*x))... 
    ==157.19; 
solve(eqn,x) 

以下,其結果是

ans = 

(225*lambertw(0, (2*exp(8035698630091128826615/400116850530983344078848))/15))/2 
+1

如果您將解決方案從上面的鏈接應用到'ans',您會得到'13.5658'。 – Schorsch 2014-12-09 12:04:40

+0

這裏沒有問題。編輯以添加特定問題。 – horchler 2014-12-09 17:15:57

回答

2

嘗試用數值方法來代替。無論如何,你並沒有使用有理數,所以即使你的符號解決方案可行,答案也沒有意義。

那麼做到這一點:

1)定義的功能

f = @(x)(250-25)./((0.0106+1.89799*10^-3)+(log(x./15)/2*3.14*45)+(1/10*2*3.14.*x))-157.19 

其中-157.19是右手側(解方程時,這通常做,因爲那是可以使用尋找根的方法,例如牛頓 - 拉夫遜方法)。

2)這裏有一個複雜的日誌(負數)變得很複雜。這意味着fzero在這裏不起作用(這並不重要,這不是你的域名)。幸運的是,在matlab中有另一個數值方程求解器可以處理這個fsolve

求解方程,嘗試

myRoot = fsolve(f,15) % Number is tested to work good in this case and not 
         % a general best guess for numerical solutions 

如果試圖從你將有複數的舍入誤差的別的路可走。嘗試,

myRoot = fsolve(f,4) 

這意味着要獲得您需要刪除答案的虛部(這是在這裏安全的,因爲你知道,虛部來自一個舍入誤差),真正的解決方案。

myRoot = real(fsolve(f,4)) 
+0

很好的答案! (和你的評論當然是正確的,很好的捕獲)=) – 2014-12-09 15:58:21

+0

順便說一句,像'fzero(f,[13.33 20])'確實有效。需要找到下界以便發生符號變化,所以需要知道根的近似值。在這種情況下,fsolve顯然是一個更強大的通用解算器。 – horchler 2014-12-09 21:18:52

+0

@horchler我看到了,對於苛刻的語氣感到抱歉。我也刪除了我的評論。 – patrik 2014-12-10 07:04:10