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)。

从这个方程求解的结果来看,确实有种这种感觉。

不管怎么样,还是要看处理的问题选择合适的工具。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MatlabMathematica是两个常用的数值计算软件,它们各有各的特点和优势。虽然Mathematica在符号计算方面更加强大,但Matlab在数值计算和数据分析方面更加常用。如果需要在Matlab中调用Mathematica的计算能力,可以通过Mathematica引擎实现。 Matlab可以通过安装Mathematica Engine将两者进行连接。首先,在Mathematica中应用WSTP(MathLink的一种协议)开放接口,然后在Matlab中使用Mathematica Engine的函数调用Mathematica内核进行计算。这样就可以在Matlab中调用Mathematica的各种符号计算和数值计算功能。 具体的方法如下: 1. 安装Mathematica Engine,可以在Mathematica官方网站上下载安装。 2. 在Matlab中通过命令`link = mathematica`建立与Mathematica的连接。 3. 使用`evaluate`函数调用Mathematica内核执行计算任务,例如`result = evaluate(link, 'Integrate[Sin[x], x]')`可以计算正弦函数的积分。 4. 使用`get`函数获取计算结果,例如`value = get(result)`可以得到计算结果的数值。 通过这种方式,我们可以充分利用Mathematica强大的符号计算能力,将其集成到Matlab的数值计算和数据分析中。这对于一些需要复杂数学运算的科学研究和工程应用来说十分有用。当然,在调用Mathematica之前,我们需要在Matlab中导入Mathematica Engine的函数库。 总结来说,Matlab调用Mathematica的方法主要是通过安装Mathematica Engine,并通过函数调用Mathematica内核进行计算。这样可以充分发挥Mathematica在符号计算方面的优势,拓展了Matlab的应用范围。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值