public override string ToString() { return("(" + F1.ToString() + op + F2.ToString() + ")"); }
public double SquareApproximation(double a, double b) { FileLine header = new FileLine(); header.X_prev = "y = 5x^3 - 3x^5"; Output.Add(header); double h, x1, x2, x3, F1, F2, F3, x_min, F_min; x2 = (a + b) / 2; x1 = a; x3 = b; h = delta; int n = 0; x_min = x2; F_min = F(x_min); int intervals = 10; do { FileLine line = new FileLine(); n++; //x1 = (a + b) / 2; h = (x3 - x1) / (intervals + 1); Tuple <double, double>[] points = new Tuple <double, double> [intervals + 1]; for (int i = 1; i <= intervals; i++) { points[i] = new Tuple <double, double>(x1 + h * i, F(x1 + h * i)); } double[,] matrix = new double[3, 4]; for (int i = 0; i < 3; i++) { for (int j = 0; j < 4; j++) { matrix[i, j] = 0; } } matrix[0, 0] = intervals; for (int i = 1; i <= intervals; i++) { matrix[1, 0] += points[i].Item1; matrix[2, 0] += points[i].Item1 * points[i].Item1; matrix[2, 1] += points[i].Item1 * points[i].Item1 * points[i].Item1; matrix[2, 2] += points[i].Item1 * points[i].Item1 * points[i].Item1 * points[i].Item1; matrix[0, 3] += points[i].Item2; matrix[1, 3] += points[i].Item2 * points[i].Item1; matrix[2, 3] += points[i].Item1 * points[i].Item1 * points[i].Item2; } matrix[0, 1] = matrix[1, 0]; matrix[1, 1] = matrix[2, 0]; matrix[0, 2] = matrix[2, 0]; matrix[1, 2] = matrix[2, 1]; var result = KrammerCalc(matrix); if (result.Item3 == 0) { break; } x_min = -1 * result.Item2 / (2 * result.Item3); double A = result.Item3; double B = result.Item2; double C = result.Item1; //F_min = A * x_min * x_min + B * x_min + C; //F2 = A * x2 * x2 + B * x2 * C; F_min = F(x_min); F2 = F(x2); line.Iteration_number = n.ToString(); line.X_prev = x2.ToString(); line.X_min = x_min.ToString(); line.Func_prev = F2.ToString(); line.Func_min = F_min.ToString(); line.a = x1.ToString(); line.b = x3.ToString(); Output.Add(line); //F1 = F(a); //F3 = F(b); if (Math.Abs(x2 - x_min) < delta) { break; } else { if (x1 < x_min && x_min < x2) { if (F_min < F2) { x3 = x2; F3 = F2; x2 = x_min; F2 = F_min; } else { x1 = x_min; F1 = F_min; } } else if (x2 < x_min && x_min < x3) { if (F_min < F2) { x1 = x2; F1 = F2; x2 = x_min; F2 = F_min; } else { x3 = x_min; F3 = F_min; } } } } while (n < 30); //Print(n); FileLine Down_header = new FileLine(); Down_header.X_prev = "x_min = "; Down_header.X_min = x_min.ToString(); Down_header.Func_prev = "f(x_min) = "; Down_header.Func_min = F_min.ToString(); Output.Add(Down_header); SaveToCSV("X_polynom_approximation"); return(x_min); }
/// <summary> /// 存储船舶状态信息 /// </summary> /// <param name="fileName"></param> public void StoreShipData(string fileName, DataTable dataRec) { /*using (FileStream fs = new FileStream(@"D:\" + fileName + ".txt", FileMode.Append)) * { * //数据保存信息量为: * //船号,纬度,经度,X坐标(m),Y坐标,和领队误差,航向角,航迹角,速度,速度等级,时间 * //在速度等级后面增加舵角信息,舵角控制输出量信息和速度控制输出量信息 * //共13个存储量 * string str_data = ShipID.ToString() + "," + Lat.ToString("0.00000000") + "," + Lon.ToString("0.00000000") + "," + pos_X.ToString("0.000") + "," + pos_Y.ToString("0.000") + "," + XError.ToString("0.000") + "," + phi.ToString("0.0") + "," + GPS_Phi.ToString("0.0") + "," + speed.ToString("0.00") + "," + gear.ToString() + "," + rud.ToString("0.0") + ',' + CtrlRudOut.ToString() + ',' + CtrlSpeedOut.ToString() + ',' + Time.ToString();//将数据转换为字符串 + + byte[] data = System.Text.Encoding.Default.GetBytes(str_data); + byte[] data3 = new byte[2]; + data3[0] = 0x0d; data3[1] = 0x0a; + //开始写入 + fs.Write(data, 0, data.Length); + + fs.Write(data3, 0, data3.Length); + + //清空缓冲区、关闭流 + fs.Flush(); + fs.Close(); + }*/ /*gridView.Rows.Add(ShipID.ToString(), Lat.ToString("0.00000000"), Lon.ToString("0.00000000"), * pos_X.ToString("0.000"), pos_Y.ToString("0.000"), XError.ToString("0.000"), * phi.ToString("0.0"), GPS_Phi.ToString("0.0"), * speed.ToString("0.00"), gear.ToString(), * rud.ToString("0.0"), CtrlRudOut.ToString(), CtrlSpeedOut.ToString(), * Time.ToString());*/ dataRec.Rows.Add(new object[] { ShipID.ToString(), Lat.ToString("0.00000000"), Lon.ToString("0.00000000"), Fter_pos_X.ToString("0.000"), Fter_pos_Y.ToString("0.000"), XError.ToString("0.000"), phi.ToString("0.0"), GPS_Phi.ToString("0.0"), Fter_GPS_Phi.ToString("0.0"), speed.ToString("0.00"), gear.ToString(), rud.ToString("0.0"), CtrlRudOut.ToString(), CtrlSpeedOut.ToString(), e1.ToString(), e2.ToString(), Vf.ToString(), F2.ToString(), MotorSpd.ToString(), HUST_1_Demo.Form1.followLineID.ToString(),//多段直线ID戳 sTime.ToString() }); }
public double SquareInterpolation(double a, double b) { FileLine header = new FileLine(); header.X_prev = "y = 5x^3 - 3x^5"; Output.Add(header); int n = 0; double x1 = a; double x3 = b; double x2 = (b + a) / 2; double x_min, F_min; double F1, F2, F3; F1 = F(x1); F2 = F(x2); F3 = F(x3); do { FileLine line = new FileLine(); n++; double[,] matrix = new double[3, 4]; matrix[0, 0] = x1 * x1; matrix[1, 0] = x2 * x2; matrix[2, 0] = x3 * x3; matrix[0, 1] = x1; matrix[1, 1] = x2; matrix[2, 1] = x3; matrix[0, 2] = 1; matrix[1, 2] = 1; matrix[2, 2] = 1; matrix[0, 3] = F1; matrix[1, 3] = F2; matrix[2, 3] = F3; var res = KrammerCalc(matrix); double c2 = res.Item1; double c1 = res.Item2; x_min = -c1 / (2 * c2); F_min = F(x_min); line.Iteration_number = n.ToString(); line.X_prev = x2.ToString(); line.X_min = x_min.ToString(); line.Func_prev = F2.ToString(); line.Func_min = F_min.ToString(); line.a = x1.ToString(); line.b = x3.ToString(); Output.Add(line); if (Math.Abs(x2 - x_min) < delta) { break; //return x_min; } else { if (x1 < x_min && x_min < x2) { if (F_min < F2) { x3 = x2; F3 = F2; x2 = x_min; F2 = F_min; } else { x1 = x_min; F1 = F_min; } } else if (x2 < x_min && x_min < x3) { if (F_min < F2) { x1 = x2; F1 = F2; x2 = x_min; F2 = F_min; } else { x3 = x_min; F3 = F_min; } } //x2 = x_min; } } while (true); FileLine Down_header = new FileLine(); Down_header.X_prev = "x_min = "; Down_header.X_min = x_min.ToString(); Down_header.Func_prev = "f(x_min) = "; Down_header.Func_min = F_min.ToString(); Output.Add(Down_header); SaveToCSV("X_polynom_interpolation"); return(x_min); }