C#,数值计算——数据建模Proposal的计算方法与源程序

2023-10-15 09:15

本文主要是介绍C#,数值计算——数据建模Proposal的计算方法与源程序,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1 文本格式

using System;

namespace Legalsoft.Truffer
{
    public class Proposal
    {
        public Normaldev gau { get; set; } = null;
        private double logstep { get; set; }

        public Proposal(int ranseed, double lstep)
        {
            this.gau = new Normaldev(0.0, 1.0, (ulong)ranseed);
            this.logstep = lstep;
        }

        public void functorMethod(State s1, State s2, ref double qratio)
        {
            double r = gau.doub();
            if (r < 0.9)
            {
                s2.lam1 = s1.lam1 * Math.Exp(logstep * gau.dev());
                s2.lam2 = s1.lam2 * Math.Exp(logstep * gau.dev());
                s2.tc = s1.tc * Math.Exp(logstep * gau.dev());
                s2.k1 = s1.k1;
                s2.k2 = s1.k2;
                qratio = (s2.lam1 / s1.lam1) * (s2.lam2 / s1.lam2) * (s2.tc / s1.tc);
            }
            else
            {
                r = gau.doub();
                if (s1.k1 > 1)
                {
                    if (r < 0.5)
                    {
                        s2.k1 = s1.k1;
                    }
                    else if (r < 0.75)
                    {
                        s2.k1 = s1.k1 + 1;
                    }
                    else
                    {
                        s2.k1 = s1.k1 - 1;
                    }
                }
                else
                {
                    if (r < 0.75)
                    {
                        s2.k1 = s1.k1;
                    }
                    else
                    {
                        s2.k1 = s1.k1 + 1;
                    }
                }
                s2.lam1 = s2.k1 * s1.lam1 / s1.k1;
                r = gau.doub();
                if (s1.k2 > 1)
                {
                    if (r < 0.5)
                    {
                        s2.k2 = s1.k2;
                    }
                    else if (r < 0.75)
                    {
                        s2.k2 = s1.k2 + 1;
                    }
                    else
                    {
                        s2.k2 = s1.k2 - 1;
                    }
                }
                else
                {
                    if (r < 0.75)
                    {
                        s2.k2 = s1.k2;
                    }
                    else
                    {
                        s2.k2 = s1.k2 + 1;
                    }
                }
                s2.lam2 = s2.k2 * s1.lam2 / s1.k2;
                s2.tc = s1.tc;
                qratio = 1.0;
            }
        }

        public static double mcmcstep(int m, State s, Plog plog, Proposal propose)
        {
            State sprop = new State();
            double qratio = 0.0;
            int accept = 0;
            plog.get(s);
            for (int i = 0; i < m; i++)
            {
                propose.functorMethod(s, sprop, ref qratio);
                double alph = Math.Min(1.0, qratio * Math.Exp(plog.get(sprop) - s.plog));
                double ran = propose.gau.doub();
                if (ran < alph)
                {
                    s = sprop;
                    plog.get(s);
                    accept++;
                }
            }
            return accept / (double)m;
        }
    }
}
 

2 代码格式

using System;namespace Legalsoft.Truffer
{public class Proposal{public Normaldev gau { get; set; } = null;private double logstep { get; set; }public Proposal(int ranseed, double lstep){this.gau = new Normaldev(0.0, 1.0, (ulong)ranseed);this.logstep = lstep;}public void functorMethod(State s1, State s2, ref double qratio){double r = gau.doub();if (r < 0.9){s2.lam1 = s1.lam1 * Math.Exp(logstep * gau.dev());s2.lam2 = s1.lam2 * Math.Exp(logstep * gau.dev());s2.tc = s1.tc * Math.Exp(logstep * gau.dev());s2.k1 = s1.k1;s2.k2 = s1.k2;qratio = (s2.lam1 / s1.lam1) * (s2.lam2 / s1.lam2) * (s2.tc / s1.tc);}else{r = gau.doub();if (s1.k1 > 1){if (r < 0.5){s2.k1 = s1.k1;}else if (r < 0.75){s2.k1 = s1.k1 + 1;}else{s2.k1 = s1.k1 - 1;}}else{if (r < 0.75){s2.k1 = s1.k1;}else{s2.k1 = s1.k1 + 1;}}s2.lam1 = s2.k1 * s1.lam1 / s1.k1;r = gau.doub();if (s1.k2 > 1){if (r < 0.5){s2.k2 = s1.k2;}else if (r < 0.75){s2.k2 = s1.k2 + 1;}else{s2.k2 = s1.k2 - 1;}}else{if (r < 0.75){s2.k2 = s1.k2;}else{s2.k2 = s1.k2 + 1;}}s2.lam2 = s2.k2 * s1.lam2 / s1.k2;s2.tc = s1.tc;qratio = 1.0;}}public static double mcmcstep(int m, State s, Plog plog, Proposal propose){State sprop = new State();double qratio = 0.0;int accept = 0;plog.get(s);for (int i = 0; i < m; i++){propose.functorMethod(s, sprop, ref qratio);double alph = Math.Min(1.0, qratio * Math.Exp(plog.get(sprop) - s.plog));double ran = propose.gau.doub();if (ran < alph){s = sprop;plog.get(s);accept++;}}return accept / (double)m;}}
}

这篇关于C#,数值计算——数据建模Proposal的计算方法与源程序的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/216775

相关文章

一文解析C#中的StringSplitOptions枚举

《一文解析C#中的StringSplitOptions枚举》StringSplitOptions是C#中的一个枚举类型,用于控制string.Split()方法分割字符串时的行为,核心作用是处理分割后... 目录C#的StringSplitOptions枚举1.StringSplitOptions枚举的常用

Linux下利用select实现串口数据读取过程

《Linux下利用select实现串口数据读取过程》文章介绍Linux中使用select、poll或epoll实现串口数据读取,通过I/O多路复用机制在数据到达时触发读取,避免持续轮询,示例代码展示设... 目录示例代码(使用select实现)代码解释总结在 linux 系统里,我们可以借助 select、

C#自动化实现检测并删除PDF文件中的空白页面

《C#自动化实现检测并删除PDF文件中的空白页面》PDF文档在日常工作和生活中扮演着重要的角色,本文将深入探讨如何使用C#编程语言,结合强大的PDF处理库,自动化地检测并删除PDF文件中的空白页面,感... 目录理解PDF空白页的定义与挑战引入Spire.PDF for .NET库核心实现:检测并删除空白页

C#利用Free Spire.XLS for .NET复制Excel工作表

《C#利用FreeSpire.XLSfor.NET复制Excel工作表》在日常的.NET开发中,我们经常需要操作Excel文件,本文将详细介绍C#如何使用FreeSpire.XLSfor.NET... 目录1. 环境准备2. 核心功能3. android示例代码3.1 在同一工作簿内复制工作表3.2 在不同

C#中通过Response.Headers设置自定义参数的代码示例

《C#中通过Response.Headers设置自定义参数的代码示例》:本文主要介绍C#中通过Response.Headers设置自定义响应头的方法,涵盖基础添加、安全校验、生产实践及调试技巧,强... 目录一、基础设置方法1. 直接添加自定义头2. 批量设置模式二、高级配置技巧1. 安全校验机制2. 类型

C#使用iText获取PDF的trailer数据的代码示例

《C#使用iText获取PDF的trailer数据的代码示例》开发程序debug的时候,看到了PDF有个trailer数据,挺有意思,于是考虑用代码把它读出来,那么就用到我们常用的iText框架了,所... 目录引言iText 核心概念C# 代码示例步骤 1: 确保已安装 iText步骤 2: C# 代码程

Pandas处理缺失数据的方式汇总

《Pandas处理缺失数据的方式汇总》许多教程中的数据与现实世界中的数据有很大不同,现实世界中的数据很少是干净且同质的,本文我们将讨论处理缺失数据的一些常规注意事项,了解Pandas如何表示缺失数据,... 目录缺失数据约定的权衡Pandas 中的缺失数据None 作为哨兵值NaN:缺失的数值数据Panda

C++中处理文本数据char与string的终极对比指南

《C++中处理文本数据char与string的终极对比指南》在C++编程中char和string是两种用于处理字符数据的类型,但它们在使用方式和功能上有显著的不同,:本文主要介绍C++中处理文本数... 目录1. 基本定义与本质2. 内存管理3. 操作与功能4. 性能特点5. 使用场景6. 相互转换核心区别

C#实现高性能拍照与水印添加功能完整方案

《C#实现高性能拍照与水印添加功能完整方案》在工业检测、质量追溯等应用场景中,经常需要对产品进行拍照并添加相关信息水印,本文将详细介绍如何使用C#实现一个高性能的拍照和水印添加功能,包含完整的代码实现... 目录1. 概述2. 功能架构设计3. 核心代码实现python3.1 主拍照方法3.2 安全HBIT

C#实现SHP文件读取与地图显示的完整教程

《C#实现SHP文件读取与地图显示的完整教程》在地理信息系统(GIS)开发中,SHP文件是一种常见的矢量数据格式,本文将详细介绍如何使用C#读取SHP文件并实现地图显示功能,包括坐标转换、图形渲染、平... 目录概述功能特点核心代码解析1. 文件读取与初始化2. 坐标转换3. 图形绘制4. 地图交互功能缩放