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;
input命令    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          圆周长
%2006230日编
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.ms=1!+2!+3!+4!+5!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。