Java实现最小二乘法线性拟合,传感与检测,单臂半桥全桥实验,江南大学自动化

简介: Java实现最小二乘法线性拟合,传感与检测,单臂半桥全桥实验,江南大学自动化

因为作为资源上传不方便我们获取且我想免费分享给有需要的小伙伴,以后所有实验报告都通过文章形式记录输出了,仅供参考,欢迎交流。(最小二乘法代码在文末)


a018f93283824d7ab2bb9e368a8172da.jpg90011ea335b2431087f54ad76f54a024.jpg36b6c754ff2c47b3bce2f13ebb2aebf0.jpg81f63e3ca46647d786b36dcd3e85ade7.png


电桥特性曲线:


b93f5f086a2f4635917d637856883fb9.pngad720d25ba6e4d219b2a747cd6fa6436.png7251276ef7e74ddf961d74fa51e2bb60.png


Java实现最小二乘法线性拟合及计算灵敏度、非线性误差的代码:


/**
 * @Author: Yeman
 * @Date: 2021-10-29-23:03
 * @Description:
 */
public class LeastSquares {
    public static void matching(double[] x, double[] y, double[] input) {
        double k = getK(x, y);
        double b = getB(x, y);
        System.out.println("线性回归系数k值:\t" + k + "\n" + "线性回归系数b值:\t" + b);
        double maxy = 0; //用来记录最大偏差
        //寻找最大偏差
        for (int i = 0; i < input.length; i++) {
            if (Math.abs(k * input[i] + b - y[i]) > maxy){
                maxy = Math.abs(k * input[i] + b - y[i]);
            }
        }
        System.out.println("最大偏差为:" + maxy);
        //求灵敏度
        double s = 0;
        double sum = 0;
        for (int i = 1; i < y.length; i++) {
            sum += y[i] - y[i-1];
        }
        s = sum / (y.length - 1) / 20;
        System.out.println("灵敏度为:" + s);
        //求线性误差
        System.out.println("非线性误差为:" + maxy/y[10]);
    }
    /*
     * 返回x的系数k 公式:k = ( n sum( xy ) - sum( x ) sum( y ) ) / ( n sum( x^2 ) - sum(x) ^ 2 )
     */
    public static double getK(double[] x, double[] y) {
        int n = x.length;
        return (double) ((n * pSum(x, y) - sum(x) * sum(y)) / (n * sqSum(x) - Math.pow(sum(x), 2)));
    }
    /*
     * 返回常量系数系数b 公式:b = sum( y ) / n - k * sum( x ) / n
     */
    public static double getB(double[] x, double[] y) {
        int n = x.length;
        double k = getK(x, y);
        return sum(y) / n - k * sum(x) / n;
    }
    /*
     * 求和
     */
    private static double sum(double[] ds) {
        double s = 0;
        for (double d : ds)
        {
            s = s + d;
        }
        return s;
    }
    /*
     * 求平方和
     */
    private static double sqSum(double[] ds) {
        double s = 0;
        for (double d : ds) {
            s = (double) (s + Math.pow(d, 2));
        }
        return s;
    }
    /*
     * 返回对应项相乘后的和
     */
    private static double pSum(double[] x, double[] y) {
        double s = 0;
        for (int i = 0; i < x.length; i++) {
            s = s + x[i] * y[i];
        }
        return s;
    }
    public static void main(String[] args) {
        double[] x = {0,20,40,60,80,100,120,140,160,180,200};
        double[] y1 = {0,4.1,8.1,12.2,17.1,21.7,25.8,29.9,34.1,37.8,43.3};
        double[] y2 = {0,7.5,15.1,22.9,30.7,38.6,46.3,54.2,62.0,69.9,77.8};
        double[] y3 = {0,15.0,31.3,47.0,62.6,78.3,93.8,109.6,125.5,141.2,157.3};
        double[] inputs = x;
        System.out.println("===单臂电桥:");
        matching(x, y1,inputs);
        System.out.println("======半桥:");
        matching(x, y2,inputs);
        System.out.println("======全桥:");
        matching(x, y3,inputs);
    }
}


相关文章
|
9天前
|
缓存 算法 Java
本文聚焦于Java内存管理与调优,介绍Java内存模型、内存泄漏检测与预防、高效字符串拼接、数据结构优化及垃圾回收机制
在现代软件开发中,性能优化至关重要。本文聚焦于Java内存管理与调优,介绍Java内存模型、内存泄漏检测与预防、高效字符串拼接、数据结构优化及垃圾回收机制。通过调整垃圾回收器参数、优化堆大小与布局、使用对象池和缓存技术,开发者可显著提升应用性能和稳定性。
30 6
|
28天前
|
人工智能 安全 决策智能
OpenAI推出实验性“Swarm”框架,引发关于AI驱动自动化的争论
OpenAI推出实验性“Swarm”框架,引发关于AI驱动自动化的争论
|
2月前
|
存储 Java
java数据结构,线性表链式存储(单链表)的实现
文章讲解了单链表的基本概念和Java实现,包括头指针、尾节点和节点结构。提供了实现代码,包括数据结构、接口定义和具体实现类。通过测试代码演示了单链表的基本操作,如添加、删除、更新和查找元素,并总结了操作的时间复杂度。
java数据结构,线性表链式存储(单链表)的实现
|
1月前
|
机器学习/深度学习 数据挖掘 知识图谱
深度学习之材料科学中的自动化实验设计
基于深度学习的材料科学中的自动化实验设计是一个新兴领域,旨在通过机器学习模型,尤其是深度学习模型,来优化和自动化材料实验的设计流程。
42 1
|
1月前
|
安全 Java Python
基于python-django的Java网站全站漏洞检测系统
基于python-django的Java网站全站漏洞检测系统
33 0
|
3月前
|
Java Devops 持续交付
探索Java中的Lambda表达式:简化代码,提升效率DevOps实践:持续集成与部署的自动化之路
【8月更文挑战第30天】本文深入探讨了Java 8中引入的Lambda表达式如何改变了我们编写和管理代码的方式。通过简化代码结构,提高开发效率,Lambda表达式已成为现代Java开发不可或缺的一部分。文章将通过实际例子展示Lambda表达式的强大功能和优雅用法。
|
3月前
|
监控 算法 安全
Java并发编程案例分析:死锁的检测与解决
Java并发编程案例分析:死锁的检测与解决
37 2
|
3月前
|
XML Java 测试技术
Selenium WebDriver自动化测试(基础篇):不得不掌握的Java基础
关于Selenium WebDriver自动化测试的Java基础篇,涵盖了Java的变量、数据类型、字符串操作、运算符、流程控制、面向对象编程、关键字用法、权限修饰符、异常处理和IO流等基础知识点,为进行自动化测试提供了必要的Java语言基础。
103 1
|
3月前
|
Java 持续交付 项目管理
Maven是一款基于Apache许可的项目管理和构建自动化工具,在Java开发中极为流行。
Maven是一款基于Apache许可的项目管理和构建自动化工具,在Java开发中极为流行。它采用项目对象模型(POM)来描述项目,简化构建流程。Maven提供依赖管理、标准构建生命周期、插件扩展等功能,支持多模块项目及版本控制。在Java Web开发中,Maven能够自动生成项目结构、管理依赖、自动化构建流程并运行多种插件任务,如代码质量检查和单元测试。遵循Maven的最佳实践,结合持续集成工具,可以显著提升开发效率和项目质量。
52 1
|
3月前
|
网络协议 Java
JAVA实现心跳检测【长连接】
这篇文章介绍了Java中实现心跳检测机制的方法,包括心跳机制的简介、实现方式、客户端和服务端的代码实现,以及具体的测试结果。文中详细阐述了如何通过自定义心跳包和超时检测来维持长连接,并提供了完整的客户端和服务端示例代码。
JAVA实现心跳检测【长连接】