public string[] Calculation(string sql) { using (MySqlConnection conn = new MySqlConnection(connString)) { MySqlCommand cmd = new MySqlCommand(sql, conn); conn.Open(); MySqlDataAdapter MydataAdapter = new MySqlDataAdapter(cmd); MydataAdapter.TableMappings.Add("Table", "typicalprofile"); MydataAdapter.TableMappings.Add("Table1", "enginelifecon"); //MydataAdapter.TableMappings.Add("Table2", "failurerateconInformation"); DataSet ds = new DataSet(); MydataAdapter.Fill(ds);//将典型剖面表、装备任务表填充 int K = 9; //飞行阶段列数 List <double> taskfp = new List <double>(); //典型剖面飞行任务阶段列表Flight phase,包括地面慢车、有地效悬停、起飞增速 、斜向爬升、上升转弯、巡航、盘旋飞行、下滑、着陆 List <double> typicalfp = new List <double>(); //任务剖面飞行任务阶段Flight phase,包括地面慢车、有地效悬停、起飞增速 、斜向爬升、上升转弯、巡航、盘旋飞行、下滑、着陆 List <double> typicalttt = new List <double>(); //典型剖面任务任务总时间列 List <double> typicaldl = new List <double>(); ///典型剖面设计寿命列DesignLife List <string> ENGINE = new List <string>(); //任务表中发动机型号 List <string> PN = new List <string>(); //任务表中基准剖面名称 List <string> MTID = new List <string>(); //任务表中任务标识 List <double> SDL = new List <double>(); //任务剖面设计寿命列 List <string> ep = new List <string>(); // 环境参数列表,包括地域、季节、海拔、其他4列 List <string> TEMP = new List <string>(); //温度参数 List <string> HUMP = new List <string>(); //湿度参数 foreach (DataRow row in ds.Tables["enginelifecon"].Rows)//将任务表中的飞行阶段的列添加到列表 { for (int i = 2; i < 11; i++) { if (row[i] == System.DBNull.Value) //判断任务飞行阶段是否空 { ds.Tables["enginelifecon"].Rows[0][i] = "0"; //如果为空,飞行阶段时间设为0 MySqlCommandBuilder MysqlCommandBuilder = new MySqlCommandBuilder(MydataAdapter); MydataAdapter.Update(ds); } taskfp.Add(double.Parse(row[i].ToString())); } } //任务剖面飞行任务阶段时间矩阵Ts的创建 double[] task = taskfp.ToArray(); //将list转化为一维数组 double[,] Ts = new double[K, 1]; //将一维数组task转化为矩阵Ts for (int i = 0; i < K; i++) { Ts[i, 0] = task[i]; } foreach (DataRow row1 in ds.Tables["typicalprofile"].Rows)//将典型剖面表中的飞行阶段的列添加到列表typicalfp { for (int i = 2; i < 11; i++) { typicalfp.Add(double.Parse(row1[i].ToString())); } } //将典型剖面飞行阶段列表typicalf转化为一维数组typical double[] typical = typicalfp.ToArray(); int N = typical.Length / K; //典型剖面表的行数 double[,] P = new double[N, K]; //将一维数组typical转化为矩阵P for (int i = 0; i < N; i++) { for (int j = 0; j < K; j++) { P[i, j] = typical[i * (K) + j]; } } //提取出典型剖面任务总时间的列添加到列表typicalttt foreach (DataRow row2 in ds.Tables["typicalprofile"].Rows) { typicalttt.Add(double.Parse(row2["TTD"].ToString())); } double[] ttt = typicalttt.ToArray(); //将典型剖面中任务总时间列表转化为一维数组ttt double[,] TTT = new double[N, 1]; //将一维数组ttt转化为矩阵TTT for (int i = 0; i < N; i++) { TTT[i, 0] = ttt[i]; } string tmpcmd = "SELECT TEMP,HUMP FROM tempandhump WHERE MAREA LIKE '%" + ds.Tables["enginelifecon"].Rows[0]["MAREA"].ToString() + "%'AND MSEA='" + ds.Tables["enginelifecon"].Rows[0]["MSEA"].ToString() + "';"; DataTable tmpdatatable = FillTable(tmpcmd); TEMP.Add(tmpdatatable.Rows[0][0].ToString()); HUMP.Add(tmpdatatable.Rows[0][1].ToString()); //典型剖面设计寿命列 foreach (DataRow row3 in ds.Tables["typicalprofile"].Rows)//将典型剖面中设计寿命列添加到typicaldl列表 { typicaldl.Add(double.Parse(row3["DLF"].ToString())); } double[] DL = typicaldl.ToArray();//将typicaldl列表转化为一维数组 DL string tmpcmdDL = "SELECT DLF FROM typicalprofile WHERE TPNAME ='" + ds.Tables["enginelifecon"].Rows[0]["DAP"] + "' "; DataTable tmpdatatableDL = FillTable(tmpcmdDL); SDL.Add(double.Parse(tmpdatatableDL.Rows[0][0].ToString())); foreach (DataRow row5 in ds.Tables["enginelifecon"].Rows) // //提取出任务表中地域、季节、海拔、其他4列添加到列表ep { for (int i = 13; i < 17; i++) { ep.Add(row5[i].ToString()); } } foreach (DataRow row6 in ds.Tables["enginelifecon"].Rows)//提取发动机型号列添加到列表ENGINE { ENGINE.Add(row6[0].ToString()); } foreach (DataRow row7 in ds.Tables["enginelifecon"].Rows)//提取任务表中剖面名称列添加到列表PN { PN.Add(row7[12].ToString()); } foreach (DataRow row8 in ds.Tables["enginelifecon"].Rows) //提取任务表中任务标识列添加到列表MTID { MTID.Add(row8[1].ToString()); } conn.Close(); double E = 1; //初始环境系数 double[] EP = new double[4]; //温度,湿度,海拔,人因影响系数4个环境参数系数 EP[0] = Calculater.TCC(double.Parse(TEMP[0])); //通过温度参数值计算得到温度系数 EP[1] = Calculater.HCC(double.Parse(HUMP[0])); //通过湿度参数值计算得到湿度系数 EP[2] = Calculater.ACC(double.Parse(ep[2])); //在环境参数列表ep中提出海拔参数值并计算得到海拔系数 EP[3] = double.Parse(ep[3]); //在环境参数列表ep中提出人因影响系数 string[] str1 = new string[5]; //建立一个字符串数组,用于接收输出结果,其中第四个元素接收计算结果 str1[0] = ENGINE[0]; //将发动机型号填充到数组 str1[1] = PN[0]; //将基准剖面名称填充到数组 str1[2] = MTID[0]; //将任务标识填充到数组 str1[4] = Convert.ToString(SDL[0]); //将任务表中设计寿命填充到数组 double TaskLifeConsumptionResults = 0; //开始计算前寿命消耗设为0 double[,] TransP = Calculater.Transposition(P); //将P转置 double[,] PTP = Calculater.Multiplication(P.GetLength(0), P.GetLength(1), TransP.GetLength(1), P, TransP); //P和其转置的乘积 double[,] PMI = Calculater.MatrixInversion(PTP); //将PTP求逆 if (PMI == null)//如果矩阵PMI为空即矩阵PTP的逆不存在,否则就计算寿命消耗值 { MessageBox.Show("求逆错误!寿命消耗折算无法正常计算!"); str1[3] = "-99999"; //将寿命计算结果设为 - 99999,说明寿命消耗不能计算; return(str1); } else { double[,] MUL = Calculater.Multiplication(PMI.GetLength(0), PMI.GetLength(1), P.GetLength(1), PMI, P); //PMI与P的乘积 double[,] L = Calculater.Multiplication(MUL.GetLength(0), MUL.GetLength(1), Ts.GetLength(1), MUL, Ts); //剖面合成权重系数L //飞行剖面折合系数 double[,] ccofp = Calculater.CCOFP(DL); //典型剖面第一个剖面为基准剖面时寿命消耗折算结果 double CalculationResults = Calculater.LifeConsumptionConversion(TTT, L, ccofp, E, EP); //任务表中基准剖面下寿命消耗折算结果 TaskLifeConsumptionResults = (typicaldl[0] * CalculationResults / SDL[0]); str1[3] = TaskLifeConsumptionResults.ToString("0.########"); } return(str1); } }