3. 第3章__数值数组及向量化运算

Download Report

Transcript 3. 第3章__数值数组及向量化运算

第3章 数值数组及向量化运算
教学目标
教学重点
教学内容
教学目标
•
•
•
•
•
掌握数组的创建方法
掌握数组的标识与寻访
掌握数组的运算
了解“非数”NaN和“空”数组
掌握关系操作和逻辑操作
教学重点
• 数组的创建方法
• 数组的标识与寻访
• 关系操作和逻辑操作
教学内容
3.1 数值计算的特点和地位
3.2 一、二维数值数组的创建和寻访
3.3 数组运算和向量化编程
3.4 “非数”NaN和“空”数组
3.5 关系操作和逻辑操作
3.1 数值计算的特点和地位
 符号计算可以对包含变量字符,参数字符和数字的表达式进
行推理,运算,并给出符号结果。
 缺点:有很多问题无法解,有很多问题求解时间过长 。
符号计算解法:
syms t x
ft=t^2*cos(t)
sx=int(ft,t,0,x)
ft =
t^2*cos(t)
sx =
x^2*sin(x) - 2*sin(x) + 2*x*cos(x)
ezplot(sx,[0,15])
数值计算解法:
dt=0.05;
t=0:dt:15;
Ft=t.^2.*cos(t);
Sx=dt*cumtrapz(Ft);
plot(t,Sx,'.k','MarkerSize',12)
xlabel('x'),ylabel('Sx'),grid on
例 3.1-2 已知
f (t )  e
 sin( t )
求
4
s( x)   f (t )dt
0
(1) 符号计算解法
syms t;
ft=exp(-sin(t));
sx=int(ft, t, 0, 4)
(2) 数值计算解法
Warning: Explicit integral
could not be found.
sx =
int(1/exp(sin(t)), t = 0..4)
delt=0.01; x=0:delt:4;
y=exp(-sin(x));
sx=delt*cumtrapz(y);
plot(x,y, 'r', 'LineWidth', 6); hold on;
plot(x, sx, '.b', 'MarkerSize', 15);
plot(x, ones(size(x)), 'k');
3.2 数值数组的创建和寻访
3.2.1 一维数组的创建
3.2.2 二维数组的创建
3.2.3 二维数组元素的标识和寻访
3.2.4 数组操作技法综合
3.2.1 一维数组的创建和寻访
1. 递增/递减一维数组的创建:
(1) 冒号生成法:
array=a: inc: b
<向量>
a---数组的第一个元素
inc---采样点之间的间隔, 即步长. 最后一个元素不一定等于b,
其大小为b’=a +inc*fix((b-a)/inc); 步长可以省略, 默认
为1; inc可以取正数或负数, 但要注意当取正时,要保证b>a,
数组最后一个元素不超过b, 取负时b<a, 最后一个元素不小于
b.
a
inc>0
特点: 等差数列
b b’
b b’ Inc<0
a
1. 递增/递减一维数组的创建:
(2) 线性(或对数)定点采样法
在设定的总点数下, 均匀采样生成一维行数组.格式为:
x=linspace (a, b, n)
a---数组初始值
b---数组最后值
等效于: x=a: (b-a)/(n-1) :b
n---数组总个数
增量的计算---inc=(b-a)/(n-1)
特点:方便对数组的元素的总个数进行控制,最后一个元素肯
定是设定之值.
x=logspace (a, b, n)
3.2.1 一维数组的创建和寻访
2.其他类型一维数组的创建:
(1) 逐个元素输入法:
行向量
如:array=[2, pi/2, sqrt(3), 3+5i]
x=[1,2,3,4,5]'
列向量
使用场合及特点
使用场合: 数据元素比较少并都已知.如对少量
实验数据的处理可用此种方法.
2.其他类型一维数组的创建:
(2) 运用MATLAB函数生成法:
MATLAB特殊形式数组生成函数见表3.2-1:
均匀分布随机数组rand(1,n), 全1数组ones(1,n)
指令
含 义
diag 产生对角形数组(二维以
下)
eye
产生单位数组(二维以下)
magi 产生魔方数组(二维以下)
c
ones 产生全1数组
指令
含 义
rand 产生均匀分布随机数
组
rand 产生正态分布随机数
n
组
zeros 产生全0数组
3. 一维数组的子数组寻访和赋值
x=[0 1 2 3 4 5];
x(3)
x([1 2 3]), x([1 2 3]')
x(4:6)=x([1,2,3])
x(3:end)
% x(4:6)=[0,1,2]
% end表示最后一个下标
x(3:-1:1)
x( find (x>2) )
注意: 数组的第一个元素为x(1), 与C语言中第一个元
素为x[0]不同
上机问题
 第3题Matlab6.5 版符号限定假设对解方程根不起作用。
S=
%23题 解为一个求解变量
[ 1/2*(-5*x^2+4*C1)^(1/2)]
clear, syms x y S
[ -1/2*(-5*x^2+4*C1)^(1/2)]
S = dsolve('Dy*y/5+x/4=0','x')
ezplot(subs(S(1),'C3',1),[-2,2 -2,2],1), hold on
ezplot(subs(S(2),'C3',1),[-2,2 -2,2],1)
%25题 解为两个求解变量
S=dsolve('Df=3*f+4*g','Dg=-4*f+3*g','f(0)=0','g(0)=1','x')
S=
f: [1x1 sym]
g: [1x1 sym]
disp([blanks(6), 'S.f', blanks(18),'S.g'])
disp([S.f,S.g])
S.f
S.g
[ exp(3*x)*sin(4*x), exp(3*x)*cos(4*x)]
上机问题
findsym(expression,n) %当n大于实际的基本变量数
目时,按字母表顺序列出所有本符号变量;当n小于等于
时实际的基本变量数目时,按与x距离最近的顺序列出。
symvar(expression,n)
能用。
syms x y w t u
z=x^2+y+3*t+w^3+u;
findsym(z,8)
ans =
t, u, w, x, y
多一个参数n在Matlab6.5中不
findsym(z,5)
ans =
x,y,w,u,t
findsym(z,3)
ans =
x,y,w
review
3.2.1 一维数组的创建和寻访
1. 递增/递减一维数组的创建:
(1) 冒号生成法:
array=a: inc: b
<向量>
(2) 线性(或对数)定点采样法
在设定的总点数下, 均匀采样生成一维行数组.格式为:
x=linspace (a, b, n)
2.其他类型一维数组的创建:
(1) 逐个元素输入法:
x=[1,2,3,4,5]'
(2) 运用MATLAB函数生成法:
均匀分布随机数组rand(1,n), 全1数组ones(1,n)
3.2.2 二维数组的创建
1.小规模数组的直接输入法
• 创建二维数组与创建一维数组的方式类似。在创建二
维数组时,整个输入数组以方括号[ ]为其首尾。用逗
号或者空格区分同一行的不同元素,用分号或者回车
(Enter)区分不同行。
2.中规模数组的数组编辑器创建法
例3.2.4
3.中规模数组的M文件创建法
利用M文件创建和保存数组
1. 编写M文件并运行
AM=[100,101,102;103,104,105;106,107,108],
保存为文件名MyMatrix .m
2. 在命令窗中输入MyMatrix
3.2.2 二维数组的创建
4.利用MATLAB函数创建数组
指令
含 义
指令
含 义
diag
产生对角形数组(二维以下) rand 产生均匀分布随机数组
eye
产生单位数组(二维以下)
magic 产生魔方数组(二维以下)
ones
randn 产生正态分布随机数组
zeros 产生全0数组
产生全1数组
【例3.2-5】标准数组产生的演示。
ones(2,4)
ans =
1 1 1
1 1 1
1
1
randn('state',0)
randn(2,3)
ans =
-0.4326 0.1253 -1.1465
-1.6656 0.2877 1.1909
D=eye(3)
D=
1 0
0 1
0 0
diag(D)
ans =
1
1
1
0
0
1
3.2.3 二维数组元素的标识和寻访
1) 全下标标识
数组名(行下标m, 列下标n)---数组的第m行n列的元素.
A=[1,2,3; 4,5,6]
A=
A(2,3)=6
1
2
3
2) 单下标标识
4 5 6
只用一个下标来指定元素在数组中的位置-将数组中所
有的元素按照从上到下(列), 从左到右的方法从1开始
编号, 其编号就是单下标. A(4)=2
| 1 ① 2 ④ 3 ⑦ | A(:)—按单下标方式列出
A= | 4 ② 5 ⑤ 6 ⑧ | 全部元素,组成列向量。
|7 ③ 8 ⑥ 9 ⑨ |
A(:)=[1,4,7,2,5,8,3,6,9]'
3) 逻辑1标识法
【例3.2-6】数组标识与寻访
A=[1, 2, 3, 4, 5];
L=logical([1, 0, 1, 0, 1])
A(L)
ans=[1,3,5]
A=zeros(2,6)
A(2,1:2:5)=[-1,-3,-5]
A =0 0 0 0 0 0
A =1 3 5 7 9 11
0 0 0 0 0 0
-1 4 -3 8 -5 12
A(:)=1:12
B=A([1,2,2,2],[1,3,5] )
A =1 3 5 7 9 11
B =1 5 9
2 4 6 8 10 12
-1 -3 -5
A(2,4)
-1 -3 -5
ans = 8
-1 -3 -5
A(8)
L=A<3
ans = 8
A([1,2,5,6]') L =
A(:,[1,3])
1 0 0 0 0 0
ans =
ans =1 5
1 0 1 0 1 0
1
2 6
A(L)=NaN
2
A(:,4:end)
A=
5
ans =7 9 11
NaN 3 5 7 9 11
6
8 10 12
NaN 4 NaN 8 NaN 12
3.2.4 数组操作技法综合
【例 3.2-7】数组操作函数reshape, diag, repmat的用
法;空阵 [ ] 删除子数组的用法。
a=1:8
A=reshape(a,4,2)
A=reshape(A,2,4)
a=
1 2 3 4 5 6 7 8
A=
1 5
2 6
3 7
4 8
A=
1 3 5 7
2 4 6 8
b=diag(A)
b=
1
4
B=diag(b)
B=
1 0
0 4
D1=repmat(B,2,4) %
D1 =
1 0 1 0 1 0 1
0 4 0 4 0 4 0
1 0 1 0 1 0 1
0 4 0 4 0 4 0
D1([1,3],: )=[ ] % 删除1,3行
D1 =
0 4 0 4 0 4 0
0 4 0 4 0 4 0
0
4
0
4
4
4
3.2.4 数组构作技法综合
【例3.2-8】函数flipud, fliplr, rot90对数组的操作体现着“矩阵变换”
A=reshape(1:9,3,3)
A=
1 4 7
2 5 8
3 6 9
B=flipud(A)
B=
3 6 9
2 5 8
1 4 7
C=fliplr(A) %
C=
7 4 1
8 5 2
9 6 3
D=rot90(A,2) %逆时针旋转
D=
9 6 3
8 5 2
7 4 1
3.3 数组运算
3.3.1数组运算的由来和规则
1. 函数关系数值计算模型的分类
• 个别的,无规律的数据集所执行的函数关系运算;
• 一组有规律数据需要反复所执行的函数关系运算;
• 一组有规律数据按矩阵运算法则执行的函数关系运算。
对一般编程,后两种运算程序包含一重或多重循环体。
2. 提高程序执行性能的三大措施
JIT(just in time)-Accelerator; 数组运算;向量或矩阵
运算。
3.3.1数组运算的由来和规则
3. 数组运算规则
•
数组运算是指每个对应元素之间的运算,比如对应
元素相加,相减,相乘,相除等,而矩阵运算则服
从线性代数中的矩阵运算规则.
•
数组运算符是 .opr, opr运算符为+,-, *, /, \, ^, '
•
矩阵运算则没有在操作符左边加 . , matlab中矩阵
的运算是按照线性代数中的定义进行的。
•
详细的数组运算符意义见表3.3-1 .
数组的加减法
数组加减法为数组元素的加减法,与矩阵加减
法相同。利用运算符“+”和“-”实现该运算。
需要注意的是相加或相减的两个数组必须有相
同的维数,或者是数组与数值相加减。
数组的乘除法
数组乘除为元素的乘除,通过运算符“.*”和“./”来
实现。运算时需要两个数组有相同的维数,或者数
组与数值相乘除。
数组的乘方
• 数组乘方用符号“.^”实现。数组乘方运算以三种方
式进行。
– 底为数组,指数为标量的形式。这种形式的结果
是将数组的每个元素进行指数相同的乘方。返回
的结果为与底维数相同的数组,结果数组的每个
元素为底中相应元素的乘方。
– 底为标量,指数为数组的形式。该形式返回的结
果为数组,维数与指数数组相同。结果数组的每
个元素为底以指数数组相应元素为指数做乘方的
结果。
– 底和指数都是数组的形式。此时两个数组需要有
相同的维数。返回结果为一个数组,维数与前面
两个数组相同,每个元素为底数数组和指数数组
做乘方的结果。
函数 f (.) 的数组运算规则
函数数组运算规则的定义
x11 x12 … x1n
x21 x22 … x2n
对于(m x n)数组X=
…
… … …
=[xij] m x n
xm1 xm2 … xmn
函数 f (.) 的数组运算规则是指:
f (X) = [ f (xij) ]m x n
也就是对数组中每个元素都实施同样的操作.
4. 数组运算符和数组运算函数
三角函数和双曲函数
名称
acos
acosh
acot
acoth
acsc
acsch
asec
asech
asin
含义
反余弦
反双曲余弦
反余切
反双曲余切
反余割
反双曲余割
反正割
反双曲正割
反正弦
名称
asinh
atan
atan2
atanh
cos
cosh
cot
coth
csc
含义
反双曲正弦
反正切
四象限反正切
反双曲正切
余弦
双曲余弦
余切
双曲余切
余割
名称
csch
sec
sech
sin
sinh
tan
tanh
含义
双曲余割
正割
双曲正割
正弦
双曲正弦
正切
双曲正切
指数函数
名称
含 义 名称
含 义
名称 含 义
exp 指数(ex) log10 常用对数
pow2 2的幂
log 自然对数 log2 以2为底对数 sqrt
平方根
复数函数
名称 含 义
名称 含 义
名称 含 义
abs
模或绝对值 conj 复数共轭 real 复数实部
angle 相角(弧度) imag 复数虚部
圆整函数与求余函数
名称
ceil
fix
floor
mod
含
义
向+∞圆整函数
向0圆整函数
向-∞圆整函数
模除求余
名称
rem
round
sign
含
义
求余数
向最近整数圆整函数
符号函数 - (-1), + (1)
0 (0)
坐标变换函数
名称
含
义
名称
含
义
cart2sph
直角坐标变球坐标
pol2cart
极坐标变直角坐标
cart2pol
直角坐标变极坐标
sph2cart
球坐标变直角坐标
3.3.2 数组运算与向量化编程
u
【例 3.3-1】欧姆定律: r  ,其中 r,u,i 分别是电阻 ( 欧姆 ) 、
i
电压(伏特)、电流(安培)。验证实验:据电阻两端施加的
电压,测量电阻中流过的电流,然后据测得的电压、电流计算
平均电阻值。(测得具体数据见程序)。
clear
vr=[0.89, 1.20, 3.09, 4.27, 3.62, 7.71, 8.99, 7.92, 9.70, 10.41];
ir=[0.028, 0.040, 0.100, 0.145, 0.118, 0.258, 0.299, 0.257, 0.308, 0.345];
L=length(vr);
for k=1:L
r(k)=vr(k)/ir(k);
向量化编程
end
r=vr./ir
非向量化
sr=0;
程序
rm=mean(r)
for k=1:L
sr=sr+r(k);
end
rm=sr/L
3.3.2 数组运算与向量化编程
【例 3.3-2】用间距为0.1的水平线和垂直线均匀分割 x [5,5],
y [2.5, 2.5]的矩形域,在所有水平线和垂直线交点上计算函
数y=sin|xy| 的值,并图示。
非向量化程序
向量化程序
[X,Y]=meshgrid(x,y);
Z=sin(abs(X.*Y));
clear
比较两个数组是否相 norm(Z-Z0)
x=-5:0.1:5;
等(2范数接近eps)
ans =
y=(-2.5:0.1:2.5)';
0
N=length(x);
绘制二元函数图形
M=length(y);
for ii=1:M
surf(X,Y,Z)
for jj=1:N
xlabel('x')
Z0(ii,jj)=sin(abs(x(jj)*y(ii)));
ylabel('y')
end
shading interp
end
view([190,70])
3.4 “非数”和“空”数组
3.4.1 非数NaN
按IEEE规定, 0/0, ∞/∞, 0*∞等运算都会产生非数, 在
matlab 中记为nan.
它具有以下性质:
1) nan参与运算所得结果也是nan,即具有传递性.
2) 非数没有大小概念,不能比较两个非数的大小.
功能:
真实记述0/0, ∞/ ∞, 0* ∞运算的后果; 避免可
能因以上运算而造成的程序执行的中断;在数据可视
化中,用来裁减图形.
【例3.4-1】非数的产生和性质演示
(1) 非数的产生
a=0/0, b=0*log(0), c=inf - inf
(2) 非数的传递性
0*a, sin (a);
(3) 非数的属性判断
class (a), isnan (a)
isnan----唯一能正确判断非数的指令
3.4.2“空”数组
空数组的功能:
空数组没参与运算时,计算结果中的空可以合理地解
释所得结果的含义(如在某数组中寻找满足一定条件的
数据,结果没有,得到空数组,表示没有满足条件的元素);
a=[1,2,3]; f_array=find (a<0)
f_array = Empty matrix: 1-by-0
运用空数组对其他非空数组赋值,可以改变数组的大
小,但不能改变数组的维数.
size(A)
A=reshape(-4:5,2,5)
A=
-4
-3
-2
-1
0
1
2
3
4
5
size(A)
ans =
2 5
A(:,[2,4])=[ ]
A=
-4
-3
0
1
4
5
ans =
2 3
ndims(A)
ans =
2
3.4.2“空”数组
运用空数组对其他非空数组赋值,可以改变数组的大
小,但不能改变数组的维数.
A=rand(2,3,2,4);
size(A)
ans =
2 3 2 4
ndims(A)
ans =
4
A(:, :,[1,2] ,:)=[ ]
A=
Empty array: 2-by-3-by-0-by-4
size(A)
ans =
2 3 0 4
ndims(A)
ans =
4
【例3.4-3】关于“空”数组的算例。
(1)创建 ”空” 数组的几种方法
a=[ ]
b=ones(2,0),c=zeros(2,0),d=eye(2,0)
f=rand(2,3,0,4); array3=1:-5;
(2)空数组的属性
class(a)
isnumeric(a)
isempty(a) %空数组的判断
ans =
double
ans =
1
ans =
1
which a
ndims(a)
size(a)
a is a variable.
ans =
2
ans =
0 0
3.5 关系操作和逻辑操作
•
•
•
3.5.1 关系操作
3.5.2 逻辑操作
3.5.3 常用逻辑函数
3.5 关系操作和逻辑操作
matlab 的约定
1) 在所有关系表达式和逻辑表达式中,作为输入的任
何非0数都被看作逻辑真,只有0才被认为是逻辑假.
2) 所有关系表达式和逻辑表达式的计算结果,即输出,
是一个由0和1作成的逻辑数组. 其中1表示真, 0表
示假.
3) 逻辑数组是一种特殊的数值数组,它表示着对事物
的判断结论“真”与”假“
3.5.1关系操作
含
指
令
<
小于
<= 小于等于
>
大于
说明:
义
指
令
>=
==
~=
含
义
大于等于
等于
不等于
1) 标量可以与任何维数的数组进行比较,比较在此标量
和数组 每个元素之间进行,因此比较结果为与被比较数
组同维的数组.
2) 数组进行比较时,两数组必须是同维的, 结果也得到
一个同维的数组.
| 2, 4, 6 |
A=| 3, 5, 7 |
| 1, 8, 9 |
| 1, 3, 5 |
B= | 4, 6, 8 |
| 2, 7, 9 |
|1, 1, 1|
A>B= |0, 0, 0|
|0, 1, 0|
|0, 0, 1|
A>5= |0, 0, 1|
|0, 1, 1|
A=[2 4 6;3 5 7;1 8 9]
find(A>5) => ans=[6,7,8,9]' % 得到数组下标,单下标
A(find(A>5)) => ans=[ 8,6,7,9]'
A= 2 4 5
A(find(A>5))=5; % A(A>5)=5
3
5
5
【例3.5-2】关系运算应用。求近似极限,修补图形缺口
sin (t)/t, t∈[-2π,2π]
t=-2*pi : pi/10 : 2*pi;
y=sin(t)./t;
%在t=0处产生非数
tt=t+(t==0)*eps ;
% 处理分母为0的点
yy=sin(tt)./tt;
subplot(2,1, 1),plot(t,y);
axis([-7,7,-0.5,1.2]);
xlabel('t'),ylabel('y'),title('残缺图形');
subplot(2,1, 2),plot(tt,yy);
axis([-7,7,-0.5,1.2]);
xlabel ('t'), ylabel('yy'), title('完整图形')
tt=t;
tt(find(tt==0))=eps;
tt(tt==0)=eps;
3.5.2 逻辑操作
说明:
指令
含义
&
与
|
或
~
非
xor
异或
1) 标量可以与任何维的数组运算.逻辑运算在标量与数
组每个元素间进行, 因此运算结果是与参与运算的数组
维数相同的数组.
2) 数组之间也可以进行逻辑运算,参与运算的必须维
数相同.此时运算在两数组同位置上的元素之间进行.因
此运算结果是与参与运算的数组维数相同的数组.
【例3.5-3】逻辑操作和关系操作。本例演示:逻辑、关系
操作的组合;xor的作用。
%(1)
A=[-2,-1,0,0,1,2,3]
L1=~(A>1)
L2=(A>0)&(A<2)
%(2)
A,B=[0,-1,1,0,1,-2,-3]
C=xor(A,B)
A=
-2 -1
L1 =
1 1
L2 =
0 0
A=
-2 -1
B=
0 -1
C=
1 0
逻辑操作中任何非零数都看作逻辑1
0
0
1
2
3
1
1
1
0
0
0
0
1
0
0
0
0
1
2
3
1
0
1
-2 -3
1
0
0
0
0
【例3.5-4】试绘制如图3.5-2最下那幅子图所示的“正
弦波y=sint (t∈[0,3π] )的削顶半波整流波形”,削顶发
生在每个周期的[600,1200]之间。
sin t
z
0
(sin t  0)
(sin t  0)
[0, pi], [2pi, 3pi]
t<pi | t>2pi, z=sin(t)*1; 否则 z=sin(t)*0 ; z=sin(t)*((t<pi)|(t>2*pi))
t=linspace(0, 3*pi, 500); y=sin(t);
z1=((t<pi)|(t>2*pi)).*y; %半波整流波形
w=(t>pi/3&t<2*pi/3)+(t>7*pi/3&t<8*pi/3); %削顶区间置1,其余为零
wn=~w; %削顶区间置零,其余为1
z2=w*sin(pi/3)+wn.*z1;
%削顶半波整流波形
subplot(4,1,1),plot(t,y, ':r '), axis([0 10 -1.5 1.5]); ylabel('y');
subplot(4,1,2),plot(t,z1, ':r '), axis([0 10 -0.2 1.5]); ylabel('z1');
subplot(4,1,3),plot(t,wn, ':r '), axis([0 10 -0.2 1.5]); ylabel('wn');
subplot(4,1,4),plot(t,z2,'-b'), axis([0 10 -0.2 1.5]); ylabel('z2');
3.5.2 常用逻辑函数
指令
含
义
指令
含
义
all (A)
A中元素全为非0时为1,
否则0
isfinite(x)
X中有限大小元素的位置取1,
其余取0
any(A)
A中有非0则为1
isempty(x)
X为空,则为1
false
创建全0逻辑数组
isspace(x)
空格元素处取1,其余取0
true
创建全1逻辑数组
isletter(x)
X中英文字母处取1,其余为0
logical
创建逻辑数组, 1对应输入 isprime(x)
数组中非0元素, 其余为0
质数元素位置处取1,其余取
0
isreal(x) 实数元素位置处取1,其
余取0
isnan(x)
isinf(x)
isequal(A,B) A,B对应元素相等时,相应
元素位置取1,否则取0
x中无穷大处位置取1,其
余取0
判断数组中元素是否为NaN
数据类型判断指令
指
令
含
义
指
令
含
义
isa(x,’name’)
判断x类型
ishandle (x)
判断是否图柄代号
ischar (x)
判断x是否字符串
islogical (x)
判断是否逻辑数据
isglobal (x)
判断是否全局变量 isnumeric (x)
判断是否数值
iscell (x)
判断x是否元胞
isobject (x)
判断是否对象
iscellstr (x)
判断x是否字符串
元胞数组
isfield (x,’ name’)
判断name是否架构x
的域名
isstruct (x)
判断是否是架构
issparse (x)
判断矩阵是否稀疏
第二章习题 有关问题
%习题2-6
clear all; syms z k; syms a positive
fk =a^k*z^(-k)
s=symsum(fk,k,0,inf)
%在6.5版本上得到结果s =-z/(a - z)。
%在2010版本上用以上指令只能得到如下解,
%s =piecewise([a = z, Inf], [a <> z, limit(a^k/(z^k*(a/z - 1)), k =
Inf) - z/(a - z)])
limit(a^k/(z^k*(a/z - 1)), k = Inf)并不为零,因为不确定a是否小
于z
% s1=ztrans(a^k,k,z) % 结果s1 =-z/(a - z)
第二章习题 有关问题
%习题2-23
clear, syms x y S C3
S = dsolve('Dy*y/5+x/4=0','x')
%解为 S =
%
2^(1/2)*(C3 - (5*x^2)/8)^(1/2)
%
-2^(1/2)*(C3 - (5*x^2)/8)^(1/2)
ezplot(subs(S(1),'C3',1),[-2,2 -2,2],1), hold on
ezplot(subs(S(2),'C3',1),[-2,2 -2,2],1) % 用此两条指令绘圆,在 y=0
处有间隙
ezplot(subs(y^2-(S(1))^2, 'C3', 1),[-2,2 -2,2],2) %用椭圆方程绘图不
产生间隙
colormap([0 0 1]) %用ezplot(fun)绘图时,如果fun中只有一个参数,
绘图的颜色是蓝色;如果fun中有两个参数,绘图的颜色是绿色,
此指令设置图形颜色为蓝。
grid on
习题3 (Page142)
1-8 题全做