IGA_PLSM3D的理解1

news2024/11/16 5:47:07

文章目录

  • 前言
  • 一、IgaTop3D_FAST.m给的参数
  • 二、Material properties 材料特性
    • 对Geom_Mod3D的理解
  • 三、IGA准备
    • 对Pre_IGA3D的理解
      • 输出1-----CtrPts:
      • 输出2-----Ele:
      • 输出3-----GauPts:
    • 对Boun_Cond3D的理解
      • 输出1-----DBoudary:
      • 输出2-----F:


前言

只是为方便学习,不做其他用途

一、IgaTop3D_FAST.m给的参数

%老师给的初始参数:IgaTop3D_FAST(32,8,16,[1 1 1],[32 8 16], 1,0.3,1.2);
clear;
% clc;
L = 32;
W = 8;
H = 16;
Order = [1 1 1]; 
Num = [32 8 16];
BoundCon = 1;
Vmax = 0.3;
rmin = 1.2;

二、Material properties 材料特性

path = genpath(pwd);  %系统自带函数 :PWD显示当前工作目录
addpath(path); 
E0 = 1; Emin = 1e-3; nu = 0.3; 
DH=E0*(1-nu)/(1+nu)/(1-2*nu)*...
    [1 nu/(1-nu) nu/(1-nu) 0 0 0;
     nu/(1-nu) 1 nu/(1-nu) 0 0 0; 
     nu/(1-nu) nu/(1-nu) 1 0 0 0;
     0 0 0 (1-2*nu)/2/(1-nu) 0 0;
     0 0 0 0 (1-2*nu)/2/(1-nu) 0;
     0 0 0 0 0 (1-2*nu)/2/(1-nu)];
NURBS = Geom_Mod3D(L, W, H, Order, Num, BoundCon); close all

在这里插入图片描述
path =

D:\Matlab\bin\My_IGA_PLSM3D\my_IGA_PLSM3D_2;
D:\Matlab\bin\My_IGA_PLSM3D\my_IGA_PLSM3D_2\Results;
D:\Matlab\bin\My_IGA_PLSM3D\my_IGA_PLSM3D_2\nurbs1.3.13;
D:\Matlab\bin\My_IGA_PLSM3D\my_IGA_PLSM3D_2\nurbs1.3.13\inst;
D:\Matlab\bin\My_IGA_PLSM3D\my_IGA_PLSM3D_2\nurbs-1.3.13\src;

对Geom_Mod3D的理解

在这里插入图片描述

function NURBS = Geom_Mod3D(L, W, H, Order, Num, BoundCon)
switch BoundCon
    case {1, 2, 3}
        knots{1} = [0 0 1 1]; knots{2} = [0 0 1 1]; knots{3} = [0 0 1 1];
        ControlPts(:,:,1,1) = [0 L; 0 0; 0 0; 1 1]; % 下边界:[控制点的X坐标排序;控制点Y坐标排序;控制点Z坐标排序;加权参数坐标排序]
        ControlPts(:,:,2,1) = [0 L; W W; 0 0; 1 1]; % 上边界:。。。。。
        ControlPts(:,:,1,2) = [0 L; 0 0; H H; 1 1];
        ControlPts(:,:,2,2) = [0 L; W W; H H; 1 1];
    case 4
        knots{1} = [0 0 0.5 1 1]; knots{2} = [0 0 1 1];
        ControlPts(:,:,1) = [0 0 L; L 0 0; 0 0 0; 1 1 1];
        ControlPts(:,:,2) = [W W L; L W W; 0 0 0; 1 1 1];
    case 5
        W = W/2;
        knots{1} = [0 0 0 1 1 1]; knots{2} = [0 0 1 1];
        ControlPts(:,:,1) = [0 W W; W W 0; 0 0 0; 1 sqrt(2)/2 1]; % 内边界:[控制点1的x,y,z方向坐标;控制点2的xyz坐标,控制点3的xyz坐标]
        ControlPts(:,:,2) = [0 L L; L L 0; 0 0 0; 1 sqrt(2)/2 1]; % 外边界:。。。。。。。。。。。。。。。
end
coefs = zeros(size(ControlPts));
coefs(1,:,:,:) = ControlPts(1,:,:,:).*ControlPts(4,:,:,:);
coefs(2,:,:,:) = ControlPts(2,:,:,:).*ControlPts(4,:,:,:);
coefs(3,:,:,:) = ControlPts(3,:,:,:).*ControlPts(4,:,:,:);
coefs(4,:,:,:) = ControlPts(4,:,:,:);
NURBS = nrbmak(coefs, knots); % 构造NURBS数据结构
NURBS = nrbdegelev(NURBS,Order); % 升阶
nrbplot(NURBS,[Num(1)-1 Num(2)-1 Num(3)-1]); %  ,'light','on') % 绘制设计域几何
iknot_u = linspace(0,1,Num(1)); iknot_v = linspace(0,1,Num(2)); iknot_w = linspace(0,1,Num(3));
NURBS = nrbkntins(NURBS,{setdiff(iknot_u,NURBS.knots{1}),setdiff(iknot_v,NURBS.knots{2}),setdiff(iknot_w,NURBS.knots{3})}); % 插入knots
end

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
运行完Geom_Mod3D函数后得到一个NURBS体:

在这里插入图片描述

三、IGA准备

%% Preparation for IGA      IGA准备
[CtrPts, Ele, GauPts] = Pre_IGA3D(NURBS); %NURBS实体的控制点信息、单元信息、对应的参数空间中高斯点的信息
Dim = numel(NURBS.order); Dofs.Num = Dim*CtrPts.Num;%Dofs.Num总的自由度 3*140 = 420
[DBoudary, F] = Boun_Cond3D(CtrPts, BoundCon, NURBS, Dofs.Num);

对Pre_IGA3D的理解

在这里插入图片描述

function [CtrPts, Ele, GauPts] = Pre_IGA3D(NURBS)
%% 注释
%{
  目标:生成NURBS实体
------------------------------------------------------------------------------------------------------------------------
 Input:
         NURBS   ----------  初步生成的NURBS实体
 Output:
        CtrPts   ----------  NURBS实体的控制点信息
        Ele      ----------  NURBS实体的单元信息
        GauPts   ----------  NURBS实体对应的参数空间中高斯点的信息
------------------------------------------------------------------------------------------------------------------------------
 注:以IgaTop3D_FAST(32,8,16,[1 1 1],[6 4 3], 1,0.3,1.2);为例
        CtrPts结构体:
            CtrPts.Cordis ----------      控制点坐标  4*140
            CtrPts.Num    ----------      控制点总数  140      
            CtrPts.NumU   ----------      U方向控制点个数 7              
            CtrPts.NumV   ----------      V方向控制点个数 5               
            CtrPts.Seque  ----------      三个方向控制点对应生成的序列  7*5*4  
        Ele结构体:
            CtrPts.NumU/V/W  ----------   分别表示三个方向的区间个数(单元个数)
            Ele.Num          ----------   单元总数
            Ele.KnotsU/V/W   ----------   分别表示三个方向去掉重节点的节点向量
            Ele.CtrPtsNum    ----------   单元上的控制点个数
            Ele.CtrPtsCon    ----------   单元信息---每个单元包含的全局节点编号
        GauPts结构体:
            GauPts.Weigh     ----------  一个单元(3D)上27个控制点在 标准区间[-1,1] 上的高斯权重
            GauPts.QuaPts    ----------  一个单元(3D)上27个控制点在 标准区间[-1,1] 上的高斯点
            GauPts.Num       ----------  单元个数*高斯点个数 30*27=810
            GauPts.Seque     ----------  将GauPts.Num排序---没有理解
            GauPts.CorU/V/W  ----------  标准高斯单元[-1,1]变换到单元对应的参数域对应生成的高斯点              
 -----------------------------------------------------------------------------------------------------------------------------
 - 孟伟, 大连理工大学
 - 1475207248@qq.com / mw21933005@mail.dlut.edu.cn
------------------------------------------------------------------------------------------------------------------------------
%}
%% 将节点向量的重节点去掉
Knots.U = unique(NURBS.knots{1})';%unique() 将重节点保留一个
Knots.V = unique(NURBS.knots{2})';
Knots.W = unique(NURBS.knots{3})';
%% 控制点的信息,包括 笛卡尔坐标、坐标个数、对应生成的序列
CtrPts.Cordis = NURBS.coefs(:,:);%将NURBS的控制点转化成一个4*140行的向量
CtrPts.Cordis(1,:) = CtrPts.Cordis(1,:)./CtrPts.Cordis(4,:);   % 控制点的 X 笛卡尔坐标;
CtrPts.Cordis(2,:) = CtrPts.Cordis(2,:)./CtrPts.Cordis(4,:);   % 控制点的 Y 笛卡尔坐标;
CtrPts.Cordis(3,:) = CtrPts.Cordis(3,:)./CtrPts.Cordis(4,:);   % 控制点的 Z 笛卡尔坐标;
CtrPts.Num = prod(NURBS.number);                               % 控制点或基函数的总数
CtrPts.NumU = NURBS.number(1);                                 % U方向的控制点或基函数的总数
CtrPts.NumV = NURBS.number(2);                                 % V方向的控制点或基函数的总数
CtrPts.NumW = NURBS.number(3);
CtrPts.Seque = reshape(1:CtrPts.Num,CtrPts.NumU,CtrPts.NumV,CtrPts.NumW);
%% 参数空间中单元(节点区间)的信息,包括单元个数、单元对应生成的序列
Ele.NumU = numel(unique(NURBS.knots{1}))-1;                    % 第一参数(U)方向的单元个数
Ele.NumV = numel(unique(NURBS.knots{2}))-1;                    % 第二参数(V)方向的单元个数
Ele.NumW = numel(unique(NURBS.knots{3}))-1;
Ele.Num = Ele.NumU*Ele.NumV*Ele.NumW;                          % 单元总数
Ele.Seque = reshape(1:Ele.Num, Ele.NumU, Ele.NumV, Ele.NumW);
Ele.KnotsU = [Knots.U(1:end-1) Knots.U(2:end)];                % 元素在第一参数方向上的唯一节点---不太理解为什么这样分
Ele.KnotsV = [Knots.V(1:end-1) Knots.V(2:end)];                % 元素在第二参数方向上的唯一节点---不过会在划分单元信息的时候用到
Ele.KnotsW = [Knots.W(1:end-1) Knots.W(2:end)];
Ele.CtrPtsNum = prod(NURBS.order);
Ele.CtrPtsNumU = NURBS.order(1); Ele.CtrPtsNumV = NURBS.order(2); Ele.CtrPtsNumW = NURBS.order(3);
[~, Ele.CtrPtsCon] = nrbbasisfun({(sum(Ele.KnotsU,2)./2)', (sum(Ele.KnotsV,2)./2)', (sum(Ele.KnotsW,2)./2)'}, NURBS);
% Ele.CtrPtsCon: 单元信息---每个单元包含的全局节点编号
% [B, id] = nrbbasisfun (points, nrb) ----自己感觉 id表示控制点的全局编号  具体原理不理解
%% 参数空间中高斯正交点的信息
[GauPts.Weigh, GauPts.QuaPts] = Guadrature3D(3, numel(NURBS.order));
%[GauPts.Weigh, GauPts.QuaPts]:  一个单元(3D)上27个控制点的  标准区间[-1,1] 上的高斯权重和高斯点
Ele.GauPtsNum = numel(GauPts.Weigh);  %高斯点个数   numel(A):表示A中矩阵元素总数   A的行数 * A的列数
GauPts.Num = Ele.Num*Ele.GauPtsNum;
GauPts.Seque = reshape(1:GauPts.Num,Ele.GauPtsNum,Ele.Num)';
GauPts.CorU = zeros(Ele.Num,Ele.GauPtsNum); % GauPts.CorU矩阵大小: 单元数*高斯点个数
GauPts.CorV = zeros(Ele.Num,Ele.GauPtsNum); % 第i行,表示 变换到单元对应的参数域   对应生成的高斯点
GauPts.CorW = zeros(Ele.Num,Ele.GauPtsNum);
for ide = 1:Ele.Num  % ide:第ide个单元
    idw = ceil(ide/Ele.NumU/Ele.NumV);
    idv = ceil((ide - (idw-1)*Ele.NumU*Ele.NumV)/Ele.NumU);
    idu = ide - (idw-1)*Ele.NumU*Ele.NumV - (idv-1)*Ele.NumU;
%     [idv, idu] = find(Ele.Seque == ide);                       % The two idices in two parametric directions for an element
    Ele_Knot_U = Ele.KnotsU(idu,:);                            % The knot span in the first parametric direction for an element
    Ele_Knot_V = Ele.KnotsV(idv,:);                            % The knot span in the second parametric direction for an element
    Ele_Knot_W = Ele.KnotsW(idw,:);
    for i = 1:Ele.GauPtsNum
        GauPts.CorU(ide,i) = ((Ele_Knot_U(2)-Ele_Knot_U(1)).*GauPts.QuaPts(i,1) + (Ele_Knot_U(2)+Ele_Knot_U(1)))/2;%单元上的高斯点
        GauPts.CorV(ide,i) = ((Ele_Knot_V(2)-Ele_Knot_V(1)).*GauPts.QuaPts(i,2) + (Ele_Knot_V(2)+Ele_Knot_V(1)))/2;
        GauPts.CorW(ide,i) = ((Ele_Knot_W(2)-Ele_Knot_W(1)).*GauPts.QuaPts(i,3) + (Ele_Knot_W(2)+Ele_Knot_W(1)))/2;
    end
end
end

输出1-----CtrPts:

在这里插入图片描述

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

对CtrPts.Seque的理解:

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

在这里插入图片描述

%% 将节点向量的重节点去掉
Knots.U = unique(NURBS.knots{1})';%unique() 将重节点保留一个
Knots.V = unique(NURBS.knots{2})';
Knots.W = unique(NURBS.knots{3})';
%% 控制点的信息,包括 笛卡尔坐标、坐标个数、对应生成的序列
CtrPts.Cordis = NURBS.coefs(:,:);%将NURBS的控制点转化成一个4*140行的向量
CtrPts.Cordis(1,:) = CtrPts.Cordis(1,:)./CtrPts.Cordis(4,:);   % 控制点的 X 笛卡尔坐标;
CtrPts.Cordis(2,:) = CtrPts.Cordis(2,:)./CtrPts.Cordis(4,:);   % 控制点的 Y 笛卡尔坐标;
CtrPts.Cordis(3,:) = CtrPts.Cordis(3,:)./CtrPts.Cordis(4,:);   % 控制点的 Z 笛卡尔坐标;
CtrPts.Num = prod(NURBS.number);                               % 控制点或基函数的总数
CtrPts.NumU = NURBS.number(1);                                 % U方向的控制点或基函数的总数
CtrPts.NumV = NURBS.number(2);                                 % V方向的控制点或基函数的总数
CtrPts.NumW = NURBS.number(3);
CtrPts.Seque = reshape(1:CtrPts.Num,CtrPts.NumU,CtrPts.NumV,CtrPts.NumW);

在这里插入图片描述

输出2-----Ele:

%% 参数空间中单元(节点区间)的信息,包括单元个数、单元对应生成的序列
Ele.NumU = numel(unique(NURBS.knots{1}))-1;                    % 第一参数(U)方向的单元个数
Ele.NumV = numel(unique(NURBS.knots{2}))-1;                    % 第二参数(V)方向的单元个数
Ele.NumW = numel(unique(NURBS.knots{3}))-1;
Ele.Num = Ele.NumU*Ele.NumV*Ele.NumW;                          % 单元总数
Ele.Seque = reshape(1:Ele.Num, Ele.NumU, Ele.NumV, Ele.NumW);
Ele.KnotsU = [Knots.U(1:end-1) Knots.U(2:end)];                % 元素在第一参数方向上的唯一节点---不太理解为什么这样分
Ele.KnotsV = [Knots.V(1:end-1) Knots.V(2:end)];                % 元素在第二参数方向上的唯一节点---不过会在划分单元信息的时候用到
Ele.KnotsW = [Knots.W(1:end-1) Knots.W(2:end)];
Ele.CtrPtsNum = prod(NURBS.order);
Ele.CtrPtsNumU = NURBS.order(1); Ele.CtrPtsNumV = NURBS.order(2); Ele.CtrPtsNumW = NURBS.order(3);
[~, Ele.CtrPtsCon] = nrbbasisfun({(sum(Ele.KnotsU,2)./2)', (sum(Ele.KnotsV,2)./2)', (sum(Ele.KnotsW,2)./2)'}, NURBS);
% Ele.CtrPtsCon: 单元信息---每个单元包含的全局节点编号
% [B, id] = nrbbasisfun (points, nrb) ----自己感觉 id表示控制点的全局编号  具体原理不理解

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

输出3-----GauPts:

在这里插入图片描述

%% 参数空间中高斯正交点的信息
[GauPts.Weigh, GauPts.QuaPts] = Guadrature3D(3, numel(NURBS.order));
%[GauPts.Weigh, GauPts.QuaPts]:  一个单元(3D)上27个控制点的  标准区间[-1,1] 上的高斯权重和高斯点
Ele.GauPtsNum = numel(GauPts.Weigh);  %高斯点个数   numel(A):表示A中矩阵元素总数   A的行数 * A的列数
GauPts.Num = Ele.Num*Ele.GauPtsNum;
GauPts.Seque = reshape(1:GauPts.Num,Ele.GauPtsNum,Ele.Num)';
GauPts.CorU = zeros(Ele.Num,Ele.GauPtsNum); % GauPts.CorU矩阵大小: 单元数*高斯点个数
GauPts.CorV = zeros(Ele.Num,Ele.GauPtsNum); % 第i行,表示 变换到单元对应的参数域   对应生成的高斯点
GauPts.CorW = zeros(Ele.Num,Ele.GauPtsNum);
for ide = 1:Ele.Num  % ide:第ide个单元
    idw = ceil(ide/Ele.NumU/Ele.NumV);
    idv = ceil((ide - (idw-1)*Ele.NumU*Ele.NumV)/Ele.NumU);
    idu = ide - (idw-1)*Ele.NumU*Ele.NumV - (idv-1)*Ele.NumU;
%     [idv, idu] = find(Ele.Seque == ide);                       % The two idices in two parametric directions for an element
    Ele_Knot_U = Ele.KnotsU(idu,:);                            % The knot span in the first parametric direction for an element
    Ele_Knot_V = Ele.KnotsV(idv,:);                            % The knot span in the second parametric direction for an element
    Ele_Knot_W = Ele.KnotsW(idw,:);
    for i = 1:Ele.GauPtsNum
        GauPts.CorU(ide,i) = ((Ele_Knot_U(2)-Ele_Knot_U(1)).*GauPts.QuaPts(i,1) + (Ele_Knot_U(2)+Ele_Knot_U(1)))/2;%单元上的高斯点
        GauPts.CorV(ide,i) = ((Ele_Knot_V(2)-Ele_Knot_V(1)).*GauPts.QuaPts(i,2) + (Ele_Knot_V(2)+Ele_Knot_V(1)))/2;
        GauPts.CorW(ide,i) = ((Ele_Knot_W(2)-Ele_Knot_W(1)).*GauPts.QuaPts(i,3) + (Ele_Knot_W(2)+Ele_Knot_W(1)))/2;
    end
end

在这里插入图片描述

对Boun_Cond3D的理解

function [DBoudary, F] = Boun_Cond3D(CtrPts, BoundCon, NURBS, Dofs_Num)
%% 注释
%{
  目标:边界条件的处理
------------------------------------------------------------------------------------------------------------------------
 Input:
         CtrPts     ----------  一个结构体:经过Pre_IGA3D处理的NURBS实体的控制点信息
         BoundCon   ----------  边界条件的选择
         NURBS      ----------  NURBS实体信息
         Dofs_Num   ----------  总的自由度:控制点数*3
 Output:
         DBoudary   ----------  Dirichlet边界处理后 得到的 对应控制点全局编号
             F      ----------  应该是等效节点力吧           
 -----------------------------------------------------------------------------------------------------------------------------
 - 孟伟, 大连理工大学
 - 1475207248@qq.com / mw21933005@mail.dlut.edu.cn
------------------------------------------------------------------------------------------------------------------------------
%}

%% boundary conditions
switch BoundCon
    case 1 % Cantilever beam  悬臂梁
        DBoudary.CtrPtsOrd = CtrPts.Seque(1,:,:);            % Dirichlet boundary conditions
        load.u = 1; load.v = 0.5; load.w = 0.5;              % 为什么这样取值
        [N, id] = nrbbasisfun([load.u; load.v; load.w], NURBS);
        NBoudary.CtrPtsOrd = id'; NBoudary.N = N;            % Neumann boundary conditions
    case 2 % MBB beam
        DBoudary.CtrPtsOrd1 = CtrPts.Seque(1,1); DBoudary.CtrPtsOrd2 = CtrPts.Seque(1,end);
        load.u = 0.5; load.v = 1;
        [N, id] = nrbbasisfun([load.u; load.v], NURBS);
        NBoudary.CtrPtsOrd = id'; NBoudary.N = N;
    case 3 % Michell-type structure
        DBoudary.CtrPtsOrd1 = CtrPts.Seque(1,1); DBoudary.CtrPtsOrd2 = CtrPts.Seque(1,end);
        load.u = 0.5; load.v = 0;
        [N, id] = nrbbasisfun([load.u; load.v], NURBS);
        NBoudary.CtrPtsOrd = id'; NBoudary.N = N;
    case 4 % L beam
        DBoudary.CtrPtsOrd = CtrPts.Seque(:,1);
        load.u = 1; load.v = 1;
        [N, id] = nrbbasisfun([load.u; load.v], NURBS);
        NBoudary.CtrPtsOrd = id'; NBoudary.N = N;
    case 5 % A quarter annulus
        DBoudary.CtrPtsOrd = CtrPts.Seque(:,end);
        load.u = 0; load.v = 1;
        [N, id] = nrbbasisfun([load.u; load.v], NURBS);
        NBoudary.CtrPtsOrd = id'; NBoudary.N = N;
end
%% the force imposed on the structure  施加在结构上的力---待理解
F = zeros(Dofs_Num,1);
switch BoundCon
    case {1,2,3,4}
        F(NBoudary.CtrPtsOrd+CtrPts.Num*2) = -1*NBoudary.N;
    case 5
        F(NBoudary.CtrPtsOrd) = -1*NBoudary.N;
end
end

输出1-----DBoudary:

    case 1 % Cantilever beam  悬臂梁
        DBoudary.CtrPtsOrd = CtrPts.Seque(1,:,:);            % Dirichlet boundary conditions
        load.u = 1; load.v = 0.5; load.w = 0.5;
        [N, id] = nrbbasisfun([load.u; load.v; load.w], NURBS);
        NBoudary.CtrPtsOrd = id'; NBoudary.N = N;          % Neumann boundary conditions

DBoudary.CtrPtsOrd
在这里插入图片描述

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

输出2-----F:

%% the force imposed on the structure  施加在结构上的力---待理解
F = zeros(Dofs_Num,1);
switch BoundCon
    case {1,2,3,4}
        F(NBoudary.CtrPtsOrd+CtrPts.Num*2) = -1*NBoudary.N;
    case 5
        F(NBoudary.CtrPtsOrd) = -1*NBoudary.N;
end

在这里插入图片描述

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

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

相关文章

Java入坑之类的派生与继承

一、继承 1.1继承的概念 Java中的继承:子类就是享有父类的属性和方法,并且还存在一定的属性和方法的扩展。 Subclass,从另一个类派生出的类,称为子类(派生类,扩展类等) Superclass,派生子类的类&#xff…

PC主流同步软件评测

因为一个要把超过13G的众多零散文件同步到webdav网盘的需求,将市面上一些知名的同步软件试用测试了一番,最终发现只有Syncovery满足需求 先把参与测试的同步软件列一下: GoodSync、FreeFileSync、微软SyncToy、KLS Backup、SecondCopy、Sma…

coreboot seabios

seabios现在是很多虚拟机的默认启动bios,这跟它的短小精干有很大关系,也跟它提供比较完备的legacy支持有关。 按照以下步骤把seabios制作成coreboot的payload, 下载seabios代码, http://code.coreboot.org/p/seabios/downloads…

学生成绩管理系统【GUI/Swing+MySQL】(Java课设)

系统类型 Swing窗口类型Mysql数据库存储数据 使用范围 适合作为Java课设!!! 部署环境 jdk1.8Mysql8.0Idea或eclipsejdbc 运行效果 本系统源码地址:https://download.csdn.net/download/qq_50954361/87700420 更多系统资源库…

【Cpython的GIL详细了解一下?】

简单解释 全局解释器锁(Global Interpreter Lock,简称 GIL)是 CPython 解释器内部的一个同步原语,它用于在同一时间只允许一个线程执行 Python 字节码。 GIL 的工作原理如下: 在 CPython 中,每个线程都需…

systemctl 命令设置开机自启动失败

1.案例现象 我在 3 月 31日的时候发表了一篇《shell 脚本之一键部署安装 Nginx 》,介绍了如何通过 shell 脚本一键安装 Nginx 我脚本中执行了 Nginx 开机自启动的命令,当我使用 systemctl status nginx 命令复核的时候,我发现 Nginx 服务设…

C# NetCore XML 反序列化解析错误:<xml xmlns=‘‘> was not expected 及 Encoding=utf-16问题

xml帮助类在最后 刚好有业务需要解析xml文件&#xff0c;于是找到帮助类代码开始尝试解析文件&#xff0c;总是出现异常&#xff1a;<xml xmlnsxxxxxxxxxxxxxxxx> was not expected&#xff0c;开始寻找解决方案&#xff1a; 要使结果正确&#xff0c;必须满足两个条件…

【Qt】QString与QChar的源码学习及二者与Unicode的关系【2023.04.20】

简介 关于QString乱码的一些补充。主要就两点&#xff0c;QChar、QString底层存储的字符都是16进制的Unicode编码。 QChar QChar对应16位的Unicode字符集。 The QChar class provides a 16-bit Unicode character. In Qt, Unicode characters are 16-bit entities without an…

Redis RDB 和 AOF原理讲解

redis提供了两种持久化方式。 aof&#xff08;APPEND ON FILE&#xff09;持久化&#xff1a;原理是将redis的操作以命令的方式写入aof文件中&#xff0c;追加。 rdb&#xff08;Redis DataBase&#xff09;内存快照持久化&#xff0c;就是将redis的内存中的数据全量拷贝一份存…

【C++STL精讲】stack与queue的基本使用及模拟实现

文章目录 &#x1f490;专栏导读&#x1f490;文章导读&#x1f337;stack是什么&#xff1f;&#x1f337;stack的基本使用&#x1f337;stack的模拟实现&#x1f337;queue是什么&#xff1f;&#x1f337;queue的基本使用&#x1f337;queue的模拟实现 &#x1f490;专栏导读…

Python基础实战2-Python安装

安装简介 电脑系统&#xff1a;Windwos 10 安装的Python版本&#xff1a;3.7.8 安装Python环境 安装运行Python程序的工具&#xff0c;也称位Python解释器。 初学者可以安装anaconda&#xff0c;里面自带500常用库。 第一步&#xff0c;下载Python 可以在Python官方网站…

mockjs基础及项目使用

Mock介绍 Mock.js 是一款模拟数据生成器&#xff0c;旨在帮助前端攻城师独立于后端进行开发&#xff0c;帮助编写单元测试。提供了以下模拟功能&#xff1a; 1. 根据数据模板生成模拟数据 2. 模拟 Ajax 请求&#xff0c;生成并返回模拟数据 3. 基于 HTML 模板生成模拟数据 以上…

网络安全之ATP

目录 APT 定义 特点 目的 APT攻击的生命周期 阶段一 --- 扫描探测 阶段二 --- 工具投送 阶段三 ---漏洞利用 阶段四 --- 木马植入 阶段五 --- 远程控制 阶段六 --- 横向渗透 阶段七 --- 目标行动 防御APT 最佳有效办法 --- 沙箱技术 沙箱技术 针对APT攻击的防御…

归并排序的递归实现

归并排序是一种比较排序&#xff0c;通过分治法思想来进行实现的&#xff0c;其基本思想是&#xff1a; 将已有序的子序列合并&#xff0c;得到完全有序的序列&#xff0c;即先使每个子序列有序&#xff0c;再使子序列段间有序。 若将两个有序表合并成一个有序表&#xff0c;称…

【轻松开发微信小程序】实现用户增删改查功能

文章目录 前言创建微信小程序项目创建项目目录结构编写首页页面编写编辑页面实现增删改查功能展示最终效果总结写在最后 前言 上一篇博客中我们学习了什么是小程序以及开发一个小程序的具体步骤。 在本篇博客中&#xff0c;我们来开发一个用户列表增删改查功能的完整流程&…

【UE】UE5 学习笔记

UE5 学习笔记&#xff08;持续更新中&#xff09; 界面 快捷键 快捷键描述F定位关一卡对象:双击游戏对象名字或选游戏对象名字鼠标中键移动视野alt鼠标左键移旋转视野滑动鼠标滚轮缩放视野alt鼠标右键拖动鼠标缩放视野鼠标左键移动鼠标前后漫游WASD鼠标右键自由漫游漫游时滑…

【vue】插件集合

一、复制粘贴vue-clipboard2 1、安装vue-clipboard2 npm install ue-clipboard2 2、main.js引入插件 // 复制 import VueClipboard from vue-clipboard2 Vue.use(VueClipboard) 3、页面使用 <el-buttonsize"mini"type"text"ref"copyButton&q…

JAVAWeb06-动态WEB开发核心Servlet-02-ServletConfig/Context

1. ServletConfig 1.1 ServletConfig 基本介绍 ServletConfig 类是为 Servlet 程序的配置信息的类Servlet 程序和 ServletConfig 对象都是由 Tomcat 负责创建Servlet 程序默认是第 1 次访问的时候创建&#xff0c;ServletConfig 在 Servlet 程序创建时&#xff0c;就创建一个…

thinkphp5 线上部署后view-source:可以看到源码,但是http显示空白页面的原因及解决方法汇总

本篇文章主要讲解:thinkphp5 项目线上部署后view-source:可以看到源码,但是http显示空白页面的原因及解决方法教程 作者:任聪聪 日期:2023年4月17日 thinkphp版本5.1 现象说明: 线下测试环境,显示可以看到界面 部署到线上配置完毕后发现页面空白 在php中写入echo 1232…

pytorch进阶学习(七):神经网络模型验证过程中混淆矩阵、召回率、精准率、ROC曲线等指标的绘制与代码

参考笔记 【机器学习】五分钟搞懂如何评价二分类模型&#xff01;混淆矩阵、召回率、精确率、准确率超简单解释&#xff0c;入门必看&#xff01;_哔哩哔哩_bilibili 混淆矩阵的概念_GIS_JH的博客-CSDN博客 机器学习中的混淆矩阵&#xff0c;准确率&#xff0c;精确率&#…