教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 高等教育 >

MATLAB作业1 参考答案

来源:网络收集 时间:2026-05-05
导读: MATLAB作业1参考答案 1 、在你的机器上安装MATLAB 语言环境,并键入demo 命令,由给出的菜单系统和对话框原型演示程序,领略MATLAB 语言在求解数学问题方面的能力与方法。 【求解】略. 2、启动MATLAB 环境,并给出语句tic, A=rand(500); B=inv(A); norm(A*B-

MATLAB作业1参考答案

1 、在你的机器上安装MATLAB 语言环境,并键入demo 命令,由给出的菜单系统和对话框原型演示程序,领略MATLAB 语言在求解数学问题方面的能力与方法。 【求解】略.

2、启动MATLAB 环境,并给出语句tic, A=rand(500); B=inv(A); norm(A*B-eye(500)),toc,试运行该语句,观察得出的结果,并利用help 命令对你不熟悉的语句进行帮助信息查询,逐条给出上述程序段与结果的解释。

【求解】在MATLAB 环境中感触如下语句,则可以看出,求解500?500随机矩阵的逆,并求出得出的逆矩阵与原矩阵的乘积,得出和单位矩阵的差,得出范数。一般来说,这样得出的逆矩阵精度可以达到10?12。

>> tic, A=rand(500); B=inv(A); norm(A*B-eye(500)), toc ans =

1.2333e-012

Elapsed time is 1.301000 seconds.

3、试用符号元素工具箱支持的方式表达多项式f(x)?x?3x?4x?2x?3x?6,并令

x?s?1s?15432,将f(x) 替换成s 的函数。

【求解】可以先定义出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)) F =

(s-1)^5/(s+1)^5+3*(s-1)^4/(s+1)^4+4*(s-1)^3/(s+1)^3+ 2*(s-1)^2/(s+1)^2+3*(s-1)/(s+1)+6

syms x s

x=(s-1)./(s+1);

y=x.^5+3*x.^4+4*x.^3+2*x.^2+3*x+6; y

simple(y) y=

19 - (72*s^4 + 120*s^3 + 136*s^2 + 72*s + 16)/(s + 1)^5

4、用MATLAB 语句输入矩阵A 和B

?1?4A???2??3233232444??1?,1??1??1?4?4?1B???2?3??3?2jjjj2?3j3?2j3?2j2?3j3?2j2?3j4?1j4?1j4?1j??1?4j? 1?4j??1?4j?前面给出的是4 ×4 矩阵,如果给出A(5; 6) = 5 命令将得出什么结果? 【求解】用课程介绍的方法可以直接输入这两个矩阵 >> A=[1 2 3 4; 4 3 2 1; 2 3 4 1; 3 2 4 1] A = 1 2 3 4 4 3 2 1 2 3 4 1 3 2 4 1

若给出A(5,6)=5 命令,虽然这时的行和列数均大于B 矩阵当前的维数,但仍然可以执行该语句,得出 >> A(5,6)=5 A =

1 2 3 4 0 0 4 3 2 1 0 0 2 3 4 1 0 0 3 2 4 1 0 0 0 0 0 0 0 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]; B =

1.0000 + 4.0000i 2.0000 + 3.0000i 3.0000 + 2.0000i 4.0000 + 1.0000i 4.0000 + 1.0000i 3.0000 + 2.0000i 2.0000 + 3.0000i 1.0000 + 4.0000i 2.0000 + 3.0000i 3.0000 + 2.0000i 4.0000 + 1.0000i 1.0000 + 4.0000i 3.0000 + 2.0000i 2.0000 + 3.0000i 4.0000 + 1.0000i 1.0000 + 4.0000i

5、假设已知矩阵A ,试给出相应的MATLAB 命令,将其全部偶数行提取出来,赋给B 矩阵,用A =magic(8) 命令生成A 矩阵,用上述的命令检验一下结果是不是正确。 【求解】魔方矩阵可以采用magic() 生成,子矩阵也可以提取出来 >> A=magic(8), B=A(2:2:end,:) A =

64 2 3 61 60 6 7 57 9 55 54 12 13 51 50 16 17 47 46 20 21 43 42 24 40 26 27 37 36 30 31 33 32 34 35 29 28 38 39 25 41 23 22 44 45 19 18 48 49 15 14 52 53 11 10 56 8 58 59 5 4 62 63 1 B =

9 55 54 12 13 51 50 16 40 26 27 37 36 30 31 33 41 23 22 44 45 19 18 48 8 58 59 5 4 62 63 1

?h,?6、用MATLAB 语言实现下面的分段函数y?f(x)??h/Dx,??h,?x?Dx?D。 x??D【求解】两种方法,其一,巧用比较表达式解决 >> y=h*(x>D) + 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,但不能处理矩阵问题。

637、用数值方法可以求出S??i?02?1?2?4?8???2i62?263,试不采用循环的形式求出

和式的数值解。由于数值方法采用double 形式进行计算的,难以保证有效位数字,所以结果不一定精确。试采用符号运算的方法求该和式的精确值。 【求解】用符号运算的方式可以采用下面语句 >> sum(sym(2).^[1:63]) ans =

18446744073709551614

由于结果有19 位数值,所以用double 型不能精确表示结果,该数据类型最多表示16 位有效数字。其实用符号运算方式可以任意保留有效数字,例如可以求200 项的和或1000 项的和可以由下面语句立即得出。 >> sum(sym(2).^[1:200]) ans =

3213876088517980551083924184682325205044405987565585670602750 >> sum(sym(2).^[1:1000])

第一种方法 i=0; s=0; for i=0:63 s=s+2.^i; end s

s =

1.8447e+19 第二种方法 s=0;

i=0;

while(i<=63) s=s+2.^i; i=i+1; end [s,i]

ans = 1.0e+19 *

1.8447 0.0000 第三种方法 s=0; i=1:64;

s=sum(2.^(i-1)+s)

s =

1.8447e+19

8、编写一个矩阵相加函数mat_add() ,使其具体的调用格式为A=mat_add(A1 ,A2 ,A3 ,…) ,要求该函数能接受任意多个矩阵进行加法运算。(注:varargin 变量的应用) 【求解】可以编写下面的函数,用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

a=[1:3];b=[2 2 2];c=[3 2 1]; mat_add(a,b,c)

ans =

6 6 6

9 已知Fibonacci 数列由式ak?ak?1?ak?2,k?3,4,?可以生成,其中初值为a1?a2?1,试编写出生成某项Fibonacci 数值的MATLAB 函数,要求

①函数格式为y=fib(k) ,给出k 即能求出第k 项ak并赋给 y 向量; ②编写适当语句,对输入输出变量进行检验,确保函数能正确调用;

③利用递归调用的方式编写此函数。

(注:递归的调用方式速度较慢,比循环语句慢很多,所以不是特别需要,解这样问题没有必要用递归调用的方式。)

【求解】假设fib(n) 可以求出Fibonacci 数列的第n 项,所以对n >= 3 则可以用

k=fib(n-1)+fib(n -2) 可以求出数列的n + 1 项,这可以使用递归调用的功能,而递归调用的出口为1。综上,可以编写出M-函数。 function y=fib(n) if round(n)==n & n>=1

if n>=3

y=fib(n-1)+fib(n-2); else, y=1; end else

error('n must be positive integer.') end

例如,n = 10 可以求出相应的项为 >> fib(10) ans = 55

现在需要比较一下递归实现的速度和循环实现的速度 >> tic, fib(20), toc ans = 832040

elapsed_time = 62.0490

>> tic, a=[1 1]; for i=3:30, a(i)=a(i-1)+a(i-2); end, a(30), toc ans = 832040

elapsed_time = 0.0100

应该指出,递归的调用方式速度较慢,比循环语句慢很多,所以不是特别需要,解这样问题没有必要用递归调用的方式。

10、下面给出了一个迭代模型

?xk?1?1?yk?1.4xk ??yk?1?0.3xk2写出求解该模型的M …… 此处隐藏:2548字,全部文档内容请下载后查看。喜欢就下载吧 ……

MATLAB作业1 参考答案.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/616168.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)