第3章 数据类型与运算符
3.1 数据类型
![3.1 数据类型]()
3.1.1 数值型
3.1.1.1 整数型
| 数据类型 |
数据类型表示范围 |
类型转换函数 |
| 有符号1B(8bit)整数(单精度) |
\(-2^7 \sim 2^7 - 1\) |
int8 |
| 有符号2B(16bit)整数(单精度) |
\(-2^{15} \sim 2^{15} - 1\) |
int16 |
| 有符号4B(32bit)整数(单精度) |
\(-2^{31} \sim 2^{31} - 1\) |
int32 |
| 有符号8B(64bit)整数(单精度) |
\(-2^{63} \sim 2^{63} - 1\) |
int64 |
| 无符号1B(8bit)整数 |
\(0 \sim 2^8-1\) |
uint8 |
| 无符号2B(16bit)整数 |
\(0 \sim 2^{16}-1\) |
uint16 |
| 无符号4B(32bit)整数 |
\(0 \sim 2^{32}-1\) |
uint32 |
| 无符号8B(64bit)整数 |
\(0 \sim 2^{64}-1\) |
uint64 |
>> x=uint16(16628) % 无符号2B(16bit)整数
x =
uint16
16628
>> isinteger(x) % 验证一个变量是否为整数
ans =
logical
1
>> class(x) % 查看数据类型
ans =
'uint16'
3.1.1.2 浮点数类型
| 数据类型名称 |
存储大小 |
表示范围 |
类型转换函数 |
| 双精度浮点数 |
8B |
\(-1.79769 \times 10^{308} \sim +1.79769 \times 10^{308}\) |
double |
| 单精度浮点数 |
4B |
\(-3.40282 \times 10^{38} \sim +3.40282 \times 10^{38}\) |
single |
3.1.1.3 复数类型
z=complex(a,b) % 利用两个实数a、b创建一个复数z,z=a+bi
z=complex(x) % 返回x的等效复数。x为实数,返回x+0i;x为复数,则z与x相同
>> a=12+6i % 直接用赋值语句产生复数
a =
12.0000 + 6.0000i
>> x=rand(2)*(-3);
>> y=rand(2)*5;
>> z=complex(x,y) % 创建复数,x、y是实数,z是以x为实部、y为虚部的复数
z =
-2.4442 + 3.1618i -0.3810 + 1.3925i
-2.7174 + 0.4877i -2.7401 + 2.7344i
>> x=rand(2);
>> z=complex(x) % 创建复数,x为实数,z是以x为实部、0为虚部的复数
z =
0.9575 + 0.0000i 0.1576 + 0.0000i
0.9649 + 0.0000i 0.9706 + 0.0000i
>> real(z(1)) % 提取复数的实部
ans =
0.9575
>> imag(z(2,1)) % 提取复数的虚部
ans =
0
3.1.1.4 Inf和NaN
>> 1000/0
ans =
Inf % Inf表示正无穷大
>> x=exp(1000)
x =
Inf
>> x=log(0)
x =
-Inf % -Inf表示负无穷大
>> 0/0
ans =
NaN % NaN表示一个既不是实数又不是复数的数值(非数),NaN是Not a Number的缩写。
>> Inf/Inf
ans =
NaN
3.1.2 逻辑型
L=logical(A) % 将A转换为一个逻辑值数组
>> logical(1)
ans =
logical
1
>> logical(0)
ans =
logical
0
>> logical(-100)
ans =
logical
1
3.1.3 字符型
C=char(A) % 将输入数组A转换为字符数组
C=char(A1,…,An) % 将数组A1,…,An(不要求大小和形状)转换为单个字符数组
>> str='My name is Ding' % 用一对单引号表示字符串
str =
'My name is Ding'
>> str=char('[781112]') % 用char函数构造一个字符串
str =
'[781112]'
>> str=char('My ', 'name', 'is ', ' ', 'Ding') % 用一对单引号表示字符串
str =
5×4 char 数组
'My '
'name'
'is '
' '
'Ding'
3.1.4 结构体
3.1.4.1 结构体数组的构造
% 通过属性赋值构造一个结构体数组
>> Human.Name='Ding';
>> Human.Score=98;
>> Human.Salary=[9800 10200 8900 8600];
>> Human
Human =
包含以下字段的 struct:
Name: 'Ding'
Score: 98
Salary: [9800 10200 8900 8600]
% 下面的语句可以把结构体数组扩展成1*2的结构体数组
>> Human(2).Name='Kitta';
>> Human(2).Score=99;
>> Human(2).Salary=[21000 18000];
>> Human
Human =
包含以下字段的 1×2 struct 数组:
Name
Score
Salary
>> Human.Name
ans =
'Ding'
ans =
'Kitta'
>> Human(2).Name
ans =
'Kitta'
>> Human(1).Name
ans =
'Ding'
>> Human.Name
ans =
'Ding'
ans =
'Kitta'
ans =
[]
>> Human.Score
ans =
98
ans =
99
ans =
[]
>> Human.Salary
ans =
9800 10200 8900 8600
ans =
21000 18000
ans =
96.5000
% 使用函数struct来构造结构体数组
s=struct % 创建不包含任何字段的标量(1*1)结构体
s=struct(field,value) % 创建具有指定字段和值的结构体数组
s=struct(field1,value1,…,fieldN,valueN) % 创建一个包含多个字段的结构体数组
| 方法 |
调用格式示例 |
初始值状况 |
| 单独使用struct函数 |
Personel(3)=struct('Name','John','Score',85.5,'Salary',[4500]) |
Personel(1)和Personel(2)的属性值都是空矩阵 |
| struct与repmat函数配合使用 |
repmat(struct('Name','John','Score', 85.5,'Salary',[4500]),1,3) |
数组的所有元素都具有和输入一样的值 |
| struct函数的输入为元胞数组 |
struct('Name',{'Clayton','Dana','John′},'Score',{98.5,100,85.5},'Salary',{[4500],[],[]}) |
结构数组的属性值由元胞数组指定 |
3.1.4.2 访问结构体数组的数据
>> Human=struct('Name',{'Ding','Tina','Tom'},'Score',{98,99,[]},...
'Salary',{[9800 10200 8900 8600],[21000 18000],[]}) % 创建结构体数组
Human =
包含以下字段的 1×3 struct 数组:
Name
Score
Salary
>> NewHuman=Human(1:2) % 访问结构体数组的任意子数组,并生成一个1*2的结构体数组
NewHuman =
包含以下字段的 1×2 struct 数组:
Name
Score
Salary
>> NewHuman=Human(1:3) % 生成一个1*3的结构体数组
NewHuman =
包含以下字段的 1×3 struct 数组:
Name
Score
Salary
>> Human(2).Score % 访问结构体数组的某个元素的某个属性
ans =
99
>> Human(1).Salary(3) % 访问结构体数组的某个元素的某个属性的元素值
ans =
8900
>> Human.Name % 得到结构体数组的所有元素的某个属性值
ans =
'Ding'
ans =
'Tina'
ans =
'Tom'
>> Salary=[Human.Salary] % 使用矩阵合并符“[]”合并结果
Salary =
9800 10200 8900 8600 21000 18000
>> Salary={Human.Salary} % 把结果合并在一个元胞数组里
Salary =
1×3 cell 数组
{[9800 10200 8900 8600]} {[21000 18000]} {0×0 double}
3.1.5 元胞数组
3.1.5.1 元胞数组的构造
% 左标志法
>> c{1,1}='Butterfly';
>> c{1,2}=@cos;
>> c{2,1}=eye(1,2);
>> c{2,2}=false;
% 右标志法
>> c(1,1)={'Butterfly'};
>> c(1,2)={@cos};
>> c(2,1)={eye(1,2)};
>> c(2,2)={false};
% 简写为下列代码
>> c={'Butterfly',@cos;eye(1,2),false};
>> c={'Butterfly',@cos;eye(1,2),false};
% 方法一:直接输入元胞数组的名称
>> c
c =
2×2 cell 数组
{'Butterfly'} {@cos}
{[ 1 0]} {[ 0]}
% 方法二:使用函数celldisp显示元胞数组
>> celldisp(c)
c{1,1} =
Butterfly
c{2,1} =
1 0
c{1,2} =
@cos
c{2,2} =
0
3.1.5.2 元胞数组的读取
>> c={'Butterfly',@cos;eye(1,2),false};
>> Str=c{1,1} % 读取c{1,1}中的字符串
Str =
'Butterfly'
>> c(1,:) % 读取元胞数组中若干单元的数据,本语句读取元胞数组c的第1行
ans =
1×2 cell 数组
{'Butterfly'} {@cos}
3.1.5.3 元胞数组的删除
>> c={'Butterfly',@cos;eye(1,2),false};
>> c(1,:)=[] % 删除元胞数组c的第一行
c =
1×2 cell 数组
{[1 0]} {[0]}
3.1.6 函数句柄
3.1.6.1 创建函数句柄
fhandle=@myfun;
>> fh=@sin % 创建函数句柄
fh =
包含以下值的 function_handle:
@sin
>> fh(0) % fh(0)相当于语句sin(0),计算sin(0)
ans =
0
>> fh(pi) % 计算sin(π),pi是π的实际值的浮点近似值,因此结果包含数值误差
ans =
1.2246e-16
>> fh(pi/2) % 计算sin(π/2)
ans =
1
>> q=integral(fh,0,1) % 利用integral计算sin(x)在区间[0,1]上的积分
q =
0.4597
3.1.6.2 匿名函数的函数句柄
h=@(arglist)anonymous_function % 定义anonymous_function函数主体,指向匿名函数arglist,输入参数列表以逗号分隔
>> sqr=@(n)n.^2; % 创建一个指向用于计算平方数的匿名函数的句柄sqr
>> x=sqr(3)
x =
9
>> myfun=@(x,y)(x^2+y^2+x*y); % 带有多个输入的函数
>> x=2; y=8;
>> z=myfun(x,y)
z =
84
\[试求积分g(c) = \int_0^1 (x^2 + cx + 1) \,\mathrm{d}x。
\]
>> g=@(c)(integral(@(x)(x.^2+c*x+1),0,1)); % 合并使用两个匿名函数
>> g(6)
ans =
4.3333
3.2 运算符
3.2.1 算术运算符
| 运算符 |
用法 |
功能 |
补充说明 |
| + |
A+B |
元素加法或一元运算符正号 |
表示矩阵A和B对应元素相加,等同于plus(A,B)。A和B必须是具有相同长度的矩阵,除非它们之一为标量。标量可以与任何一个矩阵相加。 |
| - |
A-B |
元素减法或一元运算符负号 |
表示矩阵A和B对应元素相减,等同于minus(A,B)。A和B必须是具有相同长度的矩阵,除非它们之一为标量。标量可以被任何一个矩阵减去。 |
| .* |
A.*B |
元素相乘 |
相当于A和B对应的元素相乘,等同于times(A,B)。对于非标量矩阵A和B,矩阵A的列长度必须和矩阵B的行长度一致。一个标量可以与任何一个矩阵相乘。 |
| ./ |
A./B |
元素右除法 |
矩阵A除以矩阵B的对应元素,即A(i,j)/B(i,j),等同于rdivide(A,B)。对于非标量矩阵A和B,矩阵A的列长度必须和矩阵B的行长度一致。 |
| .\ |
A.\B |
元素左除法 |
矩阵B除以矩阵A的对应元素,即B(i,j)/A(i,j),等同于ldivide(B,A)。对于非标量矩阵A和B,矩阵B的列长度必须和矩阵A的行长度一致。 |
| .^ |
A.^B |
元素的乘方 |
即[A(i,j)^B(i,j)],对于非标量矩阵A和B,矩阵A的列长度必须和矩阵B的行长度一致。 |
| .' |
A.' |
矩阵转置 |
当矩阵是复数时,不求矩阵的共轭转置。 |
| * |
A*B |
矩阵乘法 |
对于非标量矩阵A和B,矩阵A的列长度必须和矩阵B的行长度一致。一个标量可以与任何一个矩阵相乘。 |
| / |
B/A |
矩阵右除法 |
粗略地相当于B*inv(A),准确的说相当于(A'\B')'。它是方程X*A=B的解。 |
| \ |
A\B |
矩阵左除法 |
粗略地相当于inv(A)*B。它是方程A*X=B的解。 |
| ^ |
A^B |
矩阵乘方 |
当A和B都是标量时,表示标量A的B次方幂。当A为方阵、B为正整数时,表示矩阵A的B次乘积;当B为负整数时,表示矩阵A的逆的B次乘积;当B为非整数时,有如下表达式: A ^ B = \(V * \begin{bmatrix} \lambda_1^B & & \\ & \ddots & \\ & & \lambda_n^B \end{bmatrix} /V\) 其中,\(\lambda_1^B \sim \lambda_n^B\) 为矩阵A的特征值;V为对应的特征向量矩阵。当A为标量,B为方阵时,有如下表达式: A ^ B = \(V * \begin{bmatrix} A^{\lambda_1} & & \\ & \ddots & \\ & & A^{\lambda_n} \end{bmatrix} /V\) 其中,\(A^{\lambda_1} \sim A^{\lambda_n}\) 为方阵B的特征值;V为对应的特征向量矩阵。当A和B都为矩阵时,此运算无意义。 |
| ' |
A' |
矩阵转置 |
当矩阵是复数时,求矩阵的共轭转置。 |
>> A=ones(2,3);
>> B=[1 2 3; 4 5 6];
>> X1=A./B % 矩阵A除以矩阵B的对应元素
X1 =
1.0000 0.5000 0.3333
0.2500 0.2000 0.1667
>> X2=A.\B % 矩阵B除以矩阵A的对应元素
X2 =
1 2 3
4 5 6
>> X3=A/B % 矩阵右除法,也即方程X*B=A的解
X3 =
-0.3333 0.3333
-0.3333 0.3333
>> A=magic(4) % 创建4阶魔方矩阵,返回由1到n^2的整数构成的n*n方阵
A =
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
>> 5*A % 矩阵乘法运算
ans =
80 10 15 65
25 55 50 40
45 35 30 60
20 70 75 5
3.2.2 关系运算符
| 运算符 |
名称 |
示例 |
使用说明 |
| < |
小于 |
A<B |
1. A、B都是标量,结果是为1(真)或为0(假)的标量。 2. A、B若一个为标量,另一个为数组,则标量与数组各元素逐一进行比较,结果为与运算数组行/列相同的数组,其中各元素取值为1或0。 3. 当A、B均为数组时,必须行数、列数分表相同,A与B各对应元素相比较,结果为与A或B行/列相同的数组,其中各元素取值为1或0。 4. ==和~=运算对参与比较的量同时比较其实部和虚部,其他运算只比较实部。 |
| <= |
小于或等于 |
A<=B |
| > |
大于 |
A>B |
| >= |
大于或等于 |
A>=B |
| == |
等于 |
A==B |
| ~= |
不等于 |
A~=B |
>> magic(4)>10*ones(4)
ans =
4×4 logical 数组
1 0 0 1
0 1 0 0
0 0 0 1
0 1 1 0
3.2.3 逻辑运算符
3.2.3.1 元素方式逻辑运算符
| 运算符 |
功能 |
功能描述 |
示例 |
| &/and |
逻辑与 |
两个操作数同时为1,运算结果为1;否则为0 |
A&B/and(A,B)=0 0 0 0 1 |
| |/or |
逻辑或 |
两个操作数同时为0,运算结果为0;否则为1 |
A|B/or(A,B)=1 1 1 0 1 |
| ~/not |
逻辑非 |
当A为0时,运算结果为1;否则为0 |
~A/not(A)=0 1 1 1 0 |
| xor |
逻辑异或 |
当两个操作数相同时,运算结果为0;否则为1 |
xor(A,B)=1 1 1 0 0 |
>> A=[1 0 0 0 1];
>> B=[0 1 1 0 1];
>> A&B
ans =
1×5 logical 数组
0 0 0 0 1
>> and(A,B)
ans =
1×5 logical 数组
0 0 0 0 1
>> A|B
ans =
1×5 logical 数组
1 1 1 0 1
>> or(A,B)
ans =
1×5 logical 数组
1 1 1 0 1
>> ~A
ans =
1×5 logical 数组
0 1 1 1 0
>> not(A)
ans =
1×5 logical 数组
0 1 1 1 0
>> xor(A,B)
ans =
1×5 logical 数组
1 1 1 0 0
3.2.3.2 比特方式逻辑运算符
| 函数名 |
功能 |
功能描述 |
示例 |
| bitand |
与 |
返回两个非负整数的对应位做与操作 |
bitand(A,B)=1(binary 00001) |
| bitor |
或 |
返回两个非负整数的对应位做或操作 |
bitor(A,B)=23(binary 10111) |
| bitxor |
异或 |
返回两个非负整数的对应位做异或操作 |
bitxor(A,B)=22 (binary 10110) |
| bitcmp |
补码 |
返回n位整数表示的补码 |
bitcmp(A,B)=14(binary 01110) |
>> A=17; % 二进制表示为10001
>> B=7; % 二进制表示为00111
>> bitand(A,B)
ans =
1
>> bitor(A,B)
ans =
23
>> bitxor(A,B)
ans =
22
3.2.3.3 短路逻辑运算符
| 函数名 |
功能 |
功能描述 |
示例 |
| && |
逻辑与 |
两个操作数同时为1,运算结果为1;否则为0 |
A&&B |
| || |
逻辑或 |
两个操作数同时为0,运算结果为0;否则为1 |
A||B |
>> X=[1 1 0 1 1];
>> Y=[0 0 1 0 0];
>> any(X)||all(Y) % 使用any和all函数将每个向量约简为单个逻辑条件
ans =
logical
1
>> b=1;
>> a=20;
>> x=(b~=0)&&(a/b>18.5)
x =
logical
1
>> b=0;
>> x=(b~=0)&&(a/b>18.5)
x =
logical
0
3.2.4 运算优先级
| 序号 |
运算符 |
优先级 |
| 1 |
括号 |
最高 ↓ 最低 |
| 2 |
转置(.'),幂(.^),复共轭转置('),矩阵幂(^) |
| 3 |
一元正号(+),一元负号(-),逻辑非(~) |
| 4 |
元素相乘(.*),元素右除(./),元素左除(.\),矩阵乘法(*),矩阵右除(/),矩阵左除(\) |
| 5 |
加法(+),减法(-) |
| 6 |
冒号运算符(:) |
| 7 |
小于(<),小于或等于(<=),大于(>),大于或等于(>=),等于(==),不等于(~=) |
| 8 |
逻辑与(&) |
| 9 |
逻辑或(|) |
| 10 |
短路逻辑与(&&) |
| 11 |
短路逻辑或(||) |
>> A=[2 6 8];
>> B=[9 6 3];
>> C=A.*B.^3
C =
1458 1296 216
>> C=(A.*B).^3 % 调整优先级
C =
5832 46656 13824
3.3 字符串
3.3.1 字符串的构造
3.3.1.1 创建字符数组
% 函数strcat在合并字符串的同时会把字符串尾部的空格删除。要保留这些空格,可以使用矩阵合并符“[]”实现字符串的合并。
% 在利用函数char创建字符数组时,如果字符串不具有相同的长度,则函数char会自动用空格把字符串补足到最长的字符串的长度。
>> str='helloMATLAB' % 通过一对单引号来表示字符串
str =
'helloMATLAB'
>> a='hello '; % 字符串后有一空格
>> b='MATLAB';
>> c=strcat(a,b) % 用字符串合并函数strcat得到一个新的字符串
c =
'helloMATLAB'
>> c=[a b] % 用矩阵合并符实现字符串的合并
c =
'hello MATLAB'
>> c=char('hello','MATLAB') % 利用函数char来创建字符数组
c =
2×6 char 数组
'hello '
'MATLAB'
3.3.1.2 创建字符串元胞数组
% 利用函数cellstr可以创建字符串元胞数组,创建时会把字符串尾部的空格截取;也可以利用函数char把一个字符串元胞数组转换成一个字符数组
>> data=['hello ';'MATLAB'] % 创建字符数组,带空格
data =
2×6 char 数组
'hello '
'MATLAB'
>> celldata=cellstr(data) % 把上述字符数组转换成字符串元胞数组
celldata =
2×1 cell 数组
{'hello' }
{'MATLAB'}
>> length(celldata{1})
ans =
5
>> chararray=char(celldata) % 将一个字符串元胞数组转换成一个字符数组
chararray =
2×6 char 数组
'hello '
'MATLAB'
>> length(chararray(1,:)) % 查看第一个字符串的长度
ans =
6
3.3.2 字符串的比较
3.3.2.1 字符串比较函数
| 函数 |
功能描述 |
基本调用格式 |
| strcmp |
比较两字符串是否相等 |
strcmp(S1,S2) |
字符串相等返回1,否则返回0 |
| strncmp |
比较两字符串的前N个字符是否相等 |
strncmp(S1,S2,N) |
字符串的前N个字符相等返回1,否则返回0 |
| strcmpi |
比较两字符串是否相等,忽略大小写 |
strcmpi(S1,S2) |
字符串相等返回1,否则返回0(忽略大小写) |
| strncmpi |
比较两字符串的前N个字符是否相等,忽略大小写 |
strncmpi(S1,S2,N) |
字符串前N个字符相等返回1,否则返回0(忽略大小写) |
>> str1='aaabbb';
>> str2='aaabbc';
>> c=strcmp(str1,str2) % 对字符串进行比较,由于两个字符串不相同,结果为0
c =
logical
0
>> c=strncmp(str1,str2,5) % 对字符串的前5个字符相同,因此比较前5个字符返回1
c =
logical
1
3.3.2.2 用关系运算符比较字符串
>> str1='aabbcc';
>> str2='abbabc';
>> c=(str1==str2) % 用==运算符判断两个字符串里的对应字符是否相同
c =
1×6 logical 数组
1 0 1 0 0 1
% 也可以用其他关系运算符(>、>=、<、<=、==、!=)比较两个字符串。
3.3.3 字符串查找和替换函数
| 函数名 |
功能描述 |
基本调用格式 |
| strrep |
字符串查找并替换 |
str=strrep(str,old,new) |
将str中出现的所有old都替换为new |
| findstr |
在字符串内查找(两个输入对等) |
k=findstr(str1,str2) |
在输入的较长字符串中查找较短字符串的位置 |
| strfind |
在字符串内查找 |
k=strfind(str,pattern) |
查找str中pattern出现的位置 |
| k=strfind(cellstr,pattern) |
查找单元字符串cellstr中pattern出现的位置 |
| strtok |
获得第一个分隔符之前的字符串 |
token=strtok(str) |
以空格符(包括空格、制表符和换行符)为分隔符 |
| token=strtok(str,delimiters) |
输入delimiters为指定的分隔符 |
| [token,rem]=strtok(...) |
返回值rem为第一个分隔符之后的字符串 |
| strmatch |
在字符串数组中匹配指定字符串(不推荐) |
x=strmatch(str,STRS) |
在字符串数组STRS中匹配字符串str,返回匹配上的字符串的所在行 |
| x=strmatch(str,STRS,exact) |
在字符串数组STRS中匹配字符串str,返回匹配上的字符串的所在行,只有在完全匹配上时,才返回字符串的所在行 |
>> s1='My name is Ding.'
s1 =
'My name is Ding.'
>> str=strrep(s1,'Ding','Bin') % 字符串替换
str =
'My name is Bin.'
>> str='My name is Ding.';
>> index=strfind(str,'i') % 字符串查找
index =
9 13
>> s='My name is Ding.';
>> [a,b]=strtok(s) % 获取第一个分隔符之前的字符串
a =
'My'
b =
' name is Ding.'
3.3.4 字符串与数值的转换
| 函数名 |
功能描述 |
| char |
把一个数值截去小数部分,然后转换为等值的字符 |
| int2str |
把一个数值的小数部分四舍五入,然后转换为字符串 |
| num2str |
把一个数值类型的数据转换为字符串 |
| mat2str |
把一个数值类型的数据转换为字符串,返回的结果是MATLAB能识别的格式 |
| dec2hex |
把一个正整数转换为十六进制的字符串 |
| dec2bin |
把一个正整数转换为二进制的字符串 |
| dec2base |
把一个正整数转换为任意进制的字符串 |
| uintN |
把字符转换为等值的整数(N为8、16、32、64,如uint8) |
| str2num |
把一个字符串转换为数值类型 |
| str2double |
与str2num相似,但比str2num的性能优越,它同时提供对单元字符数组的支持 |
| hex2num |
把一个IEEE格式的十六进制字符串转换为数值类型 |
| hex2dec |
把一个IEEE格式的十六进制字符串转换为十进制整数 |
| bin2dec |
把一个二进制字符串转换为十进制整数 |
| base2dec |
把一个任意进制的字符串转换为十进制整数 |
>> x=rand(1,5)
x =
0.0975 0.2785 0.5469 0.9575 0.9649
>> disp([' 向量x中的最小值为:' num2str(min(x))])
向量x中的最小值为:0.09754