c语言怎么都解不出来这个方程组,五个解四个未知数按道理应该是可行的,但是怎么都没思路
3条回答 默认 最新
- superSmart_Dong 2022-07-28 23:25关注
采用“牛顿迭代法”或者“列文伯格马夸尔特法”求解。代码太多不好贴,但是在github上有
你的方程根据t1,t2的值大概率无解。当 t1 =1 时,求解t1 = b - a a*a = 5*5 b*b = 4*4 - (x +2)*(x +2)
class MyCostFunction : public CostFunction{ public: MyCostFunction (Real t1 ,Real t2):t1_(t1),t2_(t2){} Real value(const Array& x) const override { // QL_REQUIRE(x.size()==1,"independent variable must be 1 dimensional"); Real result = 0; Array y(x.size()); y = values(x) ; for (int i = 0; i < x.size(); ++i) { result += y[i] *y[i]; } return result/y.size(); } Disposable<Array> values(const Array& array) const override { Array y(array.size()); Real a = array[0]; Real b = array[1]; Real x = array[2]; y[0]=t1_ -b +a ; y[1]=a*a - 5*5 ; y[2]=b*b - 4*4 + (x +2)*(x +2); return y; } private: Real t1_; Real t2_; }; int main(){ Real esp = QL_EPSILON; const Array initialValues = {0,0,0}; //初始迭代值 MyCostFunction costFct(1,0); NoConstraint noConstraint; //约束条件 Problem prob(costFct, noConstraint, initialValues); EndCriteria endCriteria(500, 100, esp, esp, esp); LevenbergMarquardt().minimize( prob, endCriteria); Real a = prob.currentValue()[0]; Real b = prob.currentValue()[1]; Real x = prob.currentValue()[2]; std::cout<<"a:"<<a<<std::endl; std::cout<<"b:"<<b<<std::endl; std::cout<<"x:"<<x<<std::endl; return 0 ; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥15 各位请问平行检验趋势图这样要怎么调整?说标准差差异太大了
- ¥15 delphi webbrowser组件网页下拉菜单自动选择问题
- ¥15 wpf界面一直接收PLC给过来的信号,导致UI界面操作起来会卡顿
- ¥15 init i2c:2 freq:100000[MAIXPY]: find ov2640[MAIXPY]: find ov sensor是main文件哪里有问题吗
- ¥15 运动想象脑电信号数据集.vhdr
- ¥15 三因素重复测量数据R语句编写,不存在交互作用
- ¥15 微信会员卡等级和折扣规则
- ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
- ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
- ¥15 gdf格式的脑电数据如何处理matlab