心得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即可:

可見兩種寫法所得的結果相同,且改寫程式省去了手動解方程的時間,非常適合筆者這種懶人使用,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/277722.html
標籤:區塊鏈
