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

news2024/11/23 19:00:21

1 文本格式

using System;

namespace Legalsoft.Truffer
{
    public class Fitexy
    {
        private double a { get; set; }
        private double b { get; set; }
        private double siga { get; set; }
        private double sigb { get; set; }
        private double chi2 { get; set; }
        private double q { get; set; }
        private int ndat { get; set; }
        private double[] xx { get; set; }
        private double[] yy { get; set; }
        private double[] sx { get; set; }
        private double[] sy { get; set; }
        private double[] ww { get; set; }
        private double aa;
        private double offs;

        public Fitexy(double[] x, double[] y, double[] sigx, double[] sigy)
        {
            this.ndat = x.Length;
            this.xx = new double[ndat];
            this.yy = new double[ndat];
            this.sx = new double[ndat];
            this.sy = new double[ndat];
            this.ww = new double[ndat];
            const double POTN = 1.571000;
            const double BIG = 1.0e30;
            const double ACC = 1.0e-6;

            Gamma gam = new Gamma();
            //Brent brent = new Brent(ACC);
            Chixy chixy = new Chixy(xx, yy, sx, sy, ww, ref aa, ref offs);
            double varx = 0.0;
            double vary = 0.0;
            double[] ang = new double[7];
            double[] ch = new double[7];
            double dum1 = 0.0;
            Moment.avevar(x, ref dum1, ref varx);
            Moment.avevar(y, ref dum1, ref vary);
            double scale = Math.Sqrt(varx / vary);
            for (int j = 0; j < ndat; j++)
            {
                xx[j] = x[j];
                yy[j] = y[j] * scale;
                sx[j] = sigx[j];
                sy[j] = sigy[j] * scale;
                ww[j] = Math.Sqrt(Globals.SQR(sx[j]) + Globals.SQR(sy[j]));
            }
            Fitab fit = new Fitab(xx, yy, ww);
            b = fit.b;
            offs = ang[0] = 0.0;
            ang[1] = Math.Atan(b);
            ang[3] = 0.0;
            ang[4] = ang[1];
            ang[5] = POTN;
            for (int j = 3; j < 6; j++)
            {
                ch[j] = chixy.funk(ang[j]);
            }

            Brent brent = new Brent(ACC);
            //brent.func = chixy.functorMethod;
            brent.bracket(ang[0], ang[1], chixy);
            ang[0] = brent.ax; 
            ang[1] = brent.bx; 
            ang[2] = brent.cx;
            ch[0] = brent.fa; 
            ch[1] = brent.fb; 
            ch[2] = brent.fc;
            b = brent.minimize(chixy);
            chi2 = chixy.funk(b);
            a = aa;
            q = gam.gammq(0.5 * (ndat - 2), chi2 * 0.5);
            double r2 = 0.0;
            for (int j = 0; j < ndat; j++)
            {
                r2 += ww[j];
            }
            r2 = 1.0 / r2;
            double bmx = BIG;
            double bmn = BIG;
            offs = chi2 + 1.0;
            for (int j = 0; j < 6; j++)
            {
                if (ch[j] > offs)
                {
                    double d1 = Math.Abs(ang[j] - b);
                    while (d1 >= Math.PI)
                    {
                        d1 -= Math.PI;
                    }
                    double d2 = Math.PI - d1;
                    if (ang[j] < b)
                    {
                        Globals.SWAP(ref d1, ref d2);
                    }
                    if (d1 < bmx)
                    {
                        bmx = d1;
                    }
                    if (d2 < bmn)
                    {
                        bmn = d2;
                    }
                }
            }
            if (bmx < BIG)
            {
                bmx = Roots.zbrent(chixy, b, b + bmx, ACC) - b;
                double amx = aa - a;
                bmn = Roots.zbrent(chixy, b, b - bmn, ACC) - b;
                double amn = aa - a;
                sigb = Math.Sqrt(0.5 * (bmx * bmx + bmn * bmn)) / (scale * Globals.SQR(Math.Cos(b)));
                siga = Math.Sqrt(0.5 * (amx * amx + amn * amn) + r2) / scale;
            }
            else sigb = siga = BIG;
            a /= scale;
            b = Math.Tan(b) / scale;
        }
    }


    public class Chixy : UniVarRealValueFun
    {
        private double[] xx { get; set; }
        private double[] yy { get; set; }
        private double[] sx { get; set; }
        private double[] sy { get; set; }
        private double[] ww { get; set; }
        private double aa { get; set; }
        private double offs { get; set; }

        public Chixy(double[] xxx, double[] yyy, double[] ssx, double[] ssy, double[] www, ref double aaa, ref double ooffs)
        {
            this.xx = xxx;
            this.yy = yyy;
            this.sx = ssx;
            this.sy = ssy;
            this.ww = www;
            this.aa = aaa;
            this.offs = ooffs;
        }

        public double funk(double bang)
        {
            return get(bang);
        }

        public double get(double bang)
        {
            const double BIG = 1.0e30;
            //int j;
            int nn = xx.Length;
            //double ans;
            double avex = 0.0;
            double avey = 0.0;
            double sumw = 0.0;
            //double b;
            double b = Math.Tan(bang);
            for (int j = 0; j < nn; j++)
            {
                ww[j] = Globals.SQR(b * sx[j]) + Globals.SQR(sy[j]);
                sumw += (ww[j] = (ww[j] < 1.0 / BIG ? BIG : 1.0 / ww[j]));
                avex += ww[j] * xx[j];
                avey += ww[j] * yy[j];
            }
            avex /= sumw;
            avey /= sumw;
            aa = avey - b * avex;
            double ans = -offs;
            for (int j = 0; j < nn; j++)
            {
                ans += ww[j] * Globals.SQR(yy[j] - aa - b * xx[j]);
            }
            return ans;
        }
    }
}
 

2 代码格式

using System;

namespace Legalsoft.Truffer
{
    public class Fitexy
    {
        private double a { get; set; }
        private double b { get; set; }
        private double siga { get; set; }
        private double sigb { get; set; }
        private double chi2 { get; set; }
        private double q { get; set; }
        private int ndat { get; set; }
        private double[] xx { get; set; }
        private double[] yy { get; set; }
        private double[] sx { get; set; }
        private double[] sy { get; set; }
        private double[] ww { get; set; }
        private double aa;
        private double offs;

        public Fitexy(double[] x, double[] y, double[] sigx, double[] sigy)
        {
            this.ndat = x.Length;
            this.xx = new double[ndat];
            this.yy = new double[ndat];
            this.sx = new double[ndat];
            this.sy = new double[ndat];
            this.ww = new double[ndat];
            const double POTN = 1.571000;
            const double BIG = 1.0e30;
            const double ACC = 1.0e-6;

            Gamma gam = new Gamma();
            //Brent brent = new Brent(ACC);
            Chixy chixy = new Chixy(xx, yy, sx, sy, ww, ref aa, ref offs);
            double varx = 0.0;
            double vary = 0.0;
            double[] ang = new double[7];
            double[] ch = new double[7];
            double dum1 = 0.0;
            Moment.avevar(x, ref dum1, ref varx);
            Moment.avevar(y, ref dum1, ref vary);
            double scale = Math.Sqrt(varx / vary);
            for (int j = 0; j < ndat; j++)
            {
                xx[j] = x[j];
                yy[j] = y[j] * scale;
                sx[j] = sigx[j];
                sy[j] = sigy[j] * scale;
                ww[j] = Math.Sqrt(Globals.SQR(sx[j]) + Globals.SQR(sy[j]));
            }
            Fitab fit = new Fitab(xx, yy, ww);
            b = fit.b;
            offs = ang[0] = 0.0;
            ang[1] = Math.Atan(b);
            ang[3] = 0.0;
            ang[4] = ang[1];
            ang[5] = POTN;
            for (int j = 3; j < 6; j++)
            {
                ch[j] = chixy.funk(ang[j]);
            }

            Brent brent = new Brent(ACC);
            //brent.func = chixy.functorMethod;
            brent.bracket(ang[0], ang[1], chixy);
            ang[0] = brent.ax; 
            ang[1] = brent.bx; 
            ang[2] = brent.cx;
            ch[0] = brent.fa; 
            ch[1] = brent.fb; 
            ch[2] = brent.fc;
            b = brent.minimize(chixy);
            chi2 = chixy.funk(b);
            a = aa;
            q = gam.gammq(0.5 * (ndat - 2), chi2 * 0.5);
            double r2 = 0.0;
            for (int j = 0; j < ndat; j++)
            {
                r2 += ww[j];
            }
            r2 = 1.0 / r2;
            double bmx = BIG;
            double bmn = BIG;
            offs = chi2 + 1.0;
            for (int j = 0; j < 6; j++)
            {
                if (ch[j] > offs)
                {
                    double d1 = Math.Abs(ang[j] - b);
                    while (d1 >= Math.PI)
                    {
                        d1 -= Math.PI;
                    }
                    double d2 = Math.PI - d1;
                    if (ang[j] < b)
                    {
                        Globals.SWAP(ref d1, ref d2);
                    }
                    if (d1 < bmx)
                    {
                        bmx = d1;
                    }
                    if (d2 < bmn)
                    {
                        bmn = d2;
                    }
                }
            }
            if (bmx < BIG)
            {
                bmx = Roots.zbrent(chixy, b, b + bmx, ACC) - b;
                double amx = aa - a;
                bmn = Roots.zbrent(chixy, b, b - bmn, ACC) - b;
                double amn = aa - a;
                sigb = Math.Sqrt(0.5 * (bmx * bmx + bmn * bmn)) / (scale * Globals.SQR(Math.Cos(b)));
                siga = Math.Sqrt(0.5 * (amx * amx + amn * amn) + r2) / scale;
            }
            else sigb = siga = BIG;
            a /= scale;
            b = Math.Tan(b) / scale;
        }
    }


    public class Chixy : UniVarRealValueFun
    {
        private double[] xx { get; set; }
        private double[] yy { get; set; }
        private double[] sx { get; set; }
        private double[] sy { get; set; }
        private double[] ww { get; set; }
        private double aa { get; set; }
        private double offs { get; set; }

        public Chixy(double[] xxx, double[] yyy, double[] ssx, double[] ssy, double[] www, ref double aaa, ref double ooffs)
        {
            this.xx = xxx;
            this.yy = yyy;
            this.sx = ssx;
            this.sy = ssy;
            this.ww = www;
            this.aa = aaa;
            this.offs = ooffs;
        }

        public double funk(double bang)
        {
            return get(bang);
        }

        public double get(double bang)
        {
            const double BIG = 1.0e30;
            //int j;
            int nn = xx.Length;
            //double ans;
            double avex = 0.0;
            double avey = 0.0;
            double sumw = 0.0;
            //double b;
            double b = Math.Tan(bang);
            for (int j = 0; j < nn; j++)
            {
                ww[j] = Globals.SQR(b * sx[j]) + Globals.SQR(sy[j]);
                sumw += (ww[j] = (ww[j] < 1.0 / BIG ? BIG : 1.0 / ww[j]));
                avex += ww[j] * xx[j];
                avey += ww[j] * yy[j];
            }
            avex /= sumw;
            avey /= sumw;
            aa = avey - b * avex;
            double ans = -offs;
            for (int j = 0; j < nn; j++)
            {
                ans += ww[j] * Globals.SQR(yy[j] - aa - b * xx[j]);
            }
            return ans;
        }
    }
}

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

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

相关文章

快速搭建Springboot项目(一)

目录 第一章、Spring Boot框架介绍1.1&#xff09;Springboot是什么&#xff0c;有什么好处1.2&#xff09;spring boot的两大策略与四大核心 第二章、快速搭建spring boot 项目2.1&#xff09;idea快速创建spring boot项目2.2&#xff09;pom文件内容的含义2.3&#xff09;起步…

195、SpringBoot--配置RabbitMQ消息Broker的SSL 和 管理控制台的HTTPS

开启Rabbitmq的一些命令&#xff1a; 小黑窗输入&#xff1a; rabbitmq-plugins enable rabbitmq_management 启动控制台插件&#xff0c;就是启动登录rabbitmq控制台的页面 rabbitmq_management 代表了RabbitMQ的管理界面。 rabbitmq-server 启动rabbitMQ服务器 上面这个&…

springboot中的静态资源规则~

静态资源处理&#xff1a; 默认的静态资源路径为 calsspath:/META-INF/resources/ classpath:/resources/ classpath:/static/ classpath:/public/如果我们将静态资源放置上述四种路径处&#xff0c;那么可以通过项目根路径/静态资源名称的方式访问到&#xff0c;否则会访问不…

Oracle-ASM实例communication error问题处理

问题背景&#xff1a; Oracle数据库日志出现大量的WARNING: ASM communication error: op 0 state 0x0 (15055)错误 问题分析: 首先检查ASM实例的状态,尝试通过sqlplus / as sysasm连接asm实例&#xff0c;出现Connected to an idle instance连接asm实例失败 检查ASM实例的后台…

mysql面试题27:数据库中间件了解过吗?什么是sharding jdbc、mycat,并且讲讲怎么使用?

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:数据库中间件了解过吗,比如sharding jdbc、mycat? 我知道的数据库中间件有以下这些: MySQL Proxy:MySQL Proxy是一个开源的数据库中间件,它位…

SSM170基于SSM的疫情物质管理系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

怎么禁止windows server2003系统中的用户进行本地登陆

随着科技的发展&#xff0c;电脑已经成为人们日常生活中必不可少的工具&#xff0c;电脑系统也在逐步更新&#xff0c;这就导致了许多人对于陌生的系统都不知道应该怎么办&#xff1f;当我们在使用windows server2003时&#xff0c;如何设置用户禁止本地登陆呢&#xff1f;接下…

【Linux初阶】多线程1 | 页表的索引作用 线程基础

本文要点 再次理解页表&#xff0c;了解页表是如何利用虚拟地址进行索引&#xff0c;实现数据读取和传输的了解线程概念&#xff0c;线程的优缺点&#xff0c;线程异常的后果了解线程和进程的差异了解线程库及其基本调用接口&#xff08;进程创建、终止、等待、控制&#xff0…

SQL sever中的视图

目录 一、视图概述&#xff1a; 二、视图好处 三、创建视图 法一&#xff1a; 法二&#xff1a; 四、查看视图信息 五、视图插入数据 六、视图修改数据 七、视图删除数据 八、删除视图 法一&#xff1a; 法二&#xff1a; 一、视图概述&#xff1a; 视图是一种常用…

如何使用 Datree 避免 Kubernetes 错误配置

Kubernetes 是一个复杂的系统,具有许多移动部件。正确的配置规则对于您的服务可靠运行至关重要。当您在没有经过全面审查过程的情况下手动编写 Kubernetes 清单时,可能会出现错误。 Datree是一个基于规则的工具,可以自动查找清单中的问题。您可以使用它来发现策略违规行为,…

常见算法-洗扑克牌(乱数排列)

常见算法-洗扑克牌&#xff08;乱数排列&#xff09; 1、说明 洗扑克牌的原理其实与乱数排列是相同的&#xff0c;都是将一组数字&#xff08;例如1∼N&#xff09;打乱重新排列&#xff0c;只不过洗扑克牌多了一个花色判断的动作而已。 初学者通常会直接想到&#xff0c;随…

基于 ACK Fluid 的混合云优化数据访问(一):场景与架构

作者&#xff1a;车漾&#xff08;必嘫&#xff09; 本系列文章将介绍如何基于 ACK Fluid 支持和优化混合云的数据访问场景。 概述 在 AI 和大数据时代&#xff0c;算力即正义&#xff0c;强大的算力推动了源源不断的创新。然而&#xff0c;企业自建的算力集群存在资源容量和…

继续改进 换一种 使用 result 想直接用CourseExtend

改 c.cid cid, 表示 c.cid 在 from timetable tt inner join teacher t on tt.tidt.tid inner join course c on tt.cidc.cid where tt.cid#{cid} 查出来了 任何赋值给 后面那个cid t.tname "teacher.tname", 表示查出来 赋值给下图那个teacher类的对应属性…

解决:yarn 无法加载文件 “C:\Users\XXXXX\AppData\Roaming\npm\yarn.ps1,因为在此系统上禁止运行脚本“ 的问题

1、问题描述&#xff1a; 报错的整体代码为&#xff1a; yarn : 无法加载文件 C:\Users\admin\AppData\Roaming\npm\yarn.ps1&#xff0c;因为在此系统上禁止运行脚本 // 整体的报错代码为 &#xff1a; yarn : 无法加载文件 C:\Users\admin\AppData\Roaming\npm\yarn.ps1&…

HarmonyOS/OpenHarmony原生应用开发-华为Serverless云端服务支持说明(一)

云端服务的实现是HarmonyOS/OpenHarmony原生应用开发的一个重要的环节&#xff0c;如果用户端是鸿蒙原生应用&#xff0c;但是服务端即云端还是基于传统的各种WEB网络框架、数据库与云服务器&#xff0c;那么所谓的原生应用开发实现的数据即后端服务是和以前、现在的互联网、移…

线性代数中涉及到的matlab命令-第一章:行列式

目录 1&#xff0c;逆序数 2&#xff0c;行列式定义和性质 2.1&#xff0c;常用特性及命令 2.2&#xff0c;求行列式 2.3&#xff0c;行列式的性质 2&#xff0c;行列式按行&#xff08;列&#xff09;展开 3&#xff0c;范德蒙德行列式 在学习线性代数过程中&#…

ssm172基于SSM的旅行社管理系统的设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

python每日一练(3)

&#x1f308;write in front&#x1f308; &#x1f9f8;大家好&#xff0c;我是Aileen&#x1f9f8;.希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流. &#x1f194;本文由Aileen_0v0&#x1f9f8; 原创 CSDN首发&#x1f412; 如…

安装torchtext遇到的坑及解决办法

刚开始秉着需要什么就pip install什么的原则直接pip install torchtext&#xff0c;结果&#xff1a; 把我这个环境打乱了&#xff0c;自作主张的删掉之前的很多包重新安装了其他版本的包而不是自适应的安装当前torch所对应的torchtext。因为这个环境比较重要也用在其他的工程…

【办公-excel】两个时间相减 (二) - 带毫秒的时间进行相减操作

一、使用内部函数 1.1 效果展示 TEXT(((RIGHT(TEXT(B2,"yyyy-mm-dd hh:mm:ss.000"),LEN(TEXT(B2,"yyyy-mm-dd hh:mm:ss.000"))-FIND(".",TEXT(B2,"yyyy-mm-dd hh:mm:ss.000")))-RIGHT(TEXT(A2,"yyyy-mm-dd hh:mm:ss.000"),…