1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| 采用二分法Bi-section Method寻找Xn的值,初始值 double dXnPrev = 0.0, dXnNext = 1.0; double dXnTol = 1.0 - 7 * m_dTolM0; while (!bStop) { //这是第一点 1st Pmcv. dXn = (dXnPrev + dXnNext) / 2.0; Calc_PnMn_Gen_SliceMethod(Xn,...);//通过以上计算出来Pn,Mn,然后开始计算平衡条件 //Calculate Only if Balanced Condition required. //第二点 2nd Pmcv for Xn Direction. double dXn2 = dXn / dXnTol; Calc_PnMn_Gen_SliceMethod(Xn2,...); //第二点 3rd Pmcv for Xn Direction. double dXn3 = dXn * dXnTol; Calc_PnMn_Gen_SliceMethod(Xn3,...); //此为Xn的平衡条件. // Compare 1st' with 2nd' and 3rd'. if (dMn2 < dMn && dMn3 < dMn) bStop = TRUE; // Satisfy. else if (dMn2 < dMn && dMn3 > dMn) dXnNext = dXn; // Move Compressive Region. else if (dMn2 > dMn && dMn3 < dMn) dXnPrev = dXn; // Move Tensile Region. else { if (dMn3 > dMn2) dXnNext = dXn; // Move Compressive Region. else dXnPrev = dXn; // Move Tensile Region. } if(bStop) { //SHIN: dXn的值不一定是最大值,所以如果取3个平均值,Mn的值取平均值,就会有小于最大值的值,所以不取平均值 //达到平衡条件后,注释说不取平均值,实际取的平均值... dXn = (dXn + dXn2 + dXn3) / 3.0; dPn = (dPn + dPn2 + dPn3) / 3.0; //算出来最后的Pn,Mn Calc_PnMn_Gen_SliceMethod(Xn,...) }
} M |-- | 3rd | 1st | 2nd | | +------+------ P | __/ |--'
|