V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
zhouzhou113
V2EX  ›  问与答

使用 gsl_root_fsolver_root()求解器求解四次方程根

  •  
  •   zhouzhou113 · 2018-08-29 16:42:24 +08:00 · 1216 次点击
    这是一个创建于 2279 天前的主题,其中的信息可能已经有所发展或是发生改变。

    根据官网例程写的解算器,win10+vs2005+gsl1.8 求解四方方程的根 定义了根的上下限,可以得到唯一解 放在工程中实时在线求解的时候不定期会报内存泄漏:Object dump complete.,有遇到相同情况的吗? 检查了下发现 gsl 版本较低,更新成 2.4 版本后同样的问题

    double rosenbrock_f3(double x, void * params)

    {

    double a = ((struct rparams *) params)->a;
    
    double b = ((struct rparams *) params)->b;
    
    double c = ((struct rparams *) params)->c;
    
    double d = ((struct rparams *) params)->d;
    
    double e = ((struct rparams *) params)->e;
    
    
    double f = (1.0 / 4.0)*c*pow(x, 4) + (1.0 / 3.0)*b*pow(x, 3) + (1.0 / 2.0)*a*pow(x, 2) + d*x - e;
    
    return f;
    

    }

    double ObtainRoot(double a, double b, double c, double d, double e, double t1) {

    int status;
    int iter = 0, max_iter = 100;
    const gsl_root_fsolver_type *Type;
    gsl_root_fsolver *ss;
    double r = 0;
    double x_lo = 0.0, x_hi = t1;//下限和上限
    rparams alpha = { a, b, c, d, e };
    
    gsl_function obtaint;
    obtaint.function = &CVehicleExe::rosenbrock_f3;
    obtaint.params = α
    
    Type = gsl_root_fsolver_brent;
    ss = gsl_root_fsolver_alloc(Type);
    gsl_root_fsolver_set(ss, &obtaint, x_lo, x_hi);
    
    
    do
    {
    	iter++;
    	status = gsl_root_fsolver_iterate(ss);
    	r = gsl_root_fsolver_root(ss);
    	x_lo = gsl_root_fsolver_x_lower(ss);
    	x_hi = gsl_root_fsolver_x_upper(ss);
    	status = gsl_root_test_interval(x_lo, x_hi,0, 0.001);
    
    	if (status == GSL_SUCCESS)
    		printf("Converged:\n");
    
    } while (status == GSL_CONTINUE && iter < max_iter);
    
    double result = r;
    gsl_root_fsolver_free(ss);
    
    return result;
    

    }

    第 1 条附言  ·  2018-08-30 11:07:28 +08:00
    此问题已解决
    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5673 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 01:43 · PVG 09:43 · LAX 17:43 · JFK 20:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.