1. 程式人生 > 其它 >matlab與mathematica對比(solve函式)

matlab與mathematica對比(solve函式)

技術標籤:數學

1.問題緣起

今天幫別人算了一個方程組求解,大概是這樣的一個式子:n^{2} *(XA+XR*k-XF)^{2}+n^{2}(ZA+ZR*k-ZF)^{2}-(K^{2}+n^{2}+2*k*n*(L1-L0)+(L1-L0)^{2}=0,求解k,我分別用matlab與mathematica求解,原始碼如下:

##matlab的原始碼
syms n Xa Xr k Xf Za Zr Zf L1 L0 k;
ans1 = solve(n^2*(Xa+Xr*k-Xf)^2+n^2*(Za+Zr*k-Zf)^2-(k^2*n^2+2*k*n*(L1-L0)+(L1-L0)^2)==0,k);
ans11=ans1(1,1);
ans12=ans1(2,1);

##mathematica的原始碼
Solve[n^2 * (XA + XR * k - XF)^2 + n^2 * (ZA + ZR*k - ZF)^2 - (k^2*n^2 +  2*k*n*(L1 - L0) + (L1 - L0)^2) == 0, k]

結果,兩個軟體完全給出了不同的答案。

##mathematica的答案

{{k -> (1/(2 (-n^2 + n^2 XR^2 + n^2 ZR^2)))(-2 L0 n + 2 L1 n - 2 n^2 XA XR + 2 n^2 XF XR - 2 n^2 ZA ZR + 2 n^2 ZF ZR - \[Sqrt]((2 L0 n - 2 L1 n + 2 n^2 XA XR - 2 n^2 XF XR + 2 n^2 ZA ZR - 2 n^2 ZF ZR)^2 - 4 (-L0^2 + 2 L0 L1 - L1^2 + n^2 XA^2 - 2 n^2 XA XF + n^2 XF^2 + n^2 ZA^2 - 2 n^2 ZA ZF + n^2 ZF^2) (-n^2 + n^2 XR^2 + n^2 ZR^2)))}, 

{k -> (1/(2 (-n^2 + n^2 XR^2 + n^2 ZR^2)))(-2 L0 n + 2 L1 n - 2 n^2 XA XR + 2 n^2 XF XR - 2 n^2 ZA ZR + 2 n^2 ZF ZR + \[Sqrt]((2 L0 n - 2 L1 n + 2 n^2 XA XR - 2 n^2 XF XR + 2 n^2 ZA ZR - 2 n^2 ZF ZR)^2 - 4 (-L0^2 + 2 L0 L1 - L1^2 + n^2 XA^2 - 2 n^2 XA XF + n^2 XF^2 + n^2 ZA^2 - 2 n^2 ZA ZF + n^2 ZF^2) (-n^2 + n^2 XR^2 + n^2 ZR^2)))}}

##matlab的答案
k = (L1 - L0 + (L0^2*Xr^2 + L0^2*Zr^2 - 2*L0*L1*Xr^2 - 2*L0*L1*Zr^2 + 2*L0*Xa*Xr*n - 2*L0*Xf*Xr*n + 2*L0*Za*Zr*n - 2*L0*Zf*Zr*n + L1^2*Xr^2 + L1^2*Zr^2 - 2*L1*Xa*Xr*n + 2*L1*Xf*Xr*n - 2*L1*Za*Zr*n + 2*L1*Zf*Zr*n - Xa^2*Zr^2*n^2 + Xa^2*n^2 + 2*Xa*Xf*Zr^2*n^2 - 2*Xa*Xf*n^2 + 2*Xa*Xr*Za*Zr*n^2 - 2*Xa*Xr*Zf*Zr*n^2 - Xf^2*Zr^2*n^2 + Xf^2*n^2 - 2*Xf*Xr*Za*Zr*n^2 + 2*Xf*Xr*Zf*Zr*n^2 - Xr^2*Za^2*n^2 + 2*Xr^2*Za*Zf*n^2 - Xr^2*Zf^2*n^2 + Za^2*n^2 - 2*Za*Zf*n^2 + Zf^2*n^2)^(1/2) - Xa*Xr*n + Xf*Xr*n - Za*Zr*n + Zf*Zr*n)/(n*Xr^2 + n*Zr^2 - n)

k=-(L0 - L1 + (L0^2*Xr^2 + L0^2*Zr^2 - 2*L0*L1*Xr^2 - 2*L0*L1*Zr^2 + 2*L0*Xa*Xr*n - 2*L0*Xf*Xr*n + 2*L0*Za*Zr*n - 2*L0*Zf*Zr*n + L1^2*Xr^2 + L1^2*Zr^2 - 2*L1*Xa*Xr*n + 2*L1*Xf*Xr*n - 2*L1*Za*Zr*n + 2*L1*Zf*Zr*n - Xa^2*Zr^2*n^2 + Xa^2*n^2 + 2*Xa*Xf*Zr^2*n^2 - 2*Xa*Xf*n^2 + 2*Xa*Xr*Za*Zr*n^2 - 2*Xa*Xr*Zf*Zr*n^2 - Xf^2*Zr^2*n^2 + Xf^2*n^2 - 2*Xf*Xr*Za*Zr*n^2 + 2*Xf*Xr*Zf*Zr*n^2 - Xr^2*Za^2*n^2 + 2*Xr^2*Za*Zf*n^2 - Xr^2*Zf^2*n^2 + Za^2*n^2 - 2*Za*Zf*n^2 + Zf^2*n^2)^(1/2) + Xa*Xr*n - Xf*Xr*n + Za*Zr*n - Zf*Zr*n)/(n*Xr^2 + n*Zr^2 - n)
 

2.參考連結

http://www.360doc.com/content/18/0729/21/99071_774261031.shtml

http://muchong.com/t-9473456-1-authorid-3305534

https://zhidao.baidu.com/question/129745738.html

https://www.zhihu.com/question/24067444

3.個人想法

其中有個大神很直接指出了這個,但是博主確實不敢託大深入考究,畢竟對這個瞭解肯定沒那麼深入。不過看大家都這麼說:“matlab對矩陣支援有多好(相對mmtc)對符號解的支援就有多渣(相對mmtc)。

從這個方程求解的結果來看,確實有種這種感覺。

不管怎麼樣,還是要看處理的問題選擇合適的工具。