当条件成立时,则执行语句组,执行完之后继续执行 if 语句后面的语句,若条件不成立,则直接执行if语句后面的语句。例如,当 x 是整数矩阵时,输出 x 的值,语句如下:
iffix(x)==x
disp(x);
end
(2) 双分支 if 语句。
其语句格式如下:
if 条件
语句组 1else
语句组 2
end
当条件成立时,执行语句组 1,否则执行语句组 2,语句组 1 或语句组 2 执行后,再执行 if 语句后面的语句。
例如,我们计算分段函数的值。
y
=
{
c
o
s
(
x
+
1
)
+
x
2
+
1
,
x
=
10
x
x
+
x
,
x
≠
10
y=\left\{\begin{matrix}cos\left ( x+1 \right )+\sqrt{x^{2}+1},x=10 \\x\sqrt{x+\sqrt{x} } ,x\ne 10 \end{matrix}\right.
y={cos(x+1)+x2+1,x=10xx+x,x=10
这是一个具有两个分支的分段函数,为了求函数值,可以采用双分支结构来实现。程序如下:
x=input('请输入 x 得到值:');if x==10
y=cos(x+1)+sqrt(x*x+1);else
y=x*sqrt(x+sqrt(x));
end
y
可以不用第一个 if 语句,而直接求函数值即可,改用以下程序实现。
x=input('请输入 x 得到值:');
y=cos(x+1)+sqrt(x*x+1);if x=~10
y=x*sqrt(x+sqrt(x));
end
y
(3) 多分支 if 语句。
其语句格式如下:
if 条件 1
语句组 1
elseif 条件 2
语句组 2
…
elseif 条件 m
语句组 m
else
语句组 n
end
对于 for 语句,首先计算 3 个冒号表达式,形成一个行向量,再将向量中的元素逐个赋给循环变量,每次赋值后都执行一次循环体语句,当向量的元素都被使用完时,结束 for 语句的执行,而继续执行 for 语句后面的语句。
关于 for 语句的执行,还需要注意以下几点。
(1) for 语句针对向量的每一个元素执行一次循环体,循环的次数就是向量中元素的个数,也可以针对任意向量。
(2) 可以在 for 循环体中修改循环变量的值,但当程序执行流程再次回到循环开始时,就会自动被设成向量的下一个元素。
(3) for 语句中的 3 个表达式只在循环开始时计算一次, 也就是说,向量元素一旦确定将不会再改变。如果在表达式中含有变量,即便在循环体中改变变量的值,向量的元素也不改变。
(4) 推出循环后,循环变量的值就是向量中最后的元素值。
(5) 当向量为空时,循环体一次也不执行。
例如,一个 3 位整数各位数字的立方和等于该数本身则称该数为水仙花数。输出全部水仙花数。
首先考虑如何判断水仙花数,关键的一步是先分别求 3 位整数的个位、十位、百位数字,再根据条件判断该数是否为水仙花数。然后利用 for 语句穷举全部 3 位整数。程序如下:
shu=[]%用于存放结果,先赋空值
for m=100:1:999
m1=fix(m/100);%求 m 的百位数字
m2=rem(fix(m/10),10);%求 m 的十位数字
m3=rem(m,10);%求 m 的个位数字
if m==m1*m1*m1+m2*m2*m2+m3*m3*m3
shu=[shu,m];%存入结构
end
end
disp(shu)
程序运行结果如下:
shu =[]153370371407
例如,已知
y
=
1
+
1
2
2
+
1
3
2
+
…
+
1
n
2
y=1+\frac{1}{2^{2} } +\frac{1}{3^{2} }+…+\frac{1}{n^{2} }
y=1+221+321+…+n21,当
n
=
100
n=100
n=100 时,求
y
y
y 的值。
这是求
n
n
n 个数之和的累加问题,可用以下递推式来描述:
y
i
=
y
i
−
1
+
f
i
y_{i} =y_{i-1}+f_{i}
yi=yi−1+fi
其中,
y
0
=
0
y_{0}=0
y0=0,即第
i
i
i 此的累加和
y
y
y 等于第
i
−
1
i-1
i−1 次的累加和加上本次的累加项
f
f
f,可用以下赋值语句来实现。
y
=
y
+
f
y=y+f
y=y+f
其中累加项
f
f
f 可用以下赋值语句来实现。
f
=
1
/
(
i
∗
i
)
f=1/(i*i)
f=1/(i∗i)
整体程序如下:
y=0;
n=100;for i=1:1:n
y=y+1/(i*i);
end
y
程序运行结果如下:
y =1.6350
例如,设
f
(
x
)
=
e
−
0.5
x
sin
(
x
+
π
6
)
f(x)=e^{-0.5x}\sin(x+\frac{\pi }{6} )
f(x)=e−0.5xsin(x+6π),求
s
=
∫
0
3
π
f
(
x
)
d
x
s=\int_{0}^{3\pi } f(x)dx
s=∫03πf(x)dx 的值。
求函数
f
(
x
)
f(x)
f(x) 在
[
a
,
b
]
[a,b]
[a,b] 上的定积分,其几何意义就是求曲线
y
=
f
(
x
)
y=f(x)
y=f(x) 与直线
x
=
a
x=a
x=a,
x
=
b
x=b
x=b,
y
=
0
y=0
y=0 所围成的曲边梯形的面积。
为了求得曲边梯形面积,先将积分区间
[
a
,
b
]
[a,b]
[a,b] 分成
n
n
n 等份,每个区间的宽度为
h
=
(
b
−
a
)
/
n
h=(b-a)/n
h=(b−a)/n,对应地将曲边梯形分成
n
n
n 等份,每个小部分即是一个小曲边梯形。近似求出每个小曲边梯形面积,然后将
n
n
n 个小曲边梯形的面积加起来,就得到总面积,即定积分的近似值。程序如下:
a=0;
b=3*pi;
n=1000;
h=(b-a)/n;
x=a;
s=0;
f0=exp(-0.5*x)*sin(x+pi/6);for i=1:n
x=x+h;%下一个 x 坐标
f1=exp(-0.5*x)*sin(x+pi/6);%求新的函数值
s=s+(f0+f1)*h/2;%求小梯形面积并累加
f0=f1;%更新函数值
end
s
a=0;
b=3*pi;
n=1000;
h=(b-a)/n;
x=a:h:b;%生成自变量向量 x
f=exp(-0.5*x).*sin(x+pi/6);%求函数值向量 f
for i=1:n
s(i)=(f(i)+f(i+1))*h/2;%求各个小梯形面积,组成面积向量 f
end
s=sum(s)%求面积向量 s 元素之和
程序中 x、f、 s 均为向量,f 的元素为各个 x 点的函数值,s 的元素分别为 n 个梯形的面积,s 各元素之和即定积分近似值。事实上,MATLAB 提供了有关数值积分的标准函数,实际应用中可直接调用这些函数求数值积分。
2. while 语句
while 语句就是通过判断循环条件是否满足来决定是否继续循环的一种循环控制语句,也称为条件循环语句。它的特点是先判断循环条件,条件满足时执行循环。
while 语句的一般格式如下:
while 条件
循环体语句
end
其执行过程为,若条件成立,则执行循环体语句,执行后再判断条件是否成立,如果不成立则跳出循环。
例如,从键盘中输入若干个数,当输入 0 时结束输入,求这些数的平均值和它们之和。
这是一个典型的条件循环问题,用 while 语句实现。程序如下:
sum=0;
n=0;
x=input('Enter a number(end in 0):');while x~=0
sum=sum+x;
n=n+1;
x=input('Enter a number(end in 0):');
end
if n>0
sum
mean=sum/n
end
运行结果如下:
Enter a number(end in 0):67
Enter a number(end in 0):89
Enter a number(end in 0):93
Enter a number(end in 0):70
Enter a number(end in 0):0
sum =319
mean =79.7500
例如,根据矩阵指数的幂级数展开式求矩阵指数。
e
X
=
I
+
X
+
X
2
2
!
+
X
3
3
!
+
…
+
X
n
n
!
+
…
e^{X}=I+X+\frac{X^{2}}{2!}+\frac{X^{3}}{3!}+…+\frac{X^{n}}{n!}+…
eX=I+X+2!X2+3!X3+…+n!Xn+…
设
X
X
X 是给定的矩阵,
E
E
E 是矩阵指数函数值,
F
F
F 是展开式的项,
n
n
n 是项数,循环一直进行到
F
F
F 很小,以至于
F
F
F 值加在
E
E
E 上对
E
E
E 的值影响不大时为止。
为了判断
F
F
F 是否很小,可利用求矩阵范数的函数 norm(F,1) 来计算。所以当 norm(F,1)=0 时,认为
F
F
F 很小,应退出循环的执行。程序如下:
X=input('Enter X:');
E=zeros(size(X));%生成与 X 同样大小的零矩阵
F=eye(size(X));%生成与 X 同样大小的单位矩阵
n=1;whilenorm(F,1)>0
E=E+F;%实现累加
F=F*X/n;%求累加项
n=n+1;
end
E
expm(X)%调用 MATLAB 矩阵指数函数求矩阵指数
运行结果如下:
Enter X:[0.5,2,0;1,-1,-0.5;0.9,1,0.75]
E =2.61262.0579-0.63760.74200.7504-0.59422.56782.33591.5549
ans =2.61262.0579-0.63760.74200.7504-0.59422.56782.33591.5549
运行结果表明,程序运行结果与 MATLAB 矩阵指数函数 expm(X) 的结果一致。
3. break 语句和 continue 语句
与循环结构相关的语句还有 break 语句和 continue 语句,它们一般与 if 语句配合使用。
A - Plus and Multiply 题意: 题解: 题目说可以将集合里面的数字 *a 或者 b 操作,并将新的值放进集合中,首先想到 dfs 暴力求解,但是太暴力了,直接 时间超限 。通过观察我们可以知道,要求 n 是否…
张量的代数操作
张量的性质
张量迹 Tensor Trace
定义 e ^ i ⨂ e ^ j \hat e_i \bigotimes \hat e_j e^i⨂e^j的迹: T r ( e ^ i ⨂ e ^ j ) e ^ i ⋅ e ^ j δ i j Tr(\hat e_i \bigotimes \hat e_j) \hat e_i \cdot \hat e_j \delta_{ij} Tr(e^i⨂e^j)e^i⋅…