[求助] 为什么Matlab计算结果和单片机相差非常大?

littleshrimp   2019-7-24 15:54 楼主

遇到一个很奇怪的问题,下边这个公式使用Matlab和EXCEL计算结果相同且正确

使用单片机和csharp测试又是另一个结果

 -(2*L^4*b - L^4*c + 8*L^2*b^3 + 2*L^2*c^3 + 8*c^3*h^2 - 4*L^2*b*c^2 - 4*L^2*b^2*c - 8*L^2*b*h^2 - 4*L^2*c*h^2 + 2*L*h*((L + c)*(L - c)*(L^2 - 4*b^2 + 4*h^2)*(L^2 - 4*b^2 + 8*b*c - 4*c^2 + 4*h^2))^(1/2))/(4*(4*L^2*b^2 - 4*L^2*b*c + L^2*c^2 - 4*L^2*h^2 + 4*c^2*h^2))

单片机和csharp计算a=-9.58444976;

double L =    270;
double b =    14.33;
double c =    20.25;
double h =    120.21;

 a =  -(2*pow(L,4.00)*b - pow(L,4.00)*c + 8.00*pow(L,2)*pow(b,3.00) + 2*pow(L,2.00)*pow(c,3.00) + 8*pow(c,3)*pow(h,2) - 4*pow(L,2)*b*pow(c,2) - 4*pow(L,2)*pow(b,2)*c - 8*pow(L,2)*b*pow(h,2) - 4*pow(L,2)*c*pow(h,2) + 2*L*h*pow(((L + c)*(L - c)*(pow(L,2) - 4*pow(b,2) + 4*pow(h,2))*(pow(L,2) - 4*pow(b,2) + 8*b*c - 4*pow(c,2) + 4*pow(h,2))),(1/2)))/(4*(4*pow(L,2)*pow(b,2) - 4*pow(L,2)*b*c + pow(L,2)*pow(c,2) - 4*pow(L,2)*pow(h,2) + 4*pow(c,2)*pow(h,2)))
;
 

EXCEL和Matlab计算a=126.3747;

270    L
14.33    b
20.25    c
120.21    h

= -(2*A1^4*A2 - A1^4*A3 + 8*A1^2*A2^3 + 2*A1^2*A3^3 + 8*A3^3*A4^2 - 4*A1^2*A2*A3^2 - 4*A1^2*A2^2*A3 - 8*A1^2*A2*A4^2 - 4*A1^2*A3*A4^2 + 2*A1*A4*((A1 + A3)*(A1 - A3)*(A1^2 - 4*A2^2 + 4*A4^2)*(A1^2 - 4*A2^2 + 8*A2*A3 - 4*A3^2 + 4*A4^2))^(1/2))/(4*(4*A1^2*A2^2 - 4*A1^2*A2*A3 + A1^2*A3^2 - 4*A1^2*A4^2 + 4*A3^2*A4^2))

 

不知道这个问题是怎么产生的,正在找原因。

 

虾扯蛋,蛋扯虾,虾扯蛋扯虾

回复评论 (3)

问题找到, 里边有一个(1/2)改成(1.00/2.00)后解决

解决方法是把公式分解,一段一段对比

 

QQ图片20190724162102.png

虾扯蛋,蛋扯虾,虾扯蛋扯虾
点赞  2019-7-24 16:22

会不会溢出了

我来到这个世界,就是为了遇见你。在某天我们会相遇,然后在一起,直到最后一起离去。
点赞  2019-7-24 16:24
引用: 一个小白 发表于 2019-7-24 16:24 会不会溢出了

问题找到,是2个整数相除结果的小数部分被舍掉了

虾扯蛋,蛋扯虾,虾扯蛋扯虾
点赞  2019-7-24 17:48
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复