用 Matlab 的 solve 解方程要得到解析解,為什麼只返回了一個數值解?王李晉2015-11-08 16:32:15

這個方程初步可以寫成

x^2-2-\frac{1}{x}+\frac{1}{x-1}-\frac{1}{x^2-2}=2\sqrt{x+1}-2\sqrt{\frac{x+1}{x}\frac{1}{x^2-2}}

,目測至少超過了5次,理論上是不能一般地用根式表達出來的,機器更做不到這一點了。solve函式只在3次以下可以有解析解。不過要求數值解的話可以用fsolve函式,這個函式可以先賦初值來得到最優解,比如初值賦為-2的解是這樣的

x = fsolve(@(x) sqrt(1/x+1)+sqrt(1/(x-1))-sqrt(1/(x^2-2))-sqrt(x^2-1),[-2],optimoptions(‘fsolve’))

x =

-2087/2140 - 3379/2851i

一般情況下不論賦多大的初值,算出始終是同樣的解。不過這個方程有若干個間斷點,賦某個初值可能只能夠求到一段上的解,因為當計算機執行到斷點上時會自動停止運算。所以要找出其間斷點,然後分開來求。

在這個式子上可以看到其斷點分別是在

x=0,x=1,x=\sqrt{2}

時。所以只需在小於

0

0

1

,大於

1

1

\sqrt{2}

這幾個範圍內各取幾個有理數作為初值來算就行了。另外

-2

0

之間解可能比較密集,函式對初值比較敏感,所以要多取幾次,最好寫一個迴圈。

用 Matlab 的 solve 解方程要得到解析解,為什麼只返回了一個數值解?無影東瓜2015-11-08 18:15:39

用Mathematica做的,偷懶直接一圖流了,不喜勿怪

用 Matlab 的 solve 解方程要得到解析解,為什麼只返回了一個數值解?

用 Matlab 的 solve 解方程要得到解析解,為什麼只返回了一個數值解?

===================更新======================

@曹洪洋指出用Reduce或者Solve加Method->Reduce能很快算出所有的解析解,效果如下

用 Matlab 的 solve 解方程要得到解析解,為什麼只返回了一個數值解?

用 Matlab 的 solve 解方程要得到解析解,為什麼只返回了一個數值解?

用時不足一秒,果然不知高到哪裡去了

用 Matlab 的 solve 解方程要得到解析解,為什麼只返回了一個數值解?知乎使用者2015-11-28 16:34:13

用Mathematica

用 Matlab 的 solve 解方程要得到解析解,為什麼只返回了一個數值解?

用 Matlab 的 solve 解方程要得到解析解,為什麼只返回了一個數值解?

用matlab求解的話,可以定義不同的初始值進行嘗試,比如-1,1,i,-i等

數值求解就這樣

用 Matlab 的 solve 解方程要得到解析解,為什麼只返回了一個數值解?紫信2020-06-22 21:18:56

應該是間斷點太多了

然後次數較高無法得到根式解

警告:無法象徵性地解決。

使用vpasolve返回數值解。

>在sym/solve中(第304行)

機翻的

Warning: Unable to solve symbolically。

Returning a numeric solution using vpasolve。

> In sym/solve (line 304)

用 Matlab 的 solve 解方程要得到解析解,為什麼只返回了一個數值解?Vurgit Young2021-05-05 11:49:42

現在也可以解了,而且速度還可以。

用 Matlab 的 solve 解方程要得到解析解,為什麼只返回了一個數值解?

用 Matlab 的 solve 解方程要得到解析解,為什麼只返回了一個數值解?

用 Matlab 的 solve 解方程要得到解析解,為什麼只返回了一個數值解?

用 Matlab 的 solve 解方程要得到解析解,為什麼只返回了一個數值解?