2013年国赛高教杯数学建模C题古塔的变形解题全过程文档及程序

news2024/11/23 22:16:13

2013年国赛高教杯数学建模

C题 古塔的变形

  由于长时间承受自重、气温、风力等各种作用,偶然还要受地震、飓风的影响,古塔会产生各种变形,诸如倾斜、弯曲、扭曲等。为保护古塔,文物部门需适时对古塔进行观测,了解各种变形量,以制定必要的保护措施。
  某古塔已有上千年历史,是我国重点保护文物。管理部门委托测绘公司先后于1986年7月、1996年8月、2009年3月和2011年3月对该塔进行了4次观测。
  请你们根据附件1提供的4次观测数据,讨论以下问题:
  1. 给出确定古塔各层中心位置的通用方法,并列表给出各次测量的古塔各层中心坐标。
  2. 分析该塔倾斜、弯曲、扭曲等变形情况。
  3. 分析该塔的变形趋势。

整体求解过程概述(摘要)

  本文要求根据测绘公司对古塔的4次测量数据,给出确定古塔各层中心位置的通用方法,并分析古塔的变形情况及其变形趋势。为了计算的精度,我们首先对各变形量进行了合理的数学定义,并对附录的缺失数据进行合理的赋值。
  对于问题一,我们通过最小二乘法拟合出观测点所在平面,再建立优化模型,在拟合平面上寻找到各观测点距离的平方和最小的点作为古塔该层的中心点。利用MATLAB编程求解,得到了每次观测古塔各层中心坐标的通用方法及各层的中心点坐标。
  对于问题二,我们将古塔的倾斜、弯曲和扭曲等变形情况,分别给予合理的数学描述。对于倾斜变形,我们定义了倾斜角α,即塔尖与底层中心的水平距离与塔高的比值;对于弯曲变形,我们定义了弯曲率K,即用中心点所拟合出的空间曲线的曲率来描述古塔各处弯曲率;对于扭曲变形,我们定义了相对扭曲度θ,利用坐标的旋转变换角度描述古塔的扭曲变形情况。利用空间曲线拟合、坐标变换等方法以及MATLAB程序,分别求出了三个变形刻画量的量化指标。
  对于问题三,我们考虑通过古塔的倾斜、弯曲及扭曲程度来分析古塔的变形趋势。由于数据量较少,我们建立灰色预测模型分析这三种变形因素的变化趋势,利用相应的MATLAB程序,得到了倾斜角、弯曲率以及相对扭曲度的预测函数和误差检验,验证了模型的可靠性,并继而分析古塔的变形趋势。
  本文巧妙地将各种变形量给予了合理的数学描述及模型,并运用最小二乘法、曲线投影拟合、坐标变换等数学方法实现了求解,并利用灰色预测对未来变形趋势进行了预测,具有较好的实用性和可推广性。

模型假设:

  1.由于中国古代建筑物多为对称图形,假设古塔是对称的。
  2.假设每次古塔的测量点选取是固定的。
  3.假设测量数据都是准确可靠的。
  4.假设古塔的变形只由倾斜、弯曲和扭曲变形造成,不考虑其他因素。

问题分析:

  问题一要求确定古塔各层中心位置的通用方法。根据建筑变形测量规范,在建筑物变形测量中,为更好地测量出建筑物变形程度的各个指标,我们假设每次测量应选取固定的测量点,且在同一层所选取的测量点在未变形前处于同一个水平面上。而经过对各层观测点三维散点图的绘制发现,各层的八个点近似对称地分布在一个平面上,只是因为年代久远发生变形导致了些许偏差。因此为了更准确地找出各层中心点,我们考虑先利用最小二乘法拟合出各层观测点所在的平面方程,再建立优化模型在该平面上寻找一点使其到各观测点距离的平方和最小,以此确立古塔各层中心坐标。

  问题二要求分析古塔的各种变形情况。根据《中华人民共和国行业标准建筑变形测量规范(JGJ8—2007)》知,变形是建筑的地基、基础、上部结构及其场地受各种作用力而产生的形状或位置变化现象。在本问中,我们主要分析古塔三种主要的变形情况:倾斜、弯曲、扭曲。对于倾斜变形,我们定义倾斜角α进行描述 ,其正切值等于塔尖与底层中心的水平距离与塔高的比值,即tanα=d/h ;对于弯曲变形,我们首先通过投影法拟合出古塔各层中心点所在空间曲线的参数方程,再利用空间曲线的曲率来刻画古塔的弯曲度K;对于扭曲变形,考虑到扭曲变形实际为古塔水平面的旋转产生,因此我们采用二维坐标( x, y)旋转的矩阵变换,通过各观测量点前后的坐标确定古塔的旋转角度θ,以此刻画古塔的扭曲度。但是,实际中水平面坐标( x, y)不仅发生了旋转变换,还受到倾斜弯曲变形等所引起的平移变化的影响,因此我们在考虑坐标变换的时候加入了平移量( p,q )使其更加准确合理。

  问题三为分析古塔的变形情况。本文中,我们认为建筑物变形由建筑物的倾斜、弯曲、扭曲等因素共同造成。由于附录只给出了四次统计的数据,而我们的目标是分析古塔未来多年的变化趋势,因此我们采用信息不完全、不充分的预测系统——灰色预测对古塔未来的变形趋势进行预测。

模型的建立与求解整体论文缩略图

在这里插入图片描述
在这里插入图片描述

全部论文请见下方“ 只会建模 QQ名片” 点击QQ名片即可
clc,clear
x0=[0.0141,0.0142,0.0146,0.0147];%原始数据序列
n=length(x0);
a_x0=diff(x0)';%求1次累减序列,即1阶向前差分
B=[-x0(2:end)',ones(n-1,1)];
u=B\a_x0%最小二乘拟合参数
x=dsolve('D2x+a*Dx=b','x(0)=c1,Dx(0)=c2');%求二阶微分方程的符号解
x=subs(x,{'a','b','c1','c2'},{u(1),u(2),x0(1),x0(1)});
yuce=subs(x,'t',0:n-1)%求已知数据点1次累加序列的预测值
x=vpa(x,6)
x0_hat=[yuce(1),diff(yuce)]%求已知数据点的预测值
epsilon=x0-x0_hat%求残差
delta=abs(epsilon./x0)%求相对误差
clc
clear
x1=[0.000141404 	0.000121639 	0.000089860 	0.000056555]; 
x2=[0.000141405 	0.000121641 	0.000089920 	0.000056556 ];
x3=[0.000141406 	0.000121642 	0.000089977 	0.000056556 ];
x4=[0.000141407 	0.000121643 	0.000090030 	0.000056557 ];
x5=[0.000141408 	0.000121644 	0.000090089 	0.000056557 ];
x6=[0.000141408 	0.000121645 	0.000090149 	0.000056558 ];
x7=[0.000141409 	0.000121646 	0.000090200 	0.000056558 ];
x8=[0.000141409 	0.000121646 	0.000090250 	0.000056558 ];
x9=[0.000141409 	0.000121647 	0.000090301 	0.000056559 ];
x10=[0.000141409 	0.000121647 	0.000090352 	0.000056559 ];
x11=[0.000141408 	0.000121648 	0.000090417 	0.000056559 ];
x12=[0.000141408 	0.000121648 	0.000090486 	0.000056560 ];
x13=[0.000141408 	0.000121648 	0.000090555 	0.000056560 ];
x14=[0.000141407 	0.000121648 	0.000090599 	0.000056560 ];

x0=x1(1,:);%原始数据序列
n=length(x0);
a_x0=diff(x0)';%求1次累减序列,即1阶向前差分
B=[-x0(2:end)',ones(n-1,1)];
u=B\a_x0%最小二乘拟合参数
x=dsolve('D2x+a*Dx=b','x(0)=c1,Dx(0)=c2');%求二阶微分方程的符号解
x=subs(x,{'a','b','c1','c2'},{u(1),u(2),x0(1),x0(1)});
yuce=subs(x,'t',0:n-1)%求已知数据点1次累加序列的预测值
x=vpa(x,6)
x0_hat=[yuce(1),diff(yuce)]%求已知数据点的预测值
epsilon=x0-x0_hat%求残差
delta=abs(epsilon./x0)%求相对误差
a1(1,:)=x0;
a1(2,:)=x0_hat;
a1(3,:)=epsilon;
a1(4,:)=delta;

x0=x2(1,:);%原始数据序列
n=length(x0);
a_x0=diff(x0)';%求1次累减序列,即1阶向前差分
B=[-x0(2:end)',ones(n-1,1)];
u=B\a_x0%最小二乘拟合参数
x=dsolve('D2x+a*Dx=b','x(0)=c1,Dx(0)=c2');%求二阶微分方程的符号解
x=subs(x,{'a','b','c1','c2'},{u(1),u(2),x0(1),x0(1)});
yuce=subs(x,'t',0:n-1)%求已知数据点1次累加序列的预测值
x=vpa(x,6)
x0_hat=[yuce(1),diff(yuce)]%求已知数据点的预测值
epsilon=x0-x0_hat%求残差
delta=abs(epsilon./x0)%求相对误差
a2(1,:)=x0;
a2(2,:)=x0_hat;
a2(3,:)=epsilon;
a2(4,:)=delta;

x0=x3(1,:);%原始数据序列
n=length(x0);
a_x0=diff(x0)';%求1次累减序列,即1阶向前差分
B=[-x0(2:end)',ones(n-1,1)];
u=B\a_x0%最小二乘拟合参数
x=dsolve('D2x+a*Dx=b','x(0)=c1,Dx(0)=c2');%求二阶微分方程的符号解
x=subs(x,{'a','b','c1','c2'},{u(1),u(2),x0(1),x0(1)});
yuce=subs(x,'t',0:n-1)%求已知数据点1次累加序列的预测值
x=vpa(x,6)
x0_hat=[yuce(1),diff(yuce)]%求已知数据点的预测值
epsilon=x0-x0_hat%求残差
delta=abs(epsilon./x0)%求相对误差
a3(1,:)=x0;
a3(2,:)=x0_hat;
a3(3,:)=epsilon;
a3(4,:)=delta;

x0=x4(1,:);%原始数据序列
n=length(x0);
a_x0=diff(x0)';%求1次累减序列,即1阶向前差分
B=[-x0(2:end)',ones(n-1,1)];
u=B\a_x0%最小二乘拟合参数
x=dsolve('D2x+a*Dx=b','x(0)=c1,Dx(0)=c2');%求二阶微分方程的符号解
x=subs(x,{'a','b','c1','c2'},{u(1),u(2),x0(1),x0(1)});
yuce=subs(x,'t',0:n-1)%求已知数据点1次累加序列的预测值
x=vpa(x,6)
x0_hat=[yuce(1),diff(yuce)]%求已知数据点的预测值
epsilon=x0-x0_hat%求残差
delta=abs(epsilon./x0)%求相对误差
a4(1,:)=x0;
a4(2,:)=x0_hat;
a4(3,:)=epsilon;
a4(4,:)=delta;

x0=x5(1,:);%原始数据序列
n=length(x0);
a_x0=diff(x0)';%求1次累减序列,即1阶向前差分
B=[-x0(2:end)',ones(n-1,1)];
u=B\a_x0%最小二乘拟合参数
x=dsolve('D2x+a*Dx=b','x(0)=c1,Dx(0)=c2');%求二阶微分方程的符号解
x=subs(x,{'a','b','c1','c2'},{u(1),u(2),x0(1),x0(1)});
yuce=subs(x,'t',0:n-1)%求已知数据点1次累加序列的预测值
x=vpa(x,6)
x0_hat=[yuce(1),diff(yuce)]%求已知数据点的预测值
epsilon=x0-x0_hat%求残差
delta=abs(epsilon./x0)%求相对误差
a5(1,:)=x0;
a5(2,:)=x0_hat;
a5(3,:)=epsilon;
a5(4,:)=delta;

x0=x6(1,:);%原始数据序列
n=length(x0);
a_x0=diff(x0)';%求1次累减序列,即1阶向前差分
B=[-x0(2:end)',ones(n-1,1)];
u=B\a_x0%最小二乘拟合参数
x=dsolve('D2x+a*Dx=b','x(0)=c1,Dx(0)=c2');%求二阶微分方程的符号解
x=subs(x,{'a','b','c1','c2'},{u(1),u(2),x0(1),x0(1)});
yuce=subs(x,'t',0:n-1)%求已知数据点1次累加序列的预测值
x=vpa(x,6)
x0_hat=[yuce(1),diff(yuce)]%求已知数据点的预测值
epsilon=x0-x0_hat%求残差
delta=abs(epsilon./x0)%求相对误差
a6(1,:)=x0;
a6(2,:)=x0_hat;
a6(3,:)=epsilon;
a6(4,:)=delta;

x0=x7(1,:);%原始数据序列
n=length(x0);
a_x0=diff(x0)';%求1次累减序列,即1阶向前差分
B=[-x0(2:end)',ones(n-1,1)];
u=B\a_x0%最小二乘拟合参数
x=dsolve('D2x+a*Dx=b','x(0)=c1,Dx(0)=c2');%求二阶微分方程的符号解
x=subs(x,{'a','b','c1','c2'},{u(1),u(2),x0(1),x0(1)});
yuce=subs(x,'t',0:n-1)%求已知数据点1次累加序列的预测值
x=vpa(x,6)
x0_hat=[yuce(1),diff(yuce)]%求已知数据点的预测值
epsilon=x0-x0_hat%求残差
delta=abs(epsilon./x0)%求相对误差
a7(1,:)=x0;
a7(2,:)=x0_hat;
a7(3,:)=epsilon;
a7(4,:)=delta;

x0=x8(1,:);%原始数据序列
n=length(x0);
a_x0=diff(x0)';%求1次累减序列,即1阶向前差分
B=[-x0(2:end)',ones(n-1,1)];
u=B\a_x0%最小二乘拟合参数
x=dsolve('D2x+a*Dx=b','x(0)=c1,Dx(0)=c2');%求二阶微分方程的符号解
x=subs(x,{'a','b','c1','c2'},{u(1),u(2),x0(1),x0(1)});
yuce=subs(x,'t',0:n-1)%求已知数据点1次累加序列的预测值
x=vpa(x,6)
x0_hat=[yuce(1),diff(yuce)]%求已知数据点的预测值
epsilon=x0-x0_hat%求残差
delta=abs(epsilon./x0)%求相对误差
a8(1,:)=x0;
a8(2,:)=x0_hat;
a8(3,:)=epsilon;
a8(4,:)=delta;

x0=x9(1,:);%原始数据序列
n=length(x0);
a_x0=diff(x0)';%求1次累减序列,即1阶向前差分
B=[-x0(2:end)',ones(n-1,1)];
u=B\a_x0%最小二乘拟合参数
x=dsolve('D2x+a*Dx=b','x(0)=c1,Dx(0)=c2');%求二阶微分方程的符号解
x=subs(x,{'a','b','c1','c2'},{u(1),u(2),x0(1),x0(1)});
yuce=subs(x,'t',0:n-1)%求已知数据点1次累加序列的预测值
x=vpa(x,6)
x0_hat=[yuce(1),diff(yuce)]%求已知数据点的预测值
epsilon=x0-x0_hat%求残差
delta=abs(epsilon./x0)%求相对误差
a9(1,:)=x0;
a9(2,:)=x0_hat;
a9(3,:)=epsilon;
a9(4,:)=delta;

x0=x10(1,:);%原始数据序列
n=length(x0);
a_x0=diff(x0)';%求1次累减序列,即1阶向前差分
B=[-x0(2:end)',ones(n-1,1)];
u=B\a_x0%最小二乘拟合参数
x=dsolve('D2x+a*Dx=b','x(0)=c1,Dx(0)=c2');%求二阶微分方程的符号解
x=subs(x,{'a','b','c1','c2'},{u(1),u(2),x0(1),x0(1)});
yuce=subs(x,'t',0:n-1)%求已知数据点1次累加序列的预测值
x=vpa(x,6)
x0_hat=[yuce(1),diff(yuce)]%求已知数据点的预测值
epsilon=x0-x0_hat%求残差
delta=abs(epsilon./x0)%求相对误差
a10(1,:)=x0;
a10(2,:)=x0_hat;
a10(3,:)=epsilon;
a10(4,:)=delta;

x0=x11(1,:);%原始数据序列
n=length(x0);
a_x0=diff(x0)';%求1次累减序列,即1阶向前差分
B=[-x0(2:end)',ones(n-1,1)];
u=B\a_x0%最小二乘拟合参数
x=dsolve('D2x+a*Dx=b','x(0)=c1,Dx(0)=c2');%求二阶微分方程的符号解
x=subs(x,{'a','b','c1','c2'},{u(1),u(2),x0(1),x0(1)});
yuce=subs(x,'t',0:n-1)%求已知数据点1次累加序列的预测值
x=vpa(x,6)
x0_hat=[yuce(1),diff(yuce)]%求已知数据点的预测值
epsilon=x0-x0_hat%求残差
delta=abs(epsilon./x0)%求相对误差
a11(1,:)=x0;
a11(2,:)=x0_hat;
a11(3,:)=epsilon;
a11(4,:)=delta;

x0=x12(1,:);%原始数据序列
n=length(x0);
a_x0=diff(x0)';%求1次累减序列,即1阶向前差分
B=[-x0(2:end)',ones(n-1,1)];
u=B\a_x0%最小二乘拟合参数
x=dsolve('D2x+a*Dx=b','x(0)=c1,Dx(0)=c2');%求二阶微分方程的符号解
x=subs(x,{'a','b','c1','c2'},{u(1),u(2),x0(1),x0(1)});
yuce=subs(x,'t',0:n-1)%求已知数据点1次累加序列的预测值
x=vpa(x,6)
x0_hat=[yuce(1),diff(yuce)]%求已知数据点的预测值
epsilon=x0-x0_hat%求残差
delta=abs(epsilon./x0)%求相对误差
a12(1,:)=x0;
a12(2,:)=x0_hat;
a12(3,:)=epsilon;
a12(4,:)=delta;

x0=x13(1,:);%原始数据序列
n=length(x0);
a_x0=diff(x0)';%求1次累减序列,即1阶向前差分
B=[-x0(2:end)',ones(n-1,1)];
u=B\a_x0%最小二乘拟合参数
x=dsolve('D2x+a*Dx=b','x(0)=c1,Dx(0)=c2');%求二阶微分方程的符号解
x=subs(x,{'a','b','c1','c2'},{u(1),u(2),x0(1),x0(1)});
yuce=subs(x,'t',0:n-1)%求已知数据点1次累加序列的预测值
x=vpa(x,6)
x0_hat=[yuce(1),diff(yuce)]%求已知数据点的预测值
epsilon=x0-x0_hat%求残差
delta=abs(epsilon./x0)%求相对误差
a13(1,:)=x0;
a13(2,:)=x0_hat;
a13(3,:)=epsilon;
a13(4,:)=delta;

x0=x14(1,:);%原始数据序列
n=length(x0);
a_x0=diff(x0)';%求1次累减序列,即1阶向前差分
B=[-x0(2:end)',ones(n-1,1)];
u=B\a_x0%最小二乘拟合参数
x=dsolve('D2x+a*Dx=b','x(0)=c1,Dx(0)=c2');%求二阶微分方程的符号解
x=subs(x,{'a','b','c1','c2'},{u(1),u(2),x0(1),x0(1)});
yuce=subs(x,'t',0:n-1)%求已知数据点1次累加序列的预测值
x=vpa(x,6)
x0_hat=[yuce(1),diff(yuce)]%求已知数据点的预测值
epsilon=x0-x0_hat%求残差
delta=abs(epsilon./x0)%求相对误差
a14(1,:)=x0;
a14(2,:)=x0_hat;
a14(3,:)=epsilon;
a14(4,:)=delta;
全部论文请见下方“ 只会建模 QQ名片” 点击QQ名片即可

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

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

相关文章

【交通标志识别系统】Python+卷积神经网络算法+人工智能+深度学习+机器学习+算法模型

一、介绍 交通标志识别系统。本系统使用Python作为主要编程语言,在交通标志图像识别功能实现中,基于TensorFlow搭建卷积神经网络算法模型,通过对收集到的58种常见的交通标志图像作为数据集,进行迭代训练最后得到一个识别精度较高…

C语言中的文件操作(一)

目录 一、为什么要使用文件 二、什么是文件 1、程序文件 2、数据文件 文件名 三、文件打开和关闭 1、文件指针 2、文件打开关闭 (1)fopen 打开 (2)fclose 关闭文件 (3)路径 1.绝对路径 2.相对路…

子网掩码、网络地址、广播地址、子网划分及计算

1. IPV4地址分类及组成 IP地址网络地址主机地址,(又称:主机号和网络号) 由上图可见网络号和主机号之和是32,而且此多彼少。 例:IP地址为192.168.2.131,转换成二进制1111 1111.1010 1000.0000 00…

编译原理——扫描器设计与实现

非常详细&#xff08;包括跳过注释部分&#xff09;&#xff0c;不多说直接上代码&#xff08;结合代码讲解&#xff09; #include<bits/stdc.h>using namespace std;#define ARRAY_LENGTH(arr) (sizeof(arr) / sizeof(arr[0]))//关键词集合 string KEY_WORD[] {"…

vue+ant解决弹窗可以拖动的问题

通过自定义指令实现拖拽功能 在main.js里加入drag自定义指令 Vue.directive(drag, {bind(el) {// 获取弹窗头部const header el.querySelector(.ant-modal-header)const modal el.querySelector(.ant-modal)// 弹窗头部鼠标变为移动header.style.cursor move// 头部鼠标按…

心觉:别再让你的精力流浪,精准掌控每一刻

Hi&#xff0c;我是心觉&#xff0c;与你一起玩转潜意识、脑波音乐和吸引力法则&#xff0c;轻松掌控自己的人生&#xff01; 挑战每日一省写作197/1000天 昨天写了一篇文章心觉&#xff1a;生理欲望转化的奥秘&#xff1a;提升创造力的法则 核心观点是来自于拿破仑希尔的《…

ICML 2024 | 牛津提出合作图神经网络Co-GNNs,更灵活的消息传递新范式

引用次数:9 引用格式:Finkelshtein B, Huang X, Bronstein M, et al. Cooperative graph neural networks[J]. arXiv preprint arXiv:2310.01267, 2023. 一、摘要 本文提出了一种训练图神经网络的新框架“合作图神经网络”(Co-GNNs),其中每一个节点可以被看作一个独立的玩…

【数据结构】邻接表

一、概念 邻接表是一个顺序存储与链式存储相结合的数据结构&#xff0c;用于描述一个图中所有节点之间的关系。 若是一个稠密图&#xff0c;我们可以选择使用邻接矩阵&#xff1b;但当图较稀疏时&#xff0c;邻接矩阵就显得比较浪费空间了&#xff0c;此时我们就可以换成邻接…

grpc的python使用

RPC 什么是 RPC &#xff1f; RPC&#xff08;Remote Procedure Call&#xff09;远程过程调用&#xff0c;是一种计算机通信协议&#xff0c;允许一个程序&#xff08;客户端&#xff09;通过网络向另一个程序&#xff08;服务器&#xff09;请求服务&#xff0c;而无需了解…

JDK17常用新特性

目前国内大部分开发人员都是在使用jdk8&#xff0c;甚至是jdk6&#xff0c;但是随着jdk的更新迭代&#xff0c;jdk8我觉得可能就会慢慢的淡出舞台&#xff0c;随着目前主流框架最新版推出明确说明了不再支持jdk8&#xff0c;也促使我不得不抓紧学习了解一波jdk17的新特性&#…

手写mybatis之解析和使用ResultMap映射参数配置

前言 学习源码是在学习什么呢&#xff1f; 就是为了通过这些源码级复杂模型中&#xff0c;学习系统框架的架构思维、设计原则和设计模式。在这些源码学习手写的过程中&#xff0c;感受、吸收并也是锻炼一种思维习惯&#xff0c;并尝试把这些思路技术迁移到平常的复杂业务设计开…

MD5消息摘要算法学习

MD5&#xff08;Message Digest Algorithm 5&#xff09;是一种广泛使用的哈希函数&#xff0c;它用于生成128位的哈希值&#xff08;也称为消息摘要&#xff09;。MD5主要用于确保信息的完整性&#xff0c;即可以通过对数据生成的哈希值来验证数据是否被篡改。尽管MD5在过去被…

60. 排列序列【回溯】

文章目录 60. 排列序列解题思路Go代码 60. 排列序列 60. 排列序列 给出集合 [1,2,3,...,n]&#xff0c;其所有元素共有 n! 种排列。 按大小顺序列出所有排列情况&#xff0c;并一一标记&#xff0c;当 n 3 时, 所有排列如下&#xff1a; “123”“132”“213”“231”“31…

SpringBoot 集成GPT实战,超简单详细

Spring AI 介绍 在当前的AI应用开发中&#xff0c;像OpenAI这样的GPT服务提供商主要通过HTTP接口提供服务&#xff0c;这导致大部分Java开发者缺乏一种标准化的方式来接入这些强大的语言模型。Spring AI Alibaba应运而生&#xff0c;它作为Spring团队提供的一个解决方案&…

Spring Boot 3 文件管理:上传、下载、预览、查询与删除(全网最全面教程)

在现代Web应用中&#xff0c;文件管理是一个非常重要的功能。Spring Boot作为Java开发领域的热门框架&#xff0c;提供了丰富的工具和API来简化文件管理的操作。本文将详细介绍如何使用Spring Boot 3进行文件的上传、下载、预览、查询与删除操作&#xff0c;并提供一个完整的示…

OpenCV 环境配置

首先下载opencv&#xff0c;在opencv官网进行下载。 按照上面的步骤&#xff0c;点击进去 滑至底部&#xff0c;不切换至不同页&#xff0c;选择合适的版本进行下载(Window系统选择Windows版本进行下载)。 接下来以4.1.2版本为例&#xff1a; 点击之后会进入这个页面&#xff…

聚类分析 | NRBO-GMM聚类优化算法

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 (创新)NRBO-GMM聚类优化算法 (NRBO聚类优化&#xff0c;创新&#xff0c;独家) 牛顿-拉夫逊优化算法优化GMM高斯混合聚类优化算法 matlab语言&#xff0c;一键出图&#xff0c;直接运行 1.牛顿-拉夫逊优化算法(New…

STM32—BKP备份寄存器RTC实时时钟

1.BKP简介 BKP(Backup Registers)备份寄存器BKP可用于存储用户应用程序数据。当VDD&#xff08;2.0~3.6V&#xff09;电源被切断&#xff0c;他们仍然由VBAT(1.8~3.6V)维持供电。当系统在待机模式下被唤醒&#xff0c;或系统复位或电源复位时&#xff0c;他们也不会被复位TAMP…

教培机构如何向知识付费转型

在数字化时代&#xff0c;知识付费已成为一股不可忽视的潮流。面对这一趋势&#xff0c;教育培训机构必须积极应对&#xff0c;实现向知识付费的转型&#xff0c;以在新的市场环境中立足。 一、教培机构应明确自身的知识定位。 在知识付费领域&#xff0c;专业性和独特性是关键…

【Python】selenium获取鼠标在网页上的位置,并定位到网页位置模拟点击的方法

在使用Selenium写自动化爬虫时&#xff0c;遇到验证码是常事了。我在写爬取测试的时候&#xff0c;遇到了点击型的验证码&#xff0c;例如下图这种&#xff1a; 这种看似很简单&#xff0c;但是它居然卡爬虫&#xff1f;用简单的点触验证码的方法来做也没法实现 平常的点触的方…