概述
第一章
例1.1
分别绘制函数和的曲线。
x=-2*pi:pi/180:2*pi;
plot(x,2.^(-abs(x)),':',x,sin(x));
例1.2
求方程 2x5-3x3 +71x2-9x+13=0的全部根。
p=[2,0,-3,71,-9,13];
x=roots(p)
例1.3
求解线性方程组。
a=[2,3,-1;8,2,3;45,3,9];
b=[2;4;23];
x=inv(a)*b
例1.4 求积分
quad('x.*log(1+x)',0,1)
第二章
例2.1 计算表达式
的值,并将结果赋给变量x,然后显示出结果。
x=(5+cos(47*pi/180))/(1+sqrt(7)-2*i)
%计算表达式的值
例2.2 利用M文件建立MYMAT矩阵。
(1)启动有关编辑程序或MATLAB文本编辑器(见第4章),并输入待建矩阵:
MYMAT=[101,102,103,104,105,106,107,108,109;
201,202,203,204,205,206,207,208,209;
301,302,303,304,305,306,307,308,309];
(2)把输入的内容存盘(设文件名为mymatrix.m)。
(3)在MATLAB命令窗口中输入mymatrix,即运行该M文件,就会自动建立一个名为MYMAT的矩阵,可供以后使用。
例2.3 建立5阶方阵A,判断A的元素是否能被3整除。
A =[24,35,13,22,63;23,39,47,80,80; ...
90,41,80,29,10;45,57,85,62,21;37,19,31,88,76]
P=rem(A,3)==0
%判断A的元素是否可以被3整除
例2.4 在[0,3π]区间,求y=sin(x)的值。要求:
(1)消去负半波,即(π,2π)区间内的函数值置0。
(2) (,)和(,)区间内取值均为sin。
方法1:
x=0:pi/100:3*pi;
y=sin(x);
y1=(x2*pi).*y;
%消去负半波
q=(x>pi/3&x<2*pi/3)|(x>7*pi/3&x<8*pi/3);
qn=~q;
y2=q*sin(pi/3)+qn.*y1;
%按要求处理第(2)步
方法2:
x=0:pi/100:3*pi;
y=sin(x);
y1=(y>=0).*y;
%消去负半波
p=sin(pi/3);
y2=(y>=p)*p+(y
%按要求处理第(2)步
例2.5 建立矩阵A,然后找出在[10,20]区间的元素的位置。
(1) 建立矩阵A。
A=[4,15,-45,10,6;56,0,17,-45,0]
A =
4
15
-45
10
6
56
0
17
-45
0
(2) 找出大于4的元素的位置。
find(A>=10 &
A<=20)
ans =
3
6
7
例2.6 建立一个字符串向量,然后对该向量做如下处理:
(1)取第1~5个字符组成的子字符串。
(2)将字符串倒过来重新排列。
(3)将字符串中的小写字母变成相应的大写字母,其余字符不变。
(4)统计字符串中小写字母的个数。
命令如下:
ch='ABc123d4e56Fg9';
subch=ch(1:5)
%取子字符串
subch =
ABc12
revch=ch(end:-1:1)
%将字符串倒排
revch =
9gF65e4d321cBA
k=find(ch>='a'&ch<='z');
%找小写字母的位置
ch(k)=ch(k)-('a'-'A');
%将小写字母变成相应的大写字母
char(ch)
ans =
ABC123D4E56FG9
length(k)
%统计小写字母的个数
ans =
4
第三章
例3.1
分别建立3×3、3×2和与矩阵A同样大小的零矩阵。
(1) 建立一个3×3零矩阵。
zeros(3)
ans =
0
0
0
0
0
0
0
0
0
(2)
建立一个3×2零矩阵。
zeros(3,2)
ans =
0
0
0
0
0
0
(3) 设A为2×3矩阵,则可以用zeros(size(A))建立一个与矩阵A同样大小零矩阵。
A=[1 2 3;4 5 6];
%产生一个2×3阶矩阵A
zeros(size(A))
%产生一个与矩阵A同样大小的零矩阵
ans =
0
0
0
0
0
0
例3.2
建立随机矩阵:
(1) 在区间[20,50]内均匀分布的5阶随机矩阵。
(2) 均值为0.6、方差为0.1的5阶正态分布随机矩阵。
x=20+(50-20)*rand(5)
y=0.6+sqrt(0.1)*randn(5)
例3.3
将101~125等25个数填入一个5行5列的表格中,使其每行每列及对角线的和均为565。
M=100+magic(5)
例3.4
求4阶希尔伯特矩阵及其逆矩阵。
命令如下:
format rat
%以有理形式输出
H=hilb(4)
H=invhilb(4)
format short
%恢复默认输出格式
例3.5
求(x+y)5的展开式。
pascal(6)
例3.6
先建立5×5矩阵A,然后将A的第一行元素乘以1,第二行乘以2,…,第五行乘以5。
A=[17,0,1,0,15;23,5,7,14,16;4,0,13,0,22;10,12,19,21,3;...
11,18,25,2,19];
D=diag(1:5);
D*A
%用D左乘A,对A的每行乘以一个指定常数
例3.7 求方阵A的逆矩阵,且验证A与A-1是互逆的。
A=[1,-1,1;5,-4,3;2,1,1];
B=inv(A);
A*B
B*A
例3.8 用求逆矩阵的方法解线性方程组。
A=[1,2,3;1,4,9;1,8,27];
b=[5,-2,6]';
x=inv(A)*b
也可以运用左除运算符“”求解线性代数方程组。例如,本例也可以用下面的命令求解:
A=[1,2,3;1,4,9;1,8,27];
b=[5,-2,6]';
x=Ab
例3.9
用求特征值的方法解方程。
3x5-7x4+5x2+2x-18=0
p=[3,-7,0,5,2,-18];
A=compan(p);
%A的伴随矩阵
x1=eig(A)
%求A的特征值
x2=roots(p)
%直接求多项式p的零点
第四章
例4.1
建立一个命令文件将变量a,b的值互换,然后运行该命令文件。
程序1:
首先建立命令文件并以文件名exch.m存盘:
clear;
a=1:10;
b=[11,12,13,14;15,16,17,18];
c=a;a=b;b=c;
a
b
然后在MATLAB的命令窗口中输入exch,将会执行该命令文件。
程序2:
首先建立函数文件fexch.m:
function [a,b]=exch(a,b)
c=a;a=b;b=c;
然后在MATLAB的命令窗口调用该函数文件:
clear;
x=1:10;
y=[11,12,13,14;15,16,17,18];
[x,y]=fexch(x,y)
例4.2 求一元二次方程ax2+bx+c=0的根。
a=input('a=?');
b=input('b=?');
c=input('c=?');
d=b*b-4*a*c;
x=[(-b+sqrt(d))/(2*a),(-b-sqrt(d))/(2*a)];
disp(['x1=',num2str(x(1)),',x2=',num2str(x(2))]);
例4.3 计算分段函数:
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
或用以下程序:
x=input('请输入x的值:');
if x==10
y=cos(x+1)+sqrt(x*x+1);
end
if x~=10
y=x*sqrt(x+sqrt(x));
end
y
例4.4输入一个字符,若为大写字母,则输出其对应的小写字母;若为小写字母,则输出其对应的大写字母;若为数字字符则输出其对应的数值,若为其他字符则原样输出。
c=input('请输入一个字符','s');
if c>='A' &
c<='Z'
disp(setstr(abs(c)+abs('a')-abs('A')));
elseif c>='a'&
c<='z'
disp(setstr(abs(c)-
abs('a')+abs('A')));
elseif c>='0'&
c<='9'
disp(abs(c)-abs('0'));
else
disp(c);
end
例4.5 某商场对顾客所购买的商品实行打折销售,标准如下(商品价格用price来表示):
price<200
没有折扣
200≤price<500
3%折扣
500≤price<1000
5%折扣
1000≤price<2500
8%折扣
2500≤price<5000
10%折扣
5000≤price
14%折扣
输入所售商品的价格,求其实际销售价格。
price=input('请输入商品价格');
switch fix(price/100)
case
{0,1}
%价格小于200
rate=0;
case
{2,3,4}
%价格大于等于200但小于500
rate=3/100;
case
num2cell(5:9)
%价格大于等于500但小于1000
rate=5/100;
case
num2cell(10:24)
%价格大于等于1000但小于2500
rate=8/100;
case
num2cell(25:49)
%价格大于等于2500但小于5000
rate=10/100;
otherwise
%价格大于等于5000
rate=14/100;
end
price=price*(1-rate)
%输出商品实际销售价格
例4.6 矩阵乘法运算要求两矩阵的维数相容,否则会出错。先求两矩阵的乘积,若出错,则自动转去求两矩阵的点乘。
A=[1,2,3;4,5,6];
B=[7,8,9;10,11,12];
try
C=A*B;
catch
C=A.*B;
end
C
lasterr
%显示出错原因
例4.7 一个三位整数各位数字的立方和等于该数本身则称该数为水仙花数。输出全部水仙花数。
for m=100: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
disp(m)
end
end
例4.8 已知
,当n=100时,求y的值。
y=0;n=100;
for i=1:n
y=y+1/i/i;
end
y
在实际MATLAB编程中,为提高程序的执行速度,常用向量运算来代替循环操作,所以上述程序通常由下面的程序来代替:
n=100;
i=1:n;
f=1./i.^2;
y=sum(f)
例4.9 设,求s=。
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;
f1=exp(-0.5*x)*sin(x+pi/6);
s=s+(f0+f1)*h/2;
f0=f1;
end
s
上述程序来源于传统的编程思想。也可以利用向量运算,从而使得程序更加简洁,更赋有MATLAB的特点。程序如下:
a=0;b=3*pi;
n=1000; h=(b-a)/n;
x=a:h:b;
f=exp(-0.5*x).*sin(x+pi/6);
for i=1:n
s(i)= (f(i)+f(i+1))*h/2;
end
s=sum(s)
例4.10 写出下列程序的执行结果。
s=0;
a=[12,13,14;15,16,17;18,19,20;21,22,23];
for k=a
s=s+k;
end
disp(s');
例4.11 从键盘输入若干个数,当输入0时结束输入,求这些数的平均值和它们之和。
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
例4.12 根据矩阵指数的幂级数展开式求矩阵指数。
X=input('Enter X:');
E=zeros(size(X));
F=eye(size(X));
n=1;
while norm(F,1)>0
E=E+F;
F=F*X/n;
n=n+1;
end
E
expm(X)
%调用MATLAB矩阵指数函数求矩阵指数
例4.13 求[100,200]之间第一个能被21整除的整数。
for n=100:200
if rem(n,21)~=0
continue
end
break
end
n
例4.14 若一个数等于它的各个真因子之和,则称该数为完数,如6=1+2+3,所以6是完数。求[1,500]之间的全部完数。
例4.15 用筛选法求某自然数范围内的全部素数。
m=input('m=');
p=1:m; p(1)=0;
for i=2:sqrt(m)
for
j=2*i:i:m
p(j)=0;
end
end
n=find(p~=0);
p(n)
关于在p中划去i的倍数(不包括i),可利用矩阵运算一步完成,从而得到更为简洁的程序:
m=input('m=');
p=2:m;
for i=2:sqrt(m)
n=find(rem(p,i)==0&p~=i);
p(n)=[];
end
p
例4.16 编写函数文件求半径为r的圆的面积和周长。
函数文件如下:
function [s,p]=fcircle(r)
%CIRCLE
calculate the area and perimeter of a circle of radii r
%r
圆半径
%s
圆面积
%p
圆周长
06年2月30日编
s=pi*r*r;
p=2*pi*r;
将以上函数文件以文件名fcircle.m存盘,然后在MATLAB命令窗口调用该函数:
[s,p]=fcircle(10)
例4.17 利用函数文件,实现直角坐标(x,y)与极坐标(ρ,θ)之间的转换。
函数文件tran.m:
function [rho,theta]=tran(x,y)
rho=sqrt(x*x+y*y);
theta=atan(y/x);
调用tran.m的命令文件main1.m:
x=input('Please input
x=:');
y=input('Please input y=:');
[rho,the]=tran(x,y);
rho
the
例4.18 利用函数的递归调用,求n!。
function f=factor(n)
if n<=1
f=1;
else
f=factor(n-1)*n;
%递归调用求(n-1)!
end
在命令文件main2.m中调用函数文件factor.m求s=1!+2!+3!+4!+5!。
s=0;
for i=1:5
s=s+factor(i);
end
s
例4.19 任意排列问题。MATLAB提供的函数randperm(n),可以产生一个从整数1到整数n的任意排列。编写一个函数来实现randperm(n)函数的功能,即给出一个由任意数组成的行向量,然后产生这个行向量元素的任意排列。
function Y=rndprm1(X)
%RNDPRM1
用for循环产生一个行向量的任意排列
%RNDPRM1(X)产生行向量X的任意排列
[m,n]=size(X);
if m>1
error('RNDPRM1 accepts as inputs only
vectors');
end
Y=[];
%从一个空矩阵开始
l=n;
%X的元素个数
for i=1:n
k=1+fix(l*rand);
%随机选择Y的下一个元素的位置
x=X(k);
%被选择的元素
Y=[Y,x];
%将X添加到Y中
X(k)=[];
%从X中删除x元素
l=l-1 ;
%更新X的元素个数
end
第二个程序用函数的递归调用:
function Y=rndprm2(X)
%RNDPRM2
用递归调用产生一个行向量的任意排列
%RNDPRM2(X)产生一个X的任意排列
[m,n]=size(X);
l=n;
if m>1
error('RNDPRM2 accepts as inputs only
vectors')
end
if n<=1
Y=X;
else
k=1+fix(l*rand);
%随机选择Y的下一个元素的位置
x=X(k);
%被选择的元素
X(k)=[];
%从X中删除x元素
Z=rndprm2(X);
%将剩下的元素随机排列
Y=[Z,x];
%构造输出向量
l=l-1;
end
例4.20 nargin用法示例。
函数文件examp.m:
function fout=charray(a,b,c)
if nargin==1
fout=a;
elseif nargin==2
fout=a+b;
elseif nargin==3
fout=(a*b*c)/2;
end
命令文件mydemo.m:
x=[1:3];
y=[1;2;3];
examp(x)
examp(x,y')
examp(x,y,3)
例4.21 全局变量应用示例。
先建立函数文件wadd.m,该函数将输入的参数加权相加。
function f=wadd(x,y)
global ALPHA BETA
f=ALPHA*x+BETA*y;
在命令窗口中输入:
global ALPHA BETA
ALPHA=1;
BETA=2;
s=wadd(1,2)
最后
以上就是紧张毛衣为你收集整理的matlab计算表达式 k,刘卫国 Matlab 例题 1-3章的全部内容,希望文章能够帮你解决matlab计算表达式 k,刘卫国 Matlab 例题 1-3章所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复