心得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));
计算结果为:
这种解法需要提前手动解出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即可:
可见两种写法所得的结果相同,且改写程序省去了手动解方程的时间,非常适合笔者这种懒人使用。