C#,数值计算——抛物线插值与Brent方法(Parabolic Interpolation and Brent‘s Method)的计算方法与源程序

 

using System;

namespace Legalsoft.Truffer
{
    /// <summary>
    /// 抛物线插值与Brent方法
    /// Parabolic Interpolation and Brent's Method
    /// </summary>
    public class Brent : Bracketmethod
    {
        public double xmin { get; set; }
        public double fmin { get; set; }
        public double tol { get; set; }

        public Brent(double toll = 3.0e-8)
        {
            this.tol = toll;
        }

        public double minimize(UniVarRealValueFun func)
        {
            const int ITMAX = 100;
            const double CGOLD = 0.3819660;
            double ZEPS = float.Epsilon * 0.001;
            double d = 0.0;
            double e = 0.0;
            double a = (ax < cx ? ax : cx);
            double b = (ax > cx ? ax : cx);
            double x = bx;
            double w = bx;
            double v = bx;
            double fx = func.funk(x);
            double fw = fx;
            double fv = fx;
            for (int iter = 0; iter < ITMAX; iter++)
            {
                double xm = 0.5 * (a + b);
                double tol1 = tol * Math.Abs(x) + ZEPS;
                double tol2 = 2.0 * (tol1);
                if (Math.Abs(x - xm) <= (tol2 - 0.5 * (b - a)))
                {
                    fmin = fx;
                    return xmin = x;
                }
                if (Math.Abs(e) > tol1)
                {
                    double r = (x - w) * (fx - fv);
                    double q = (x - v) * (fx - fw);
                    double p = (x - v) * q - (x - w) * r;
                    q = 2.0 * (q - r);
                    if (q > 0.0)
                    {
                        p = -p;
                    }
                    q = Math.Abs(q);
                    double etemp = e;
                    e = d;
                    if (Math.Abs(p) >= Math.Abs(0.5 * q * etemp) || p <= q * (a - x) || p >= q * (b - x))
                    {
                        d = CGOLD * (e = (x >= xm ? a - x : b - x));
                    }
                    else
                    {
                        d = p / q;
                        double uu = x + d;
                        if (uu - a < tol2 || b - uu < tol2)
                        {
                            d = Globals.SIGN(tol1, xm - x);
                        }
                    }
                }
                else
                {
                    d = CGOLD * (e = (x >= xm ? a - x : b - x));
                }
                double u = (Math.Abs(d) >= tol1 ? x + d : x + Globals.SIGN(tol1, d));
                double fu = func.funk(u);
                if (fu <= fx)
                {
                    if (u >= x)
                    {
                        a = x;
                    }
                    else
                    {
                        b = x;
                    }
                    shft3(ref v, ref w, ref x, u);
                    shft3(ref fv, ref fw, ref fx, fu);
                }
                else
                {
                    if (u < x)
                    {
                        a = u;
                    }
                    else
                    {
                        b = u;
                    }
                    if (fu <= fw || w == x)
                    {
                        v = w;
                        w = u;
                        fv = fw;
                        fw = fu;
                    }
                    else if (fu <= fv || v == x || v == w)
                    {
                        v = u;
                        fv = fu;
                    }
                }
            }
            throw new Exception("Too many iterations in brent");
        }
    }
}
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/1381916.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux操作系统】深入理解Linux系统编程中的open函数

在Linux系统编程中&#xff0c;open函数是一个非常重要的系统调用函数&#xff0c;它用于打开或创建一个文件&#xff0c;并返回一个文件描述符。本文将详细介绍open函数的用法&#xff0c;并给出具体的代码示例。 文章目录 1. 函数原型2. 函数参数2.1 flags参数2.2 mode参数 …

34. 应用监控【监控端点配置】

当一个 Spring Boot 项目运行时&#xff0c;开发者需要对 Spring Boot 项目进行实时监控来获取项目的运行情况&#xff0c;在项目出错时能够实现自动报警等。 Spring Boot 提供了actuator 来帮助开发者获取应用程序的实时运行数据。开发者可以选择使用 HTTP 端点或JMX来管理和监…

数据监控平台

数据监控平台 监控平台需要实时监控业务指标数据&#xff0c;系统特点&#xff1a;高并发&#xff0c;大数据&#xff0c;低延迟。主要使用的技术&#xff1a; HBase存储海量数据&#xff0c;ScriptEngine引擎&#xff0c;MySQL分表&#xff0c;Redis集群。 高并发&#xf…

应用监控系统

做这个系统其实当时的想法是开放给开发&#xff0c;然后开发自己做一些自己需要的监控&#xff0c;以便最早发现问题&#xff0c;但是做完发现跟nagios\zabbix重复的相当严重&#xff0c;其实应该在nagios\zabbix上继续开发一下应该会更好&#xff0c;先贴出来吧&#xff01; 一…

大众点评Cat实时应用监控平台服务端部署

关于cat服务端部署的相关文档地址如下&#xff1a; https://github.com/dianping/cat/wiki/readme_server 话不多说&#xff0c;接下来就按照官方文档流程走一遍&#xff0c;我这里是使用的Windows系统进行部署。 第一步确认环境&#xff1a; 我这边使用的是如下环境&#xff…

Skywalking 快速搭建应用监控

今天我们就着重讲一讲如何基于 Skywalking 来快速搭建一套应用性能监控平台 一、Skywaling 介绍 Skywalking是由国内开源爱好者吴晟开源并提交到Apache孵化器的开源项目&#xff0c; 2017年12月SkyWalking成为Apache国内首个个人孵化项目&#xff0c; 2019年4月17日SkyWalking从…

SprngBoot Admin (应用监控)

1 简介 SpringBoot应用可以通过Actuator来暴露应用运行过程中的各项指标&#xff0c;Spring Boot Admin通过这些指标来监控SpringBoot应用&#xff0c;然后通过图形化界面呈现出来。Spring Boot Admin不仅可以监控单体应用&#xff0c;还可以和Spring Cloud的注册中心相结合来…

行业分析| anyRTC智慧视频监控的应用

智慧视频监控是安全防范系统的重要组成部分&#xff0c;不仅可以达到一般视频监控系统的远程控制监控、视频回看&#xff0c;满足治安管理、城市管理、交通管理、应急指挥等需求&#xff0c;还具备防盗报警系统的预警信息作用&#xff0c;在预防、发现、控制、打击违法犯罪&…

十四、应用监控(2)

本章概要 监控信息可视化邮件报警 14.2 监控信息可视化 Spring Boot 中提供了监管信息管理段&#xff0c;用来实现监控信息的可视化&#xff0c;这样可以方便开发者快速查看系统运行情况&#xff0c;而不用一个一个地调用接口。 创建 Spring Boot Web 工程&#xff0c;添加以…

Prometheus应用监控

1.主流机器与应用Prometheus,skywalking监控体系分享介绍 应用监控介绍 目前市面上开源应用的APM系统主要有CAT、Zipkin、Pinpoint、SkyWalking。目前市面上机器监控软件有zabbix&#xff0c;Prometheus(也能监控应用&#xff0c;及其他中间件产品)。 Zipkin是Twitter开源的…

系统与应用监控的思路和方法

0、前言 在实际的性能分析中&#xff0c;一个很常见的现象是&#xff0c;明明发生了性能瓶颈&#xff0c;但当你登录到服务器中想要排查的时候&#xff0c;却发现瓶颈已经消失了。或者说&#xff0c;性能问题总是时不时地发生&#xff0c;但却很难找出发生规律&#xff0c;也很…

应用程序服务器监控

什么是应用程序服务器监视 为了确保业务应用程序的最佳性能&#xff0c;必须使用应用程序服务器监视工具&#xff0c;以深入了解应用程序的运行状况和正常运行时间。应用程序服务器监视可帮助您识别性能不足的服务器组件以及性能问题的根本原因&#xff0c;修复它们并确保应用…

应用监控

简介 Spring Boot提供了运行时的应用监控和管理的功能。我们可以通过http、JMX、SSH协议来进行操作。审计、健康及指标信息将会自动得到。 Endpoints 列举一些主要的endpoints &#xff1a; 敏感信息访问限制 根据上面表格&#xff0c;鉴权为false的&#xff0c;表示不敏…

应用监控以及告警实现

前言 一个Java应用 可以不优秀&#xff0c;但是一定不能没有监控方案。否则极大影响排查线上问题的效 以及系统故障的及时告警 。试想 核心应用挂了一个 但是没有配置告警 理想情况几个小时 被自己人发现了 但是万一自己人也没看到或者没关注 那难道让服务一直挂下去么 &#…

十四、应用监控(1)

本章概要 监控端点配置&#xff08;开启端点&#xff0c;暴露端点&#xff0c;端点保护&#xff0c;端点响应缓存&#xff0c;路径映射&#xff0c;CORS支持&#xff0c;健康信息&#xff0c;应用信息&#xff09; 当一个Spring Boot 项目运行时&#xff0c;开发者需要对 Spr…

一篇文章讲透线上应用监控

“线上服务停了&#xff0c;要重启一下”&#xff1f;久经职场做研发的程序员&#xff0c;视线会逐渐转移到线上应用的运行状态。设想一下&#xff0c;如果你在半夜两点正在酣眠美梦时&#xff0c;微信群里突然炸开锅&#xff1a;“服务停了&#xff0c;先重启。。。”&#xf…

如何设置时间倒计时

开发工具与关键技术&#xff1a;Visual Studio 2015、SQL Server 2014 作者&#xff1a;黄世豪 撰写时间&#xff1a;2019年01月31号相信很多小伙伴在做项目时会遇到过要用到时间倒计时的效果&#xff0c;下面我们来实现一下如何将自己设置的时间来让其进行时间倒计。 jsp调用…

js倒计时读秒

1.需求及分析 最近,接到一个接收手机验证码的功能&#xff0c;大体就是设置一个定时器&#xff0c;在每次执行的时候将秒数&#xff0c;逐个减去1&#xff0c;小于0的时候&#xff0c;清除定时器&#xff0c;然后完善一下功能&#xff0c;例如&#xff0c;加上一下状态的变化&…

C#实现倒计时的功能

软件界面&#xff1a; 软代码&#xff1a; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;na…