公式x*x+[x]=10用matlab怎麼編程求解?


這題有點意思,可以作為一道「逆向思維」的分析題,用到的知識也不多,初高中的一元二次方程足以應付,沒必要完全藉助編程。

簡單看下這個方程x^2+igllfloor x igr
floor = 10,無非就是在一元二次方程中疊加了「高斯取整函數」。但是直接去求解x還是比較困難的,原因就是你沒辦法用一個顯式的數值形式來表示x的小數部分,進而表示出igllfloor x igr
floor.

但是你把關注點放在igllfloor x igr
floor上就豁然開朗了,如果可以順利解出igllfloor x igr
floor,最終要得到x無非就是在igllfloor x igr
floor上疊加一個在[0, 1)內的實數罷了。

我們令y = igllfloor x igr
floor, x = y+varepsilon, varepsilon in [0, 1),顯然原有方程可以轉化為varepsilon^2 + 2yvarepsilon + (y^2+y-10) = 0,若x存在,那麼關於varepsilon的該一元二次方程必定有根,回想一下初中數學的相關知識得到:

Delta = -4y+40geq 0,顯然就有x的整數部分y=igllfloor x igr
floor leq 10.

現在已經保證了關於varepsilon的二次方程有根,但還需要進一步保證在[0, 1)內至少有一個根。事實上,在該區間至多也只可能有一個根,因為y的取值顯然不可能在{-1, 0}中,這樣對稱軸-y就一定在區間[0, 1]之外。所以就簡單證明了varepsilon[0, 1)上至多僅有一個根(拋物線在該區間單調)。

根據零點存在定理,函數f(varepsilon) = varepsilon^2 + 2yvarepsilon + (y^2+y-10)在端點0, 1處必定異號,即有:

f(0)f(1)=(y^2+y-10)(y^2+3y-9) leq 0.

這個多項式不等式很好解,相關的四個根分別是:

frac{-3pm 3sqrt{5}}{2}, frac{-1pm sqrt{41}}{2}

syms x
solve((x^2+x-10)*(x^2+3*x-9)==0, x)

ans =

- (3*5^(1/2))/2 - 3/2
(3*5^(1/2))/2 - 3/2
- 41^(1/2)/2 - 1/2
41^(1/2)/2 - 1/2

函數形態如下(點擊放大):

x = linspace(-5, 4, 1000);
y = (x.^2+x-10).*(x.^2+3*x-9);
plot(x, y, "LineWidth", 1.5)
hold on
plot(x, zeros(size(x)), "--", "LineWidth", 1.0)
ylim([min(y)-5, max(y)+5])

xlabel("$x$", "Interpreter", "Latex", "FontSize", 12)
ylabel("$f(x)$", "Interpreter", "Latex", "FontSize", 12)
title("Polynomial function", "FontName", "Arial", "FontSize", 15)
lg = legend("$f(x)=(x^2+x-10)(x^2+3x-9)$", "$g(x) equiv 0$");
lg.set("interpreter", "latex")
grid on

new_x = x(y&<0); new_y = y(y&<0); patch([new_x fliplr(new_x)], [new_y zeros(size(new_y))], "red") alpha(0.5)

所以y可能的取值被限定在了{-4, 2},分別代入方程可以解出對應的varepsilon = igllfloor x igr
floor ,最終得到x = -sqrt{14}, ~2sqrt{2}.



難道我沒理解題主的意思……?直接算不行么

&>&> f = @(x)x.^2+round(x)-10;
ans = fzero(f,0)

ans =

2.6458

看你想要那個取整函數,可以用floor或者ceil取代round

當然這不能保證找到所有的解,畢竟依賴於初值。

P.S. 由於取整函數的存在,做數值解可能會發生一些奇怪的事情。比如我們把右邊的10換成8.5,再解一次

&>&> f = @(x)x.^2+round(x)-8.5;
ans = fzero(f,0)

ans =

2.5000

驗算一下你會發現這個解是錯的


推薦閱讀:

斜橢圓怎麼從一般方程轉化為參數方程?
如何理解這個 16 世紀的方程?
這兩個是什麼方程?

TAG:數學 | MATLAB | 高中數學 | 方程 |