2012-11-09 56 views
0

快速的問題,我希望有人能幫助我。我試圖找到函數的所有關鍵點:如何在matlab中用exp找到函數的臨界點

f(x,y) = 0.05 * (1-12x+20x^2) * (1-7y+10y^2) * exp(-(x^2/6+y^2/3)) 

當我做平常fx = diff(f(x,y),x)fy = diff(f(x,y),y)然後調用[xcr,ycr] = solve(fx,fy)只給我一個解決方案...我知道有更多的那麼。

難道這是因爲有無數的解決方案,這是一個?有沒有解決的辦法?

謝謝!

+0

with surf(x,y,z)...可以看到有4個最大值,4個鞍座,也許在另外四個之間。 – user1003131

回答

4

你不同意你確切的代碼,所以我不知道你做了什麼,讓只有一個解決辦法,但你可以用象徵性的工具箱來解決這個小狗:

% # Define the function f(x, y) 
syms x y 
f = 0.05 * (1 - 12*x + 20*x^2) * (1 - 7*y + 10*y^2) * exp(-(x^2/6 + y^2/3)); 

% # Find the partial derivatives 
f_x = diff(f, x); 
f_y = diff(f, y); 

% # Find the critical points 
[xcr, ycr] = solve(f_x, f_y); 
p = double([xcr(:), ycr(:)]); 

% # Discard the complex solutions 
p(imag(p(:, 1)) > eps, :) = []; 
p(imag(p(:, 2)) > eps, :) = []; 
p = real(p); 

xcr = p(:, 1) 
ycr = p(:, 2) 

這實際上產生了13解決方案:

xcr =    ycr = 

    0.5000   0.2000 
    0.5000   0.5000 
    0.1000   0.2000 
    0.1000   0.5000 
    2.6133   1.9238 
    -2.3113   1.9238 
    0.2980   1.9238 
    2.6133   -1.5711 
    -2.3113   -1.5711 
    0.2980   -1.5711 
    2.6133   0.3474 
    -2.3113   0.3474 
    0.2980   0.3474 
+0

感謝EitanT的回覆,它的或多或少都是我的......有趣的是,當我在我的Matlab版本(7.11.0)上運行你的代碼時,我所得到的只有xcr = 0.1和ycr = 0.2。沒有其他解決方案顯示。任何想法可能導致這種情況? – user1003131

+0

不知道。我在MATLAB R2009a(v7.8)和R2012a(v7.14)上都運行了它,並且得到了相同的結果...請在'solve'行後面插入'size(xcr)'和'size(ycr)並告訴我你得到了什麼。他們都是'[13 1]'嗎?? –

+0

hhmmm很奇怪。他們都是[1 1]。這是一個截圖https://docs.google.com/open?id=0B8XEsIt0n6PeaVJPN2JCdHJBOW8 – user1003131

相關問題