MATLAB语言基础

MATLAB语言基础MATLAB 语言基础 matlab 语言

大家好,欢迎来到IT知识分享网。

MATLAB语言基础

第一章 MATLAB概述

一、MATLAB的发展

  1. 美国Mathworks公司于1984年正式推出,随后逐次升级。目前通常每年更新两次,例如2021a,2021b。用于数值计算和图形处理的系统环境
  2. MATLAB(MATrix LABoratory)(矩阵实验室)是一种以矩阵运算为基础的交互式程序语言。
  3. 只有一种数据类型,一种标准的输入输出语句,不需编译。

二、MATLAB的优点

除具备卓越的数值计算能力外,还提供专业水平的符号计算、文字处理、可视化建模仿真和实时控制等功能。每个变量代表一个矩阵;每个元素都看作复数;所有运算都对矩阵和复数有效;指令表达式与数学、工程中常用的形式非常相似

  1. 友好的工作平台和编辑环境:许多工具采用图形用户界面,包括MATLAB桌面和一些窗口,例如命令窗口、编辑器和调试器等;程序不必经过编译就可以直接运行,能及时报告出现的错误并分析错误的原因。
  2. 简单易用的程序语言:MATLAB是一种高级的矩阵/阵列语言。语法特征更符合科技人员对数学表达式的书写格式,非常适合非计算机专业的人员使用。
  3. 强大的数学计算和数据处理能力:包含600多种数学运算函数,可以方便地实现用户所需的各种计算功能。例如矩阵、特征向量、傅里叶变换、线性方程求解、微分方程求解、复数、三角函数、多维数组运算等。矩阵的行数、列数无需事先定义。
  4. 强大而简易的绘图功能:能根据输入数据自动确定坐标绘图;能规定多种坐标系;能绘制三维坐标中的曲线和曲面;可设置不同的颜色、线型和视角等。
  5. 功能丰富,可扩展性强:有丰富的内部函数和工具箱。工具箱包括信号处理、图像处理、控制系统、神经元网络、小波分析、金融等,几乎涉及各个方面。

三、MATLAB的工作环境

  1. 命令窗(Command Window)
    是对MATLAB进行操作的主要载体。默认情况下,启动MATLAB时就打开命令窗。MATLAB的所有函数和命令都可以在命令窗执行。
    程序的运行结果(除图形外)都显示在命令窗。

  2. 图形窗(Figure Window)
    显示图形的窗口。执行绘图命令后自动弹出。
  3. 文本编辑窗(File Editor)
    编写和修改文件程序的窗口。

四、帮助系统

命令窗口的帮助系统。

  1. help:查找所有命令或函数的使用方法。
    help+函数名
  2. lookfor:在不知道某命令或函数的确切名称时查找其功能。
    lookfor+关键字

第二章 矩阵及其运算

第一节 MATLAB变量

  1. MATLAB的特殊常量
    特殊常量是一些预先定义好的数值变量

    含义 符号
    圆周率π pi
    虚数单位 i或j
    无穷大∞ inf
    非数 NaN
    默认结果存储变量(临时变量) ans
  2. 变量的命名规则
    所有的变量都表示一个矩阵或一个向量
    (1)变量名由大、小写的英文字母、数字和下划线等组成,但首位必须是英文字母(此处与其他语言如C语言有些区别,C语言的变量首字母可以是下划线_和字母,而MATLAB则只能是字母);
    (2)变量名区分大小写;
    (3)变量名不能是MATLAB的命令、函数、M文件名,以免引起逻辑运行错误;
    (4)变量名的长度不能过长。




  3. 变量的定义与赋值
    变量不需要先定义后使用,MATLAB会自动根据实际赋值的类型对变量类型进行定义
    (1)赋值语句的一般形式:
    变量 = 数/字符/表达式


a=1 x='s' y=(1+2+3)/5*4 

注意:单引号必须在英文状态下输入;数值变量的类型自动定义为双精度变量。

  1. 变量的显示
    (1)显示格式:MATLAB中的数据存储和计算都是以双精度进行,但可以用format命令改变数据的显示格式。
    (2)变量的显示命令:直接在命令行输入变量名再回车即可。用disp函数可以紧凑型格式显示结果而不输出变量名。
    例:


A = magic(3) disp('这是一个3行3列的魔方矩阵') disp(A) 
  1. 变量的存取
    可以通过多种方式实现一个或多个变量的选择性存取
    (1)命令:
    save实现从内存到硬盘的存储;
    load实现从硬盘到内存的载入。
    ①格式1:




load 文件名 变量名 save 文件名 变量名 

②格式2:

S = load('文件名','格式','变量名') S = save('文件名','格式','变量名') 

③快捷方式:利用工作空间窗口

  1. 变量的清除
    clear命令可以删除一个、多个或所有变量。
  • 格式:
clear 变量名 clear 变量1 变量2 ··· clear all 

注意: clear是从内存中删除变量,delete是从硬盘上删除数据文件

  1. 变量的检查
    检查工作空间中的变量及其阶数
    ① who:显示前面用过的变量
    ② whos:显示前面用过的变量及其详细特征
    注意:MATLAB中所有的命令和函数都用小写字母表示。



第二节 一维数组的创建与元素提取

  1. 一维数组(向量)的创建
  • 列与列之间的数据用逗号或空格分隔;
  • 行与行之间的数据用分号分隔。
a=[1;2;3] %生成列向量 b=[1,2,3] %生成行向量 c=[1 2 3] %生成行向量 

说明:

  • 行中写多条语句时,逗号和分号可以作为语句间的分隔符。
  • 用分号,则命令窗不显示运行结果。
a=1:2:6 b=1:6 
b=linspace(1,6,6) % 等同于b=1:6 

(4)拼接法

  • 利用已有的一维数组创建新的一维数组。
  • 将两个行向量或列向量拼接为一个行向量或列向量,也可以利用冒号抽取其中的部分数据生成新的一维数组。
    ①行向量拼接:用方括号和逗号
    示例:a3=[a1,a2]
    ②列向量拼接:用方括号和分号
    示例:b3=[b1;b2]
    ③向量的抽取:用冒号
    示例:a4=a3(1:2:end) % 抽取a3中奇数位置的数组成新的数组





实例演示
创建两个不同的一维行向量和列向量,并利用这两个向量拼接成一个新的行向量和列向量,然后再由新向量中的奇数位置元素组成新的向量。

x1= 1:3 x2= linspace(5,20,4) x= [x1,x2] y1=[1:3]' y2= linspace(5,20,4)' y= [y1;y2] x3= x(1:2:end) y3= y(1:2:end) 
  1. 一维数组中元素的提取
    利用圆括号和索引号。
    例:

A=[1 2 3 4 5] a3=A(3) %提取出数组A中第三个数记为a3 

第三节 二维数组的创建与元素提取

  1. 二维数组(矩阵)的创建
a1=[1 2 3;4 5 6;7 8 9] a2=[1,2,3;4,5,6;7,8,9] a3=[1 2 3; 4 5 6; 7 8 9] 

(2)利用MATLAB中的特殊矩阵函数构建新矩阵

含义 函数
全1矩阵 ones()
全0矩阵 zeros()
(0,1)区间均匀分布的随机矩阵 rand()
单位矩阵 eye()
均值为0、方差为1的标准正态随机分布矩阵 randn()
  1. 二维数组中元素的提取

例:

A=[1 2 3;4 5 6;7 8 9] A(i,j) 提取第i行,第j列的元素 
A(:,j) % 提取第j列的所有元素 A(i,:) % 提取第i行的所有元素 A(:,k:k+m) % 提取第k~k+m列的所有元素 A(i:i+m,:) % 提取第i~i+m行的所有元素 A(i:i+m,k:k+m) % 提取第i~i+m行、k~k+m列的所有元素 

实例演示

a=[1,2,3;4,5,6;7,8,9] % 输入: a1=a(:,2) a2=a(2,:) a3=a(:,1:2) a4=a(1:2,:) a5=a(1:2,1:2) 
% 输出: a1=[2;5;8] a2=[4,5,6] a3=[1,2;4,5;7,8] a4=[1,2,3;4,5,6] 

第四节 字符数组和空数组

  1. 字符数组
    主要用于可视化编程,例如界面设计和图形绘制。
    (1)字符变量的创建
    把待建字符放在单引号中。
    注意:单引号必须放在英文状态下输入。
    A = 'I am a Chinese!'
    (2)字符数组的拼接
    利用方括号和逗号进行两个及以上字符数组的直接拼接。






str1='Welcome to ' str2='Being' str=[str1,str2] 
  1. 空数组
  • 是为操作和表述需要专门设计的一种数组。用方括号“[]”表示;
  • 不要与全零数组混淆;
  • 唯一能正确判断一个数组是否为“空”的指令是isempty()

第五节 矩阵的算术运算

  1. 矩阵的基本算数运算
    加、减、乘、除(左除,右除)、乘方
    (1)矩阵的加、减运算
    运算符:A±B


注意:

  • 要求相加减的矩阵阶数相同。
  • 检查矩阵阶数的语句:
[n,m]=size(A) l=length(A) 

注意:左除时要求两矩阵的行数必须相等,右除时要求两矩阵的列数必须相等。

  • 实例演示
A=[1,2;3,4] B=[1,1;2,2] Y1=A+B Y2=A-B Y3=A*B Y4=A\B Y5=B/A Y6=A^2 
  1. 矩阵的点(元素群)运算
    矩阵中对应位置元素进行相关运算。要求参加运算的矩阵必须是同阶的(行列数相等)
    运算符:在矩阵的基本运算符前加点“.”
    ①点乘:.*
    ②点除:.\ ./
    ③点乘方:.^




第六节 矩阵的关系运算和逻辑运算

  1. 矩阵的关系运算
  • 关系运算符:
符号 含义
< 小于
> 大于
<= 小于等于
>= 大于等于
== 等于
~= 不等于
  • 运算结果:真(1),假(0)
  • 运算法则:
    (1)标量比较:直接比较数的大小。
    (2)矩阵比较:对应位置元素按照标量运算关系进行比较,最终结果为一个由0和1组成的、与原矩阵同阶数的矩阵。
    注:相同阶数的矩阵才能进行比较


  1. 矩阵的逻辑运算
  • 逻辑运算符:与(&),或(|),非(~)
    针对二进制数(0,1)的逻辑运算
  • 运算法则
    (1)“与”运算:两者均为1,则结果为1;否则为0。
    (2)“或”运算:两者只要有一个为1,则结果就为1;否则为0。
    (3)“非”运算:取反。如果原来为1,则进行“非”运算后为0;反之亦然。


  • 实例演示:
U=P|~P all(P) all(U) any(P) % all:全为真(按列计算) % any:不全为假(按列计算) 

第七节 矩阵元素的处理

  1. 矩阵元素的取整
    ①向下取整:floor()
    ②向上取整:ceil()
    ③四舍五入取整:round()
    ④截尾取整:fix()
    例:




A=[2.3,2.7;-2.3,-2.7] A_f=floor(A) A_c=ceil(A) A_r=round(A) A_x=fix(A) 
  1. 矩阵元素的取模和取余
    mod(x,y) 取模
    rem(x,y) 取余
    均为取余函数,区别在于:当x和y的正负号相同时,两个函数的结果相同,均为x除以y的余数;当x和y的正负号不同时,rem函数结果的符号与x相同,而mod函数结果的符号与y相同。


第八节 矩阵的行列式、秩与迹及特征值分析

  1. 矩阵的行列式
    运算符:det()
    注意:用于求方阵的行列式值

  2. 矩阵的秩与迹

(1)矩阵的秩

  • 矩阵的秩是矩阵的列向量组(或行向量组)的任一极大线性无关组所含向量的个数
    运算符:rank()

(2)矩阵的迹

  • 矩阵的迹等于矩阵主对角线元素的总和。也等于矩阵特征值的总和。
    运算符:trace()
    注:要求矩阵是方阵

  1. 矩阵的特征值分析
    (1)E=eig(A)
    求矩阵A的全部特征值,并构成向量E
    (2)[V,D]=eig(A)
    求矩阵A的全部特征值,构成对角矩阵D;求A的特征向量构成列向量V



第九节 矩阵的逆与线性方程组求解

  1. 矩阵的逆
    (1)inv() 用于求满秩方阵的逆。
    (2)pinv() 用于求不是方阵或非满秩方阵的逆——伪逆。
    如果ABA=A,BAB=B,则称B为A的伪逆,或广义逆矩阵。


  2. 线性方程组求解
| x1-2x2+3x3=1 | 2x1+3x2+x3=2 | 3x1-x2-x3=4 AX=B X=A^-1*B X = inv(A)*B X = inv(A)*B = A\B (矩阵左除) 
A=[1,-2,3;2,3,1;3,-1,-1]; B=[1;2;4]; X = inv(A)*B X1 = A\B % 左除比inv更精确 

第十节 矩阵的分解与变换

  1. 矩阵的分解

(1)三角分解(方阵):[l,u]=lu(a)

(2)正交分解:[q,r]=qr(a)
其中:

  • a(n,m)
  • q:n阶正交方阵
  • r:与a同阶的上三角矩阵

(3)奇异值分解:[u,s,v]=svd(a)
其中:

  • u:n阶正交方阵
  • s:n×m阶的对角阵,对角线元素为a的奇异值,长度为n、m的较小者
  • v:m阶正交方阵
  1. 矩阵的变换
    (1)矩阵的共轭转置:'
    (2)矩阵的共轭:conj
    (3)矩阵的转置:conj'


  • 复数矩阵的赋值
    ①对元素逐个复制:
    z=[1+2i,3+4i;5+6i,7+8i]
    ②对实部和虚部矩阵分别赋值:
    z=[1,3;5,7]+[2,4;6,8]*i
    注:只有数字和i的乘积可省略乘号
    (4)矩阵的行、列扩展
    a=[1,2,3;4,5,6;7,8,9]






  • 行扩展:
a(4,3)=6.5 a(5,:)=[5,4,3] 

列扩展:

a(:,4)=[5;4;3;2;1] a(:,4)=[5;4;3;2;1] 

第三章 数据可视化

第一节 基本二维曲线绘制

  1. plot(y)
    y可以是向量、实数矩阵或复数向量。
    (1)y是向量:绘制以向量索引为横坐标、以向量元素值为纵坐标的图形。
    (2)y是实数矩阵:绘制y的列向量对其坐标索引的图形。
    (3)y是复数向量:plot(y)相当于plot(real(y), imag(y))



1: y=5*(rand(1,10)-.5) plot(y)2 y=[0 1 2;2 3 4;5 6 7] plot(y) 
  1. plot(x,y)
    x,y均可以是向量和矩阵。
    (1)x,y均是n维向量:
    绘制向量y对向量x的图形,x为横坐标,y为纵坐标。
    (2)x是n维向量,y是m×n或n×m阶矩阵:
    在同一图内绘制m条不同颜色的曲线,x为横坐标、纵坐标为y矩阵的m个n维分量。在同一图内绘制多条自变量相同的不同的曲线。
    (3)x,y均是m×n阶矩阵:
    在同一图内绘制n条不同颜色的曲线,以x对应列分量为横坐标、y对应列分量为纵坐标。






  2. plot(t,[y1;y2;…])
    注:y1,y2,…均以t为自变量,在同一坐标系中画出多幅图
  3. 接续
plot(t,y1) hold on plot(t,y2,'r') 

注:画完y1,接在后面画y2

  1. plot(x1,y1,x2,y2,……xn,yn)
    用于在同一图内绘制横坐标
1: x=0:0.1:10 y=sin(2*x) plot(x,y)2: x=0:0.1:10 y=[sin(x)+2;cos(x)+1] plot(x,y)3: x=0:0.1:10; y1=sin(x)+2; y2=cos(x)+1; plot(x,[y1;y2])4: x=0:0.1:10; y1=sin(x)+2; y2=cos(x)+1; plot(x,y1) hold on plot(x,y2,'r')5: t1=0:0.2:4*pi; y1=exp(-0.1*t1).*sin(t1); t2=0:0.2:2*pi; y2=exp(-0.5*t2).*sin(5*t2+1); plot(t1,y1,'+k',t2,y2,':r') 

例1图:例1
例234图:例234
例5图:
例5


第二节 绘图辅助操作

  1. 颜色、标记和线型

(1)颜色:用不同的英文字母表示不同的颜色,多数与英文单词对应。

颜色名称 颜色符号
蓝色 b
绿色 g
红色 r
青色 c
洋红 m
黄色 y
黑色 k
白色 w

(2)标记和线型

标记 线型
. -(实线)
O :(点线)
× -.(点划线)
+ –(虚线
*
标记名称 标记符号
方形 S
菱形 D
向下三角形 V
向上三角形 ^
向左三角形 <
向右三角形 >
五角星 P
六角形 h

(3)plot命令可设定的属性

  1. 坐标轴标注和范围设置

坐标轴的标注、范围、刻度以及宽高比

%例: t=0:0.02:2*pi; x=4*sin(t); y=5*cos(t); plot(x,y) xlabel('指定范围') axis([-4 4 -5 5]) 
  1. 标题和图例标注
    (1)标题是对所绘图形的说明。
    格式:title('string')
    string:标注所用的说明字符串
    (2)图例标注是为图形中的所有曲线进行标注。
    格式:legend('string1','string2',…)
    legend('location','location',…)





  • stringi:标注按绘制的先后顺序生成的曲线
  • legend:定义标注放置的位置

第三节 双纵坐标、多子图绘制

  1. 双纵坐标绘图

(1)plotyy(x1,y1,x2,y2)
两条曲线x1-y1、x2-y2分别以左右纵轴为纵坐标。

% 例: x1=0:0.1:5; y1=exp(-x1/3); x2=0:0.1:5; y2=sin(2*x2); plotyy(x1,y1,x2,y2) title('plotyy exam') 

在这里插入图片描述

  1. 多子图绘制
    在一个图形窗绘制多条不同的曲线。
    subplot(m,n,p)
    将图形窗分为m×n个子窗口,在第p个子窗口中绘制图形。子图的编号顺序为从左到右,从上到下。p为子图编号。


% 示例 t=0:0.5:4*pi; y=exp(-0.1*t).*sin(t); subplot(2,2,1),stem(t,y) title('stem(t,y)') subplot(2,2,2),stairs(t,y) title('stairs(t,y)') subplot(2,2,3),bar(t,y) title('bar(t,y)'),pause(1) subplot(2,2,4),fill(t,y,'r') title("fill(t,y,'r')") 

在这里插入图片描述

  1. 多图绘制
    生成多个图形窗口
    figure()

% 示例 t1=0:0.2:4*pi; y1=exp(-0.1*t1).*sin(t1); t2=0:0.1:2*pi; y2=exp(-0.5*t2).*sin(5*t2+1); figure(1) plot(t1,y1,'*c') figure(2) plot(t2,y2,':r') 

在这里插入图片描述

第四节 图形的直接编辑

  1. 主要内容
    (1)颜色。标记和线型
    (2)坐标轴标注和范围设置
    (3)标题和图例标注
    (4)保存



  2. 操作
    右键图形,弹出属性修改界面, 在内改变线型、线宽、字体等属性。

第五节 三维数据可视化

  1. 三维曲线绘制
    plot3(x,y,z)
% 示例 z=0:0.1:4*pi x=cos(z) y=sin(z) plot3(x,y,z) grid % grid:图上加坐标网格 

在这里插入图片描述

  1. 三维曲面绘制
    mesh() 网格状曲面
    surf() 给网格填充颜色的曲面

% 特殊图形的绘制 axis equal; M=moviein(16); for j=1:16 plot(fft(eye(j+16))); M(:,j)=getframe; end movie(M,30) 

在这里插入图片描述

第四章 程序设计

第一节 M文件

  1. M文件的创建、保存、打开和运行
  1. 主程序文件和函数文件

(1)主程序文件:用户编制的程序

  • 主程序的特点
    ①用clear,clear all, close all开头
    ②注释行:以%开头
    ③程序主体,定义全局变量(global 变量名1……)


第二节 条件控制结构

  1. if条件控制结构

(1)单分支结构

if 表达式 语句组 A end 

(2)双分支结构

if 表达式 语句组 A else 语句组 B end 

(3)多分支结构

if 表达式 语句组 A elseif 表达式1 语句组 B elseif 表达式2 语句组 C …… else 语句组n end 
  1. switch-case条件控制结构

可使程序在不同的情况下进行相应的操作

switch 表达式(标量或字符串) case1 语句组 A case2 语句组 B …… otherwise 语句组 N end 
n=input('n=') if rem(n,2)==0 A='even' else A='odd' end 

(2)switch-case语句

clear all n=input('n=') switch rem(n,2) case 1 A='odd' case 0 A='even' otherwise A='empty' end 

第三节 循环控制结构

  1. for循环结构
    主要用于以固定取值或循环次数的重复执行过程。
for 循环变量=表达式 语句组 end 

例:

for k=初值:增量:终值 语句组 end 
  1. while循环结构
    主要在不能或不易确定循环次数的情况下使用
while 表达式 语句组 end 
  1. 实例演示

(1)计算1到999之间的所有偶数和

  • for循环
s1=0 for m=2:2:999 s1=s1+m end s1 
  • s2=sum(2:2:999)

(2)求MATLAB中的最大实数。

x=1 while x~=inf x1=x x=2*x end x1 

第四节 其它常用语句

  1. pause语句
    实现暂停功能
  • pause
    暂停至单击鼠标左键或按键盘的任意键后,继续执行后面的语句。
  • pause(时间)
    暂停到设定时间(秒)后,继续执行后面的语句。
  1. input语句
    是一种人机交互命令
    input('提示文字')
    程序执行到此时暂停,在命令窗显示引号中的字符串,要求用户通过键盘键入数据。


第五节 M文件的注释和程序调试

  1. M文件的注释
    (1)注释语句以百分号“%”开头,语句体颜色自动变为绿色。注释语句不是运行语句。
    (2)程序中如果有不想让其运行的语句,则在其前面加“%”,这样可以让程序执行到此跳过该语句继续执行后面的语句。

  2. 程序的调试
    MATLAB自动检查和显示程序错误的能力很强,易于调试。
    如果程序有错误,则程序停止运行,并将错误显示在命令窗口,而且提示错误所在的位置以及错误原因。

第五章 数值计算

第一节 数据分析函数库

  1. 基本的数据分析
    基本的数据处理分析功能按列进行。
函数 功能
max() 求各列最大值
min() 求各列最小值
mean() 求各列平均值
sum() 求各列元素和
std() 求各列标准差
  1. 用于随机数据分析的函数
    (1)rand(m,n)
    产生在0~1之间均匀分布的m行、n列随机数矩阵。
    (2)randn(m,n)
    产生正态分布的m行、n列随机数矩阵,均值为0,标准差为1。



  2. 用于相关分析的函数
    (1)corrcoef(x,y)
    计算两个向量x,y的相关系数
    (2)cov(x,y)
    计算x,y的协方差矩阵



第二节 多项式函数库

  1. 多项式的四则运算
  1. 多项式求导、求根和求值
    (1)多项式求导:ployder(a)
    (2)多项式求根:roots(a)
    (3)由根求多项式系数:ploy(a)
    (4)多项式求值:ployval(a,xv)
    给多项式a中的自变量x赋予值xv




  2. 多项式拟合
  • 拟合:根据一组已知的数据找到其数学表达式
  • 拟合方法:使方差最小,应用最小二乘法。
    p=polyfit(x,y,n)
    x,y是已知的N个数据点坐标向量,n是拟合的多项式次数,p是求出的多项式系数向量

第三节 非线性函数分析及函数的数值积分

  1. 非线性函数分析
    (1)绘制函数曲线
    fplot('函数名',[初值,终值])
    (2)求函数极值
    fmin('函数名',初值,终值)
    (3)求函数零点
    fzero('函数点',初猜值)





  2. 函数的数值积分
    (1)定积分子程序
    quad('函数名',初值,终值)

第四节 线性微分方程的解

  1. 线性微分方程的解——拉普拉斯变换法
    首先利用拉普拉斯变换将线性常微分方程变换为代数方程,响应的表达式为s的有理分式。
    即:Y(s)=B(s)/A(s)
    (1)部分分式展开(假设分母比分子阶数高)
    [r,p,k]=residue(b,a)
    示例2
    (2)求反变换
    y(t)=r(1)*exp(p(1)*t)+r(2)*exp(p(2)*t)+……
    在这里插入图片描述







免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/130053.html

(0)
上一篇 2025-08-19 19:33
下一篇 2025-08-19 19:45

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信