第 2 章 MATLAB 语言程序设计基础
1 启动 M ATLAB 环境,并给出语句 tic, A=rand(500); B=inv(A); norm(A*B-eye(500)),
toc,试运行该语句,观察得出的结果,并利用 help 命令对你不熟悉的语句进行帮助信息查
询,逐条给出上述程序段与结果的解释。
tic, A=rand(500); B=inv(A); norm(A*B-eye(500)), toc
ans =
1.2333e-012
Elapsed time is 1.301000 seconds.
2 试用符号元素工具箱支持的方式表达多项式 f(x) =x5 +3 x4 + 4x3 +x22+ 3x + 6,并令
s? 1
x = ,将 f(x)替换成 s的函数。
s+ 1
【求解】 可以先定义出 f 函数,则由 subs() 函数将 x 替换成 s的函数
syms s x f=x^5+3*x^4+4*x^3+2*x^2+3*x+6;
F=subs(f,x,(s-1)/(s+1))
3 用 M ATLAB 语句输入矩阵 A 和 B 矩阵
前面给出的是 4× 4矩阵,如果给出 A (5,6)= 5命令将得出什么结果?
【求解】 用课程介绍的方法可以直接输入这两个矩阵
A=[1 2 33 24; 1 ;4 2 3 4 1; 3 2 4 1]
若给出 A (5,6)=5 命令,虽然这时的行和列数均大于 B 矩阵当前的维数,但仍然可以执行该
语句,得出
A(5,6)=5 复数矩阵也可以用直观的语句输入
B=[1+4i 2+3i 3+2i 4+1i; 4+1i 3+2i 2+3i 1+4i;
2+3i 3+2i 4+1i 1+4i; 3+2i 2+3i 4+1i 1+4i];
4 假设已知矩阵 A ,试给出相应的 M ATLA B 命令,将其全部偶数行提取出来,赋给 B 矩阵,
用 A = magic(8) 命令生成 A 矩阵,用上述的命令检验一下结果是不是正确。
【求解】 魔方矩阵可以采用 magic() 生成,子矩阵也可以提取出来
A=magic(8), B=A(2:2:end,:)
h,x D
5 用 M ATLAB 语言实现下面的分段函数 y = f(x)= h/D x,| x |6 D
。
?h,x ?D 【求解】 两种方法,其一,巧用比较表达式解决
y=h*(xD) + h/D*x.*(abs(x)=D) -h*(x-D);
另外一种方法,用循环语句和条件转移语句
for i=1:length(x)
if x(i)D, y(i)=h;
elseif abs(x(i))=D, y(i)= h/D*x(i);
else, y(i)=-h; end
end
其中,前者语句结构简单,但适用范围更广,允许使用矩阵型 x,后者只能使用向量型的
x,但不能处理矩阵问题。
X
63
6 用数值方法可以求出 S = 2i = 1 + 2+ 4·+·· +8 +2
62 + 263,试不采用循环的形式求出
i=0
和式的数值解。由于数值方法采用 double 形式进行计算的,难以保证有效位数字,所以结果
不一定精确。试采用符号运算的方法求该和式的精确值。
【求解】 用符号运算的方式可以采用下面语句
sum(sym(2).^[1:63])
由于结果有 19位数值,所以用 double 型不能精确表示结果,该数据类型最多表示 16位有效
数字。其实用符号运算方式可以任意保留有效数字,例如可以求 200 项的和或 1000 项的和可
以由下面语句立即得出。
sum(sym(2).^[1:200])
sum(sym(2).^[1:1000])
7 matadd(),使其具体的调用格式为 A =mat
要求该函数能接受任意多个矩阵进行解法运算。
add(A 1,A 2,A 3,· · · ),
【求解】 可以编写下面的函数,用 varargin 变量来表示可变输入变量
function A=mat_add(varargin)
A=0;
for i=1:length(varargin), A=A+varargin{i}; end
如果想得到合适的错误显示,则可以试用 try, catch 结构。
function A=mat_add(varargin)
try
A=0;
for i=1:length(varargin), A=A+varargin{i}; end
catch, error(lasterr); end
8 自己编写一个 M ATLAB 函数,使它能自动生成一个 m × m 的 H ankel矩阵,并使其调用格
式为 v=[h1,h2,hm,hm +1,· · ·,h2m ?1]; H =
原创力文档

文档评论(0)