当前位置: 首页 > news >正文

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;}}
}

http://www.lryc.cn/news/193137.html

相关文章:

  • 如何使用命令生成动态链接库.dll文件(保姆级教学)
  • Qt之模块介绍
  • Socks5代理和代理IP
  • 计算机指令、机器码
  • MyLife - Docker安装Consul
  • Leetcode刷题笔记--Hot61-70
  • python特别篇—github基本操作手册
  • tiktok直播websocket序列化与反序列化
  • 微信picker弹出之后 , 背景变成灰色是怎么做的
  • 通用考勤后台管理系统
  • LeetCode75——Day5
  • 面向C++模块的开源 IFC SDK
  • Docker开启远程访问+idea配置docker+dockerfile发布java项目
  • 基于nodejs+vue教学辅助管理系统
  • Qt 子线程中无限递归的信号槽导致主线程槽失效的原因和解决办法
  • 实施 DevSecOps 最佳实践
  • 第56节——redux-toolkit中的createAction——了解
  • 【数据结构】排序--选择排序(堆排序)
  • C# 图解教程 第5版 —— 第2章 C# 和 .NET Core
  • 数据结构 | Huffman TreeCode
  • mysql拼接字符串函数
  • python基础(5):深入理解 python 中的赋值、引用、拷贝、作用域
  • 《动手学深度学习 Pytorch版》 8.6 循环神经网络的简洁实现
  • leetcode做题笔记173. 二叉搜索树迭代器
  • RPA流程自动化的优势和好处
  • 搭建 Hadoop 生态集群大数据监控告警平台
  • 课题学习(七)----粘滑运动的动态算法
  • python二次开发CATIA:测量曲线长度
  • 从零开始学习调用百度地图网页API:二、初始化地图,鼠标交互创建信息窗口
  • Yarn基础入门