心得1:解方程组

心得1:解方程组

最近在看文献的时候,对一个方程组的解法进行了改写,有所心得所以记录下来。
解方程组:
方程组

原文解法

原文的解决思路是先计算出方程右边各项的值,然后先手动计算出xmax和xmin的表达式,然后用赋值语句分别求解,即:

xmax=(ML+LI1+I1S+SA)*cosd(alpha)/(1+(tand(alpha)+1/tand(thida))/(1/tand(thida)-tand(alpha)));
xmin=-xmax*(tand(alpha)+1/tand(thida))/(1/tand(thida)-tand(alpha));

计算结果为:结果1
这种解法需要提前手动解出xmax和xmin的表达式,然后再进行程序书写。但是笔者作为一个懒人,解方程这种复杂的事情能避免还是想尽量去避免的,于是笔者尝试找到一种既不用手动解方程也能够保证计算结果准确的方法。

改写解法

改写的思路为:
1.可以让MATLAB自己把方程解出来,首先想到的是solve系列函数。
2.要保证得到结果的精度,即计算误差要尽量小,所以想到使用符号变量sym。
综上所得的改写解法为:

syms u v
eqns=[u-v==(ML+LI1+I1S+SA)*cosd(alpha),-(v/u)==(tand(alpha)+cotd(thida))/(cotd(thida)-tand(alpha))];
s=solve(eqns,[u,v]);
xmax=double(s.u);
xmin=double(s.v);

只需要把方程原封不动的放进矩阵然后自动求解即可,由于是符号变量所以求解的精度非常高:
精度
再将求解结果转化为double类型赋值给xmax,xmin即可:
结果2

可见两种写法所得的结果相同,且改写程序省去了手动解方程的时间,非常适合笔者这种懒人使用。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值