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

数学建模之Matlab基础操作

作者由于后续课程也要学习Matlab,并且之前也进行了一些数学建模的练习(虽然是论文手),所以花了几天零碎时间学习Matlab的基础操作,特此整理。


基本运算

a=5+5 %加法,同理减法
b=2^3  %立方
c=5*2 %乘法
x = 1; %分号用于不显示,这样在命令行窗口就没有任何输出
y = x + 5
eps %浮点数的相对误差
1i^2 %虚数
pi 

1.原来;不是可有可无的,只要写上;就代表在命令行窗口中不产生输出

2.虚数也可以是ly


变量和向量

%% 变量
% 输入,如果输入的不是正确格式,则继续接收,直到格式正确
x=input('请输入数字:');
y=x*2% 数据显示格式
% 修改数据显示格式
format long ,pi % 可以修改为小数点后16位
format  short ,pi % 默认short formal,四个小数位
% 定义时指定数据显示格式
format short %直接声明为短型
a=3.1415926a=5
b=2
a>b %大于
a==b %等于
a<b %小于
% 如果为真,则返回1,否则返回0
%% 向量
% 冒号创建,开始:步长:结尾
x=2:2:10% linspace函数创建线性间隔变量,(开始,结束,元素个数)
y=linspace(1,20,10)a=[1 2 3 4 5]; % 一行矩阵,可以看成是向量的一部分
b=[6 7 8 9 10];
c=a.*b % 加上. 就表示元素之间的运算
sum(c) % 将c向量的所有元素求和d=dot(a,b) % 使用dot函数对两个向量进行点积,就是x1y1+x2y2……+xnyn这个和的结果a=[1 2 3 ];
b=[6 7 8 ];
c=cross(a,b) % 三维向量的交叉积,右手法则从a到b就是c的方向pause %用于暂停指令,下面的指令暂时不会执行

 其中,y=linspace()是一个较为常见的创建线性变量的方法。


矩阵

基础的不讲,首先是矩阵。

%% 矩阵
A=[1 2 3; 4 5 2; 3 2 7]
A=[1 2 3 4 5 2 3 2 7]
B=A' %把A进行转置,行变列,列变行
C=A(:) %从左到右,从上到下,竖向展示矩阵的内容

多种矩阵定义中,作者感觉第二种较为常见,层次很分明。很少见到A(:)展示,A‘注意是转置

D=inv(A) %求矩阵的逆矩阵,注意,只有非奇异矩阵(行列式值不为0)才能求逆矩阵
A*D %A乘A的逆,就是单位矩阵E

注意:inv(A)是逆矩阵,非常常见。并且一定要注意的是,只有非奇异矩阵(即对应行列式不为0)才能有逆矩阵!那么,如何才能快速求得某一个方阵对应行列式值呢?方法如下:

det_A = det(A)
F=[1,2,3;4,5,6;7,8,9]
det_F = det(F) %在实际的数值计算中,由于浮点数的表示和计算误差,得到一个非常接近于0的行列式是可能的。

对于上文的A矩阵,可以得到det_A=-34,很明显不为0;对于新建的F矩阵,可以得到det_F为:

这……这已经很接近于0了,那它到底等不等于0啊?

原来,在实际的数值计算中,由于浮点数的表示和计算误差,得到一个非常接近于0的行列式是可能的。通常使用一些容差值来决定是否将计算出的行列式值视为0,本质上就相当于设置一段趋近于0的区间,只要行列式结果位于这个区间,就认为求得的行列式值为0,即对应方阵为奇异矩阵,没有逆矩阵。

tol = 1e-10;
if abs(det_F) < toldisp('F 是奇异矩阵');
elsedisp('F 不是奇异矩阵');
end

后续可以考虑封装为函数,通过这个流程,我们就可以对F矩阵是否能求逆矩阵进行判断:

然后是创建随机矩阵,作者目前这几天还没遇到过使用它的情况:

E=zeros(10,5,3) %创建一个10行5列3维的全0矩阵,原来3表示3维%%伪随机数(伪随机矩阵生成)
E(:,:,1) = rand(10,5) %rand(m,n)生成m行n列的均匀分布的伪随机数矩阵
%rand(m,n,‘double’)生成指定精度的均匀分布的伪随机数,参数还可以是’single’,默认情况下rand生成的全是整数randi(10) %开区间0~10,貌似只能生成整数E(:,:,2) = randi(5,10,5) %参数1界定最大范围。
E(:,:,2) = randi([1,6],10,5) %参数1也可以用两个数表示一个区间

另外补充一些矩阵的常见使用:

A = [1,2,3,4,5,6,5,4,6] % 没有;分割,就是一整行
B = 1:2:9 %第二个参数为步长,不可缺省,1 3 5 7 9 
B = 1:3:9 % 1 4 7
C = repmat(B,3,2) %以B矩阵为元素,生成3行2列的新的矩阵
D = ones(2,4) %生成一个2行4列的全1矩阵

其实通过B=1:9来获得行向量,还是较为常见的。作者在后续定义初始路径时,使用的就是这样的定义方法。zeros(2,3)或者ones(2,3)都是一种类型,使用固定的常量定义矩阵。

然后就是矩阵及其元素的四则运算,普通的*对应的就是矩阵的乘法,若使用.*或者./,那么涉及到的就是矩阵对应元素之间的运算了(别忘了矩阵相加减是矩阵元素相加减哦!):

% 矩阵及其元素的四则运算
A = [1 2 3 4; 5 6 7 8]
B = [1 1 2 2; 2 2 1 1]
C = A + B
D = A - B
E = A * B' %注意这个是‘转置
F = A .* B % .*表示对应元素相乘,不是矩阵的乘法
G = A / B % 相当于A*B的逆,逆矩阵是inv(B)
G = A \ B % 相当于B*A的逆
H = A ./ B % ./表示对应项相除

在实际操作过程中,矩阵转置对于初学者实在是不好区分,明明正确表述就是B^T,Matlab非要写成逆矩阵B'的形式……初学者们一定要注意哈!逆矩阵是inv()函数得到的,即inverse matrix。

% 矩阵的下标
A = magic(5)
% magic幻阵:数字是从1到n^2 的整数,并且每一行、每一列以及主对角线和副对角线上的数字之和都相等。
% 幻阵常用于密码学、设计与艺术、数学研究和解决某些优化和排列问题
B = A(2,3) %取矩阵二行三列元素值
C = A(3,:) % :为取全部,那么这条语句表示取第三行
D = A(:,4) %取第四列
[m,n] = find(A > 20) %找到大于20的序号值/矩阵
%取的是索引值,n是行,m是列

这里取元素值蛮重要,A(2,3)就是取矩阵A二行三列的元素,:表示全部,相当于占位符*。


元胞数组

Matlab的元胞数组(cell array)是一种特殊的数组类型,它可以容纳不同类型和大小的数据。与常规数组不同,每个元胞可以包含任何类型的数据。

{ }法

C = {'text', [1, 2, 3], 5}; %这里,C 是一个包含三个元胞的元胞数组。
% 第一个元胞包含一个字符串,第二个元胞包含一个向量,第三个元胞包含一个标量。C{1} % 返回 'text'
C{2} % 返回 [1, 2, 3]
C{3} % 返回 5
C{1} = 'new text'; % 修改第一个元胞的内容

通过{ }创建元胞数组,比较简单,推荐使用。调用元素时注意一定不是平常数组的()方法,而是同样需要{ }进行元素调用。可以对元胞数组进行简单的函数操作(简单看看就行):

% 使用 cellfun 函数来对每个元胞应用函数
result = cellfun(@length, C); % 返回每个元胞的长度:8,3,1% 可以使用 cellfun 和匿名函数来计算每个向量的和:
C = {[1, 2, 3], [4, 5], [6, 7, 8, 9]};
sums = cellfun(@(x) sum(x), C); %sums 是一个数组,其中包含 C 中每个向量的和。%使用循环来操作元胞数组的内容,显示 C 的每个元胞的内容。
for i = 1:length(C)disp(C{i});
end

cell( )法

%% 元胞数组2
A = cell(1,6) %这行代码创建了一个1行6列的空元胞数组A。
A{2} = eye(3) %将一个3x3的单位矩阵赋值给A的第2个元素。
A{5} = magic(5) %将一个5x5的幻方矩阵赋值给A的第5个元素。
B = A{5}

通过cell函数创建的元胞数组,如果数组中的元素比较少,建议使用{ },直接初始化。但是如果元素比较多,那作者认为使用cell先创建空元胞数组应该是更好地办法吧!


结构体

在MATLAB中,结构体(或称为“结构”)是一种数据类型,它允许将多个不同类型的数据组合在一起。结构体中的每个数据项都被称为字段,每个字段都有一个与之相关的字段名。

作者爱用的定义

student.name = '张三';
student.age = 20;
student.grade = '三年级';

就这么简单!定义都不定义,直接加.表示前者就是结构体,后者就是字段。运行结果如下:

对于多个同一类型的结构体(比如不同的班级),可以进行如下定义:

class(1).name = '张三';
class(1).id = '001';
class(1).scores = [95, 88, 76];class(2).name = '李四';
class(2).id = '002';
class(2).scores = [89, 92, 85];

哇去,简直是清晰明了啊!


长得像C语言的定义

books = struct('name',{{'Machine Learning','Data Mining'}},'price',[30,40]) %包含两个字段:name 和 price。
% 为结构体的某个字段分配一个元胞数组,你需要使用双大括号 {{}}。books.name %访问结构体的字段
books.name(1)
books.name{1}

这就有的讲了,上述代码设置books为结构体,其中有两个字段:name 和 price。以一个字段一个值这个顺序定义的,是不是不难理解?

读者可能会发现,这name后面,怎么跟了{{ }}?难道我在学vue在这传递变量了?其实,在结构体定义中,如果要为字段赋元胞数组类型的值,那么这个元胞数组就不能是原本的{ },必须要嵌套两层{{ }}才能表示这是个元胞数组,不信,你看上述代码执行的结果:

name(1)和name{1}有什么不同呢?不是说元胞数组调用元素使用的是{ }吗?不妨我们运行一下:

糟了,要长脑子了:

  1. books.name(1) 返回的是name字段中的第一个元素的单元格,而不是单元格中的实际内容。因此,返回的是一个包含'Machine Learning'1x1元胞数组

  2. books.name{1} 通过使用花括号 {} 来索引元胞数组,可以直接访问单元格中的实际内容。因此,这将返回字符串 'Machine Learning'


扩展

既然结构体中赋值元胞数组需要{{ }},那么作者想,使用{ }给name赋值会出现什么情况呢?

books_single = struct('name',{'Machine Learning','Data Mining'},'price',[30,40])
books_single(1).name
books_single(1).price
books_single(2).name
books_single(2).price

结果:

欸,变成1*2的结构体数组了!这是怎么回事呢?其实,这是matlab的规定,如果是单个{},则表示将{}中的所有元素分别分配给前面的字段name。在上面的例子中,{}的两个值分别赋给name,这就使得struct有两个name,导致整个的struct变成1*2的结构体数组。

可以通过book(1)这样调用第一个结构体,第一个结构体中name被分配第一个值,第二个结构体中name被分配第二个值,此时price的值在两个结构体中是相同的。

如果同时给price分配两个数(和name一样用{}分配),那结果和作者想的不同,作者以为是笛卡尔积一共是1*4结构体数组,没想到还是1*2:

books_single2 = struct('name',{'Machine Learning','Data Mining'},'price',{[30,40],[50,60]})
books_single2(1).name
books_single2(1).price
books_single2(2).name
books_single2(2).price

所以作者认为,单独的{}本质上就是为了方便创建结构体数组的,name参数1和price参数1一起,然后按照顺序,name参数2和price参数2一起构成下一个结构体。那如果再给name增加一个数会发生什么呢?

books_single3 = struct('name',{'Machine Learning','Data Mining','Matlab'},'price',{[30,40],[50,60]})

结果报错啦!name字段是一个长度为3的字符串数组,而price字段是一个长度为2的数组的数组。这两个字段的长度不匹配,导致了错误。只能让两者长度保持一致,或者其中之一为标量值,没有{},如上文的books_single。

% 保证结构体字段长度相同
books_single3 = struct('name',{'Machine Learning','Data Mining','Matlab'},'price',{30,40,50})
books_single3 = struct('name',{'Machine Learning','Data Mining','Matlab'},'price',{{[30,40]},{[50,60]},{[70,80]}})

流程结构

%% 循环结构
sum=0;
for i=1:5sum=sum+1;
end
% 间隔也可以为负数
for a = 1.0: -0.1: 0.0disp(a)
end
% 也可以不是常见的循环结构,可以是数组
for a = [2 3 4 5 6]disp(a)
end
% while循环
i=0;
sum=0;
while(i<10)sum=sum+i;i=i+1;
end
fprintf('累加和为: %d \n', sum);%% 分支结构
if sum==3'成立'
else'不成立'
endswitch sum>0case 1disp('sum大于零');otherwisedisp('sum小于等于0');
end

到时候看看具体算法,看多了就熟悉了。


基本绘图操作

代码来自于CSDN最火的两个matlab教程。

波形函数绘图

%% 基本绘图操作
%1.二维平面绘图
x = 0:0.01:2*pi %定义x的范围,第二个参数表示步长
y = sin(x)
figure %建立一个幕布
plot(x,y) %绘制当前二维平面图
title('y = sin(x)') %标题
xlabel('x') %x轴
ylabel('sin(x)') %y轴
xlim([0 2*pi]) % x坐标值的范围

x = 0:0.01:20;
y1 = 200*exp(-0.05*x).*sin(x);
y2 = 0.8*exp(-0.5*x).*sin(10*x);
figure
[AX,H1,H2] = plotyy(x,y1,x,y2,'plot'); %共用一个x的坐标系,在y上有不同的取值
%设置相应的标签
set(get(AX(1),'Ylabel'),'String','Slow Decay')
set(get(AX(2),'Ylabel'),'String','Fast Decay')
xlabel('Time(\musec)')
title('Multiple Decay Rates')
set(H1,'LineStyle','--')
set(H2,'LineStyle',':')

双峰函数绘图 

%2.三维立体绘图
t = 0: pi/50: 10*pi;
plot3(sin(t),cos(t),t)
xlabel('sin(t)')
ylabel('cos(t)')
zlabel('t')
%hold on
%hold off %不保留当前操作
grid on %把图片绘制出来,在图片中加一些网格线
axis square %使整个图(连同坐标系)呈方体[x,y,z] = peaks(30); %peaks命令用于产生双峰函数或者是用双峰函数绘图
mesh(x,y,z)
grid

散点图

%% 数据可视化——散点图
% x表示年龄,y1表示人体血压。绘制年龄与血压的关系,使用scatter散点图函数
x=[75;78;51;82;77;88;41;78;78;61;71;74;62;81;75;64;80;72;51;80;56;73];
y1=[208;146;168;149;208;102;130;155;163;154;145;147;143;161;145;120;153;158;123;163;177;148];scatter(x,y1)
scatter(x,y1,'r')  %填充颜色绘制为红色% 利用向量配置多彩颜色,每个点的颜色由c确定。
c = linspace(1,10,length(x)); %生成了一个线性间隔的向量c。c的长度与x相同,值从1到10。
scatter(x,y1,[],c) %这些值作为颜色数据传递给scatter函数,使散点具有从一种颜色渐变到另一种颜色的效果。% 填充并标记散点彩色图
sz = 30; % 设置散点的大小为30。
c = linspace(1,10,length(x)); %同样利用向量配置多彩颜色
scatter(x,y1,sz,c,'filled') %填充散点
多彩填充散点图

条形图

%% 数据可视化——条形图
x = {'计算机系统基础','汇编语言','信息安全','机器学习'}; %x个数一定要与y个数对应
y = [94,54,65,87];
%在调用 bar 函数时,MATLAB 不支持直接使用字符串数组作为 x 坐标轴标签。您可以使用类别数组 categorical 来解决这个问题。
x = categorical(x); % 将x转换为类别数组
% bar(x,y)
b = bar(categorical(x), y);
b.FaceColor = [0.5 0.7 1]; % 设置为淡蓝色 (RGB 色值)
xlabel('科目') %经过我的深思熟虑,我认为还是要保证整个图像的完整性,不要仅仅依赖于图题
ylabel('成绩')
title('成绩分布图')


函数

简单说明一下,在MATLAB中,不能在命令窗口中直接定义函数。函数必须保存在一个扩展名为.m的文件中,并且文件名必须与函数名相同。这文件的创建,左上角新建--函数,就会有对应函数模板的文件出现啦:

格式为function 输出形参表 = 函数名(输入形参表)。对于函数,要有以下保证:

1.确保文件已经正确保存,文件名与函数名匹配,且扩展名为.m(例如f.m)。
2.确保函数文件位于当前的MATLAB工作路径中,或者您在调用函数时提供了完整的文件路径。

给个例子:

% function 输出形参表 = 函数名(输入形参表)
function y = funcdemo1(x)
%UNTITLED 此处显示有关此函数的摘要
%   此处显示详细说明
%   x为一个整数
if x>0y=2*x;
elseif x==0y=0;
elsey=x*x;
end
disp(y)
end

到时候调用啊,直接调用funcdemo1(x)就行了:

相关文章:

数学建模之Matlab基础操作

作者由于后续课程也要学习Matlab&#xff0c;并且之前也进行了一些数学建模的练习&#xff08;虽然是论文手&#xff09;&#xff0c;所以花了几天零碎时间学习Matlab的基础操作&#xff0c;特此整理。 基本运算 a55 %加法&#xff0c;同理减法 b2^3 %立方 c5*2 %乘法 x 1; …...

【Nuxt】04 Nuxt2-SEO: sitemap.xml、seo优化、robots.txt

1 SiteMap设置 环境准备 注意生成sitemap依赖于nuxtjs/sitemap&#xff0c;并且需要用axios进行请求&#xff0c;不要使用nuxtjs/axios&#xff0c;不然会报错 sitemap.xml配置 在nuxt.config.js中配置下面的内容 npm install nuxtjs/sitemap npm install axios在static/s…...

VMware VSAN 入门

一、虚拟化的存储 1.1、对于数据中心来说最重要的是数据&#xff0c;而承载数据的设备就是存储设备&#xff08;Storage&#xff09; 1.2、物理服务器的本地存储阵列 与 虚拟化服务器的本地存储阵列 对比 1.3、避免单台服务器故障的虚拟化高级特性&#xff1a;vSphere HA技术 …...

【设计模式】备忘录模式

文章目录 1.备忘录模式定义2.备忘录模式的角色3.备忘录模式实现3.1.场景说明3.2.结构类图3.3.代码实现 4.备忘录模式优缺点5.备忘录模式适用场景6.备忘录模式总结 主页传送门&#xff1a;&#x1f481; 传送 1.备忘录模式定义 备忘录&#xff08;Memento Pattern&#xff09;模…...

vue3+elementUiPlus表格导出功能

1.下载需要的组件包 npm install file-saver xlsx 2.页面中导入 import FileSaver from file-saver import * as XLSX from xlsx; 3.页面中的表格加一个id <el-table :data"tableData" ref"multipleTableRef" style"width…...

专题五:优先级队列

"你了解我&#xff0c;最干净的轮廓&#xff0c; 握住小小风车和放肆的梦~" 堆是一个不错的数据结构&#xff0c;而在计算机中&#xff0c;无法表示二叉分支结构&#xff0c;因此我们经常会看到使用线性表来作为堆的存储容器。在接触堆的时候&#xff0c;我们是把它…...

游戏设计模式专栏(一):工厂方法模式

引言 大家好&#xff0c;我是亿元程序员&#xff0c;一位有着8年游戏行业经验的主程。 本系列是《和8年游戏主程一起学习设计模式》&#xff0c;让糟糕的代码在潜移默化中升华&#xff0c;欢迎大家关注分享收藏订阅。 在游戏开发中&#xff0c;代码的组织和结构对于项目的可…...

element中使用el-steps 进度条效果demo(整理)

<template><div class"margin-top20"><!-- align-center 不要居中就去掉 --><!-- process-status 这几个参数值&#xff1a;改变颜色 wait / process / finish / error / --><!-- active 到第几个是绿色 --><el-steps :space&qu…...

038:mapboxGL 旋转地图(rotateTo)

第038个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+mapbox中旋转地图。 直接复制下面的 vue+mapbox源代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方式示例源代码(共68行)相关API参考:专栏目标示例效果 配置方式 1)查看基础设置:https://xiaozhuan…...

java遇到的问题

java遇到的问题 Tomcat与JDK版本问题 当使用Tomcat10的版本用于springmvc借用浏览器调试时&#xff0c;使用JDK8浏览器会报异常。 需要JDK17&#xff08;可以配置多个JDK环境&#xff0c;切换使用&#xff09;才可以使用&#xff0c;配置为JAVA_HOME路径&#xff0c;否则&a…...

LLM(二)| LIMA:在1k高质量数据上微调LLaMA1-65B,性能超越ChatGPT

本文将介绍在Lit-GPT上使用LoRA微调LLaMA模型&#xff0c;并介绍如何自定义数据集进行微调其他开源LLM 监督指令微调&#xff08;Supervised Instruction Finetuning&#xff09; 什么是监督指令微调&#xff1f;为什么关注它&#xff1f; 目前大部分LLM都是decoder-only&…...

Android AMS——创建Application(七)

与在 App 内部启动一个 Activity 的不同之处在于,点击桌面 Launcher 首次启动一个应用程序的时候,会先去创建一个该应用程序对应的进程,然后执行 ActivityThread 的 main() 方法去创建该应用对应的 Application,然后再去启动首页 Activity。前面已经分析了进程的创建和启动…...

html 边缘融合加载

html 代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>边缘融合加载</title><style>* {margin: 0;padding: 0;box-sizing: border-box;}body {height: 100vh;padding-bottom: 80px;b…...

ElasticSearch - 在 微服务项目 中基于 RabbitMQ 实现 ES 和 MySQL 数据异步同步(考点)

目录 一、数据同步 1.1、什么是数据同步 1.2、解决数据同步面临的问题 1.3、解决办法 1.3.1、同步调用 1.3.2、异步通知&#xff08;推荐&#xff09; 1.3.3、监听 binlog 1.3、基于 RabbitMQ 实现数据同步 1.3.1、需求 1.3.2、在“酒店搜索服务”中 声明 exchange、…...

Springboot+vue的企业人事管理系统(有报告),Javaee项目,springboot vue前后端分离项目。

演示视频: Springbootvue的企业人事管理系统&#xff08;有报告&#xff09;&#xff0c;Javaee项目&#xff0c;springboot vue前后端分离项目。 项目介绍&#xff1a; 本文设计了一个基于Springbootvue的前后端分离的企业人事管理系统&#xff0c;采用M&#xff08;model&am…...

初识Java 11-1 函数式编程

目录 旧方式与新方式 lambda表达式 方法引用 Runnable 未绑定方法引用 构造器方法引用 函数式接口 带有更多参数的函数式接口 解决缺乏基本类型函数式接口的问题 本笔记参考自&#xff1a; 《On Java 中文版》 函数式编程语言的一个特点就是其处理代码片段的简易性&am…...

【Ambari】银河麒麟V10 ARM64架构_安装Ambari2.7.6HDP3.3.1问题总结

&#x1f341; 博主 "开着拖拉机回家"带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——&#x1f390;开着拖拉机回家_大数据运维-CSDN博客 &#x1f390;✨&#x1f341; &#x1fa81;&#x1f341; 希望本文能够给您带来一定的帮助&#x1f338;文…...

李宏毅机器学习第一课(结尾附作业模型详细分析)

机器学习就是让机器找一个函数f&#xff0c;这个函数f是通过计算机找出来的 如果参数少的话&#xff0c;我们可以使用暴搜&#xff0c;但是如果参数特别多的话&#xff0c;我们就要使用Gradient Descent Regression (输出的是一个scalar数值) Classification &#xff08;在…...

对日项目工作总结

从18年8月到23年中秋节&#xff0c;目前已经入职主营对日车载项目的公司满5年了&#xff0c;一般来说&#xff0c;在一家公司工作工作超过3年&#xff0c;如果是在比较大型以及流程规范的公司&#xff0c;那么该公司的工作流程&#xff0c;工作思维会深深地烙印在该员工的脑海中…...

设计模式探索:从理论到实践的编码示例 (软件设计师笔记)

&#x1f600;前言 设计模式&#xff0c;作为软件工程领域的核心概念之一&#xff0c;向我们展示了开发过程中面对的典型问题的经典解决方案。这些模式不仅帮助开发者创建更加结构化、模块化和可维护的代码&#xff0c;而且也促进了代码的复用性。通过这篇文章&#xff0c;我们…...

【内网穿透】在Ubuntu搭建Web小游戏网站,并将其发布到公网访问

目录 前言 1. 本地环境服务搭建 2. 局域网测试访问 3. 内网穿透 3.1 ubuntu本地安装cpolar 3.2 创建隧道 3.3 测试公网访问 4. 配置固定二级子域名 4.1 保留一个二级子域名 4.2 配置二级子域名 4.3 测试访问公网固定二级子域名 前言 网&#xff1a;我们通常说的是互…...

在cesuim上展示二维模型

前提问题&#xff1a;在cesuim上展示二维模型 解决过程&#xff1a; 1.获取或定义所需变量 2.通过window.cesium.viewer.imageryLayers.addImageryProvider和new Cesium.UrlTemplateImageryProvider进行建模 3.传入url路径后拼接{z}/{x}/{y}.png 4.聚焦到此模型window.ces…...

c/c++中如何输入pi

标准的 C/C 语言中没有π这个符号及常量&#xff0c;一般在开发过程中是通过开发人员自己定义这个常量的&#xff0c;最常见的方式是使用宏定义&#xff1a; 方法1&#xff1a;#define pi 3.1415926 方法2&#xff1a;使用反三角函数const double pi acos(-1.0);...

python爬虫:JavaScript 混淆、逆向技术

Python爬虫在面对JavaScript混淆和逆向技术时可能会遇到一些挑战&#xff0c;因为JavaScript混淆技术和逆向技术可以有效地阻止爬虫对网站内容的正常抓取。以下是一些应对这些挑战的方法&#xff1a; 分析网页源代码&#xff1a;首先&#xff0c;尝试分析网页的源代码&#xf…...

Vue error:0308010C:digital envelope routines::unsupported

vue项目&#xff0c;npm run dev的时候出现&#xff1a;Error: error:0308010C:digital envelope routines::unsupported vue项目&#xff0c;npm run dev的时候出现&#xff1a;Error: error:0308010C:digital envelope routines::unsupported 这个是node的版本问题。我的nod…...

gitee 远程仓库操作基础(一)

git remote add <远程仓库名> <仓库远程地址> :给远程仓库取个别名,简化一大堆字符串操作 git remote add origin xxx.git :取个Origin名字 git remote -v :查看本地存在的远程仓库 git pull <远程仓库名><远程分支名>:<本地分支名> 相同可取消…...

DRM全解析 —— ADD_FB2(0)

本文参考以下博文&#xff1a; DRM驱动&#xff08;四&#xff09;之ADD_FB 特此致谢&#xff01; 在笔者之前的libdrm全解析系列文章中&#xff0c;讲到了drmIoctl(fd, DRM_IOCTL_MODE_ADDFB, &f)以及其封装函数drmModeAddFB。对应的文章链接为&#xff1a; libdrm全解…...

01Redis的安装和开机自启的配置

安装Redis 单机安装Redis 大多数企业都是基于Linux服务器来部署项目&#xff0c;而且Redis官方也没有提供Windows版本的安装包(此处选择的Linux版本的CentOS 7) Windows版直接下载对应版本的.zip压缩包解压即可使用 第一步: Redis是基于C语言编写的&#xff0c;因此首先需要…...

进入IT行业:选择前端开发还是后端开发?

一、前言 开发做前端好还是后端好&#xff1f;这是一个常见的问题&#xff0c;特别是对于初学者来说。在编程世界中&#xff0c;前端开发和后端开发分别代表着用户界面和数据逻辑&#xff0c;就像城市的两个不同街区一样。但是&#xff0c;究竟哪个街区更适合我们作为开发者呢…...

Java集成Onlyoffice以及安装和使用示例,轻松实现word、ppt、excel在线编辑功能协同操作,Docker安装Onlyoffice

安装Onlyoffice 拉取onlyoffice镜像 docker pull onlyoffice/documentserver 查看镜像是否下载完成 docker images 启动onlyoffice 以下是将本机的9001端口映射到docker的80端口上&#xff0c;访问时通过服务器ip&#xff1a;9001访问&#xff0c;并且用 -v 将本机机/data/a…...

如何做产品众筹网站/品牌广告

版本是&#xff1a; 从这里复制代码&#xff1a; https://www.jianshu.com/p/0b9054b33db3 准备粘贴。 1&#xff0c;直接粘贴&#xff1a; 就是这样&#xff0c;不可用。 2&#xff0c;先创建代码框&#xff0c;再粘贴&#xff1a; 其他 BUG&#xff1a; https://blog.cs…...

wordpress插件的作用/十大中文网站排名

为了画个图&#xff0c;被numpy这个模块的安装真的折腾疯了&#xff01;&#xff01;&#xff01;一直装不上&#xff0c;花了几个小时&#xff0c;看了网上的很多教程、方法发现总结得不是很全&#xff0c;这里总结一下&#xff0c;防止大家再出现这个问题没有解决方法。Pytho…...

报名网站建设公司哪里有/推广免费

今天在网上发现这样一个不错的小软件&#xff0c;通过这个软件在Windows XP机器上调试多个Web程序就方便了。软件名称&#xff1a;IIS admin下载地址&#xff1a;http://www.firstserved.net/services/iisadmin.php使用方法&#xff1a;运行IIS admin, 会在右下角出现小图标&am…...

教育网站如何做seo/百度网盘官方

(1) 在application.properties文件中添加自定义属性(单个属性使用)&#xff1b; 在这里我们新建一个maven java project进行测试&#xff0c;取名为&#xff1a;spring-boot-hello4。 对pom.xml基本的spring boot 配置&#xff0c;主要用到的一个核心依赖是&#xff1a; 1 2 3 …...

企业网站建设服务哪家好/策划方案怎么做

目录 前言 易混淆点记录 前言 博主顺利读研了&#xff0c;为了之后的工作需要现在要把C在学一遍&#xff0c;就是简单记录一些容易错而且个人感觉很重要的知识点&#xff0c;后面也会涉及到很多算法知识&#xff0c;有代码了会以资源的形式上传&#xff0c;需要的自取即可。 易…...

网络营销推广的三斧/seo外链收录

word2vec是早期NLP的必要预处理过程&#xff0c;其用于生成词的向量表示&#xff08;embeding&#xff09;。 其将单词映射为固定长度的向量&#xff08;embeding向量&#xff09;&#xff0c;而通过向量表示可以更好地表达不同词之间的相关性&#xff0c;因此会使得后续的分类…...