/// <summary> /// 给定函数的名字 返回修改Funcexpresstemp后的FuncString对象 连同变量一同替换 一步到位 /// </summary> /// <param name="funname">函数名</param> /// <returns>FuncString 或者 null</returns> public FuncString FindFuncInTDC(string funname) { FuncString fs = null; if (tdc.CheckName(funname)) { FuncString funs = tdc.GetData(funname).ConvertTOFunString(); string funcexpress = ReplaceParamers(funs.GetFuncExpress(), funs.GetParamers()); if (funcexpress != null) { funs.SetFuncExpress(funcexpress); } fs = funs; } return(fs); }
/// <summary> /// 给定函数的名字 返回修改Funcexpresstemp后的FuncString对象 连同变量一同替换 一步到位 /// </summary> /// <param name="funname">函数名</param> /// <returns>FuncString 或者 null</returns> public FuncString FindFuncInTDC(string funname) { FuncString fs = null; if (tdc.CheckName(funname)) { FuncData fd = (FuncData)tdc.GetData(funname).GetCalData(); FuncString funs = new FuncString(funname, fd.GetExpValue(), fd.GetParamers()); string funcexpress = ReplaceParamers(funs.GetFuncExpress(), funs.GetParamers()); if (funcexpress != null) { funs.SetFuncExpress(funcexpress); } fs = funs; } return(fs); }
//f(x,y)=x+y+t /// <summary> /// 替换已知变量,fstr是一个字符串表达式:x+y 不是f=x+y , /// 没有变量是会原串返回的 /// 里面找未知数时会调用底层 CalString 的函数,里面已经自动排除sin,cos,avg等 函数名了 /// </summary> /// <param name="fstr">含参表达式</param> /// <param name="ps">排除变量</param> /// <returns>返回FuncExpressTemp为替换后的string /// 或含有未知变量返回null</returns> public static string ReplaceParamers(string fstr, string[] ps = null) { string[] strarr = null; FuncString fs = new FuncString(fstr); // fs.SetFuncExpressTemp(fstr); fs.SetFuncExpress(fstr); //为向下兼容不出错 FuncCal fc = new FuncCal(); if (ps == null) { strarr = fs.FindUnKnown(); } else { strarr = fs.FindUnKnown(ps); } fs.SetParamers(strarr); //为向下兼容不出错,不明觉厉 if (strarr.Length != 0) { PushToShow("含有未知数 尝试替换已知变量"); } string[] paramersdata = new string[strarr.Length]; fc.SetFuncString(fs); for (int i = 0; i < strarr.Length; i++) { if (tdc.CheckName(strarr[i])) { CalData datatemp = tdc.GetData(strarr[i]).GetCalData(); switch (datatemp.CalType) { case DataType.BLOCK: { PushToShow("Type not match!"); } break; case DataType.EXP: { ExpData ed = (ExpData)datatemp; paramersdata[i] = ed.GetValueEx(); PushToShow("提取" + strarr[i] + "的值:" + paramersdata[i]); break; } case DataType.MATRIX: { Matrix matrix = (Matrix)datatemp; PushToShow(matrix.ToString()); } break; } // if (datatemp.CalType == DataType.EXP) { // ExpData ed = (ExpData)datatemp; // paramersdata[i] = ed.GetValueEx(); // PushToShow("提取" + strarr[i] + "的值:" + paramersdata[i]); // } // // else // PushToShow("Type not match!"); continue; } PushToShow("未发现变量" + strarr[i] + "还未定义其值\n退出"); return(null); } if (paramersdata.Length != 0) { fc.DealFuncstring(paramersdata); } else { fs.SetFuncExpressTemp(fstr); } return(fc.GetFuncString().GetFuncExpressTemp()); }