搜档网
当前位置:搜档网 › MATLAB与GPU编程结合应用

MATLAB与GPU编程结合应用

MATLAB与GPU编程结合应用
MATLAB与GPU编程结合应用

MATLAB与GPU编程结合应用

多核服务器以及多线程技术使科学家,工程师以及财务分析师能够加快处理多个学科内的计算密集型应用。现在,另一种硬件承诺提供更高的计算性能,那就是GPU。

GPU最初用于加速图形渲染,现在越来越多地应用于科学计算。和传统的CPU只包括少数的几个核不同,GPU由整型和浮点处理器组成的大规模并行矩阵以及专用的高速内存构成。如图1所示,一个典型的GPU包含数百个小型处理器。

图1. CPU和GPU的核心数对比

上述配置极大地增加了GPU的吞吐量,但同时也要付出代价。首先,内存访问很有可能会出现瓶颈。进行计算前数据必须从CPU发送到GPU,计算完成后,数据必须从GPU发送到CPU。因为GPU通过PCI-E总线与主机的CPU连接,但是内存访问要比传统的CPU慢很多。这意味着整体的计算加速受限于算法中用到的数据转换器数目。其次,采用C或Fortran进行GPU编程需要不同

的心智模型和技能,这很困难而且需要很长的时间才能达到。此外,针对特定的GPU你必须花费时间调整代码以优化应用性能。

本文演示了并行计算工具箱的功能特性,只需要对MATLAB代码进行简单的修改就能够在GPU上运行。我们通过使用波谱法解二阶波动方程对该方法进行了举例说明。

为什么要并行化波动方程求解程序?

波动方程广泛用于工程专业包括地震学,流体动力学,声学,以及电磁学,用于描述声,光和流体波。

使用波谱法解波动方程的算法能够实现并行是因为它满足使用GPU进行加速的两个标准:

大规模并行。并行快速傅里叶变化(FFT)算法的目的在于“分而治之”,这样一个相似的任务能够采用不同的数据反复执行。此外,该算法要求在处理线程和大量的内存带宽之间进行大量的通信。反向快速傅里叶变换(IFFT)同样能够并行运行。

计算密集型。算法执行大量的FFT以及IFFT,准确的数字取决于网格的规模和仿真中时间步长的数量。每个时间步长需要两个FFT,四个IFFT,而单个计算可能包含成千上万的时间步长。

图2. 32x32网格矩阵波动方程解决方案

在GPU上执行能够加快我的应用程序吗?

GPU能够对符合以下标准的应用程序进行加速:

大规模并行—计算能够被分割成上百个或上千个独立的工作单元。

计算密集型—计算消耗的时间显著超过了花费转移数据到GPU内存以及从GPU内存转移出数据的时间。

不满足上述标准的应用程序在GPU上运行时可能会比CPU要慢。

使用MATLAB进行GPU编程

FFT,IFFT以及线性代数运算超过了100个内置的MATLAB函数,通过提供一个类型为GPUArray(由并行计算工具箱提供的特殊数组类型)的输入参数,这些函数就能够直接在GPU上运行。这些启用GPU的函数都是重载的,换句话说,这些函数根据传递的参数类型的不同而执行不同的操作。

例如,以下代码使用FFT算法查找CPU上伪随机数向量的离散傅里叶变换:

A = rand(2^16,1);

B = fft (A);

为在GPU上执行相同的操作,我们首先使用gpuArray命令将数据从MATLAB工作空间转移至GPU设备内存。然后我们能够运行重载函数fft:

A = gpuArray(rand(2^16,1));

B = fft (A);

fft操作在GPU上而不是在CPU上执行,因为输入参数(GPUArray)位于GPU的内存中。

结果B存储在GPU当中。然而,B在MATLAB工作空间中依旧可见。通过运行class(B),我们看到B是一个GPUArray。

class(B)

ans =

parallel.gpu.GPUArray

我们能够使用启用GPU的函数继续对B进行操作。例如,为可视化操作结果,plot命令自动处理GPUArrays。

plot(B);

为将数据返回至本地的MATLAB工作集,你可以使用gather命令。例如

C = gather(B);

C现在是MATLAB中的double,能够被处理double变量的所有MATLAB 函数操作。

在这个简单的例子当中,执行单个FFT函数节省的时间通常少于将向量从MATLAB工作集移动到设备内存的时间。一般来说是这样的但是也取决于硬件和阵列规模。数据传输开销可能变得异常显著以至于降低了应用的总体性能,尤其是当你重复地在CPU和GPU之间交换数据,执行相对来说很少的计算密集型操作时。更有效率的方式是当数据处于GPU当中时对数据进行一些操作,只在必要的情况下才将数据返回至CPU。

需要指出的是,和CPU类似,GPU的内存也是有限的。然而,与CPU不同,GPU不能在内存和硬盘之间交换数据。因此,你必须核实你希望保留在GPU 当中的数据不会超出内存的限制,尤其是当用到大规模矩阵时。通过运行gpuDevice命令,可以查询GPU卡,获取信息比如名称,总内存以及可用内存。采用MATLAB解波动方程

为将上述例子应用到具体的环境中,我们在一个实际的问题中实现GPU的功能。计算目标是解二阶波动方程。

当u=0时到达临界值。我们使用基于波谱法的算法解空间方程,使用基于二阶中心有限差分法的算法解时间方程。

波谱法通常用于解决偏微分方程。采用波谱法的解决方案接近连续基函数比如正弦和余弦的线性组合。在这个例子中,我们应用了切比雪夫波谱法,使用切比雪夫多项式作为基函数。

我们在每一个时间步长使用切比雪夫波普法计算当前解决方案的在x象限和y象限的二次导数。我们同时使用这些中间数值与旧的解决方案和新的解决方案,应用二阶中心有限差分法(也称为蛙跳法)计算新的解决方案。我们选择了保持蛙跳法稳定性的时间步长。

MATLAB算法是计算密集型的,当网格中元素的数目超过了计算解决方案的增长,算法的执行时间将显著增加。当在单个CPU上使用2048x2048的网格执行时,完成50个时间步长需要一分多钟。需要指出的是我们计算的时间已经包括了MATLAB内在的多线程性能优势。自从R2007a起,MATLAb的一些函数就支持多线程计算。这些函数自动在多线程上执行,并不需要在代码中显示指定命令去创建线程。

当考虑如何使用并行计算工具箱加速计算时,我们将关注每个时间步长所执行的计算指令代码。图3距离说明了为获取在GPU上运行的算法需要做出的改变。需要指出的是涉及MATLAB操作的计算指令、启用GPU的重载函数可以

从并行计算工具箱获取。这些操作包括FFT,IFFT,矩阵乘法,以及各种元素明智(element-wise)操作。因此,我们不必改变算法就能够在GPU执行。只需要在进入每个时间步长计算结果的循环前使用gpuArray将数据转移到GPU当中。

图3. 代码对比工具显示了CPU版本和GPU版本的差异。CPU和GPU版本共享的代码超过了84%(在111行当中有94行)。

计算指令在GPU上执行后,我们将计算结果从GPU转移至CPU。被启用GPU的函数所引用的每个变量必须在GPU上创建或者在使用前转移到GPU上。为将用于光谱分化的一个权重转变为GPUArray变量,我们使用

W1T = gpuArray(W1T);

某些类型的数组能够直接在GPU上构造,不用从MATLAB工作集转移。例如,为直接在GPU上创建全零矩阵,我们使用

uxx = parallel.gpu.GPUArray.zeros(N+1,N+1);

我们使用gather函数将数据从GPU中转移回MATLAB工作集;例如:vvg = gather(vv);

需要指出的是这只是将一个数据转移至GPU,然后从GPU转移回MATLAB 工作集。每个时间步长的所有计算指令都是在GPU上执行的。

比较CPU和GPU的执行速度

为评估使用GPU借二阶波动方程的优势,我们进行了基准研究,分别采用Intel Xeon X5650处理器和NVIDIA Tesla C2050 GPU,选取不同的网格大小(64,128,521,1024和2048),测量了算法执行50个时间步长所花费的时间。

当网格大小为2048时,算法表明GPU的计算时间少于10秒,而CPU的计算时间超过了1分钟(图4)。图4中的对数标尺表明当网格大小很小时CPU 实际上比GPU要快。随着技术的演进和逐渐成熟,GPU解决方案处理小规模问题的能力在不断增强,我们希望这一趋势能够延续下去。

图4.同一个基准测试结果的线性标尺(左)和对数标尺(右)表明在不同的网格规模下完成50个时间步长所需的时间。

使用MATLAB进行GPU高级编程

通过在GPU上执行MATLAB代码,并行计算工具箱提供了简明的方式对MATLAB代码进行加速。你只需要改变函数输入的数据类型就能够利用众多的、已经针对GPUArray进行了重载的MATLAB命令(并行计算工具箱文档提供了支持GPUArray的内置MATLAB函数的完整列表)。

为在GPU上使用多个简单的操作加速算法,你可以使用arrayfun函数。因为arrayfun是一个基于GPU的函数,所以只会在单个调用中而不会在每个单独的操作中引起内存转移开销。

最后,自己写CUDA代码的有经验的程序员能够使用并行计算工具箱中的CUDAKernel接口将代码与MATLAB进行集成。CUDAKernel接口使更加细粒度控制、加速存在性能瓶颈的代码成为了可能,它创建了一个MATLAB对象,该对象能够访问编译为PTX代码的核心程序(PTX是一个低级别并行线程执行指令集)。你甚至可以使用MATLAB阵列作为输入和输出,调用feval命令评估GPU上的核心程序。

总结

工程师和科学家正在成功地使用GPU技术加速与他们的学科相关的计算。不需要具备广泛的GPU知识,付出很少的努力你就能够使用MATLAB获取GPU

所承诺的强大的计算能力。不必采用低级别的CUDA编程,GPUArrays以及启用GPU的MATLAB函数帮助你加快了MATLAB操作。如果你熟悉GPU编程,那么不需要进行任何的C语言编程,MATLAB就能够将现有的CUDA核心程序集成进MATLAB中。

为使用GPU实现加速,你的应用必须满足一些标准,其中在CPU和GPU 之间发送数据的时间必须要少于程序在GPU上运行所节省的时间。如果你的程序符合这些要求,那么就是MATLAB所提供的GPU功能范围内的一个很不错的候选者。

GPU术语

CPU.计算机中的中央单元,负责计算,控制以及监管计算机的其他部件。CPU处理数据位于计算机内存当中的逻辑和浮点操作。

GPU.原本用于图形渲染的可编程芯片。对于需要并行处理大规模数据的算法而言,GPU的高度并行架构使它们比通用的CPU更有效率。

核心. CPU和GPU芯片中的一个独立的计算单元。CPU和GPU核心并不是等同的。GPU核心执行专门的操作,而CPU核心主要用于通用程序。

CUDA. NVIDIA并行计算技术,由并行计算架构,开发工具,函数库,以及用于CPU编程的编程指令构成。

设备.包含GPU以及相关内存的硬件。

主机. CPU和系统内存

内核. 在GPU上执行的代码。核心是能够在大量线程上运行的函数。并行源于每个线程使用不同的数据、独立运行相同的程序。

译者:chuansir

原文链接:

https://www.sodocs.net/doc/d83238708.html,/company/newsletters/articles/gpu-program ming-in-matlab.html

《MATLAB程序设计与应用(刘卫国)》(第二版) 答案

《MATLAB程序设计与应用(刘卫国)》(第二版)实验一MATLAB运算基础 1.(1) z1=2*sin(pi*85/180)/(1+exp(2)) (2)x=[2,1+2i;-0.45,5]; z2=log(x+sqrt(1+x.^2))/2 (3)a=-3.0:0.1:3.0; z3=0.5*(exp(0.3*a)-exp(-0.3*a)).*sin(a+0.3)+log((0.3+a)/2) (4)t=0:0.5:2.5; z4=(t>=0&t<1).*t.^2+(t>=1&t<2).*(t.^2-1)+(t>=2&t<3).*(t.^2-2*t+1) 2. A=[12,34,-4;34,7,87;3,65,7]; B=[1,3,-1;2,0,3;3,-2,7]; (1)a=A+6*B b=A-B+eye(size(A)) %I=eye(size(A)) (2)c=A*B d=A.*B (3)e=A^3 f=A.^3 (4)g=A/B h=B\A (5)m=[A,B] n=[A([1,3],:);B^2] 3. A=[1,2,3,4,5;6,7,8,9,10;11,12,13,14,15;16,17,18,19,20;21,22,23,24,25]; B=[3,0,16;17,-6,9;0,23,-4;9,7,0;4,13,11]; (1)C=A*B (2)D=C(3:end,2:end) 4.(1) a=100:999; b=rem(a,21)==0; c=find(b); d=length(c) (2)ch='Just as Bianhaiman said,Xiehong is ...'; e=find(ch>='A'&ch<='Z'); ch(e)=[] 实验二 MATLAB矩阵分析与处理 1.E=eye(3);

Matlab编程与应用习题和一些参考答案

Matlab 上机实验一、二 3.求下列联立方程的解???????=+-+-=-+=++-=--+4 1025695842475412743w z y x w z x w z y x w z y x >> a=[3 4 -7 -12;5 -7 4 2;1 0 8 -5;-6 5 -2 10]; >> b=[4;4;9;4]; >> c=a\b 4.设???? ??????------=81272956313841A ,??????????-----=793183262345B ,求C1=A*B’;C2=A’*B;C3=A.*B,并求上述所有方阵的逆阵。 >> A=[1 4 8 13;-3 6 -5 -9;2 -7 -12 -8]; >> B=[5 4 3 -2;6 -2 3 -8;-1 3 -9 7]; >> C1=A*B' >> C2=A'*B >> C3=A.*B >> inv(C1) >> inv(C2) >> inv(C3) 5.设 ?? ????++=)1(sin 35.0cos 2x x x y ,把x=0~2π间分为101点,画出以x 为横坐标,y 为纵坐标的曲线。 >> x=linspace(0,2*pi,101); >> y=cos(x)*(0.5+(1+x.^2)\3*sin(x)); >> plot(x,y,'r') 6.产生8×6阶的正态分布随机数矩阵R1, 求其各列的平均值和均方差。并求该矩阵全体数的平均值和均方差。 (mean var ) a=randn(8,6) mean(a) var(a) k=mean(a) k1=mean(k) i=ones(8,6) i1=i*k1 i2=a-i1 i3=i2.*i2 g=mean(i3) g2=mean(g)

刘卫国版MATLAB程序设计与应用课后实验六八九

实验六 高层绘图操作 %第一题: 程序代码如下: x=linspace(0,2*pi,101); y=(0.5+3*sin(x)./(1+x.^2)).*cos(x); plot(x,y) 01234567 -1 -0.5 0.5 1 1.5 %第二题: %(1) 程序代码如下: x=linspace(-2*pi,2*pi,100); y1=x.^2; y2=cos(2*x); y3=y1.*y2; plot(x,y1,'b-',x,y2,'r:',x,y3,'y--'); text(4,16,'\leftarrow y1=x^2'); text(6*pi/4,-1,'\downarrow y2=cos(2*x)'); text(-1.5*pi,-2.25*pi*pi,'\uparrow y3=y1*y2');

-8 -6 -4 -2 2 4 6 8 -30-20 -10 10 20 30 40 %(2) 程序代码如下: x=linspace(-2*pi,2*pi,100); y1=x.^2; y2=cos(2*x); y3=y1.*y2; subplot(1,3,1);%分区 plot(x,y1); title('y1=x^2');%设置标题 subplot(1,3,2); plot(x,y2); title('y2=cos(2*x)'); subplot(1,3,3); plot(x,y3); title('y3=x^2*cos(2*x)');

-10 10 0510 15202530 35 40y1=x 2 -10 10 -1-0.8 -0.6 -0.4-0.200.20.4 0.6 0.8 1y2=cos(2*x) -10 10 -30-20 -10 10 20 30 40 y3=x 2*cos(2*x) %(3) 程序代码如下: x=linspace(-2*pi,2*pi,20); y1=x.^2; subplot(2,2,1);%分区 bar(x,y1); title('y1=x^2的条形图');%设置标题 subplot(2,2,2); stairs(x,y1); title('y1=x^2的阶梯图'); subplot(2,2,3); stem(x,y1); title('y1=x^2的杆图'); subplot(2,2,4); fill(x,y1,'r');%如果少了'r'则会出错 title('y1=x^2的填充图'); %其他的函数照样做。

matlab程序设计与应用第二版习题答案

matlab程序设计与应用第二版习题答案【篇一:matlab程序设计与应用(第二版)实验答案】 %实验一 matlab运算基础 %第1题 %(1) z1=2*sin(85*pi/180)/(1+exp(2)) %(2) x=[2,1+2i;-0.45,5]; z2=0.5*log(x+sqrt(1+x.^2)) %(3) a=-3.0:0.1:3.0; z3=(exp(0.3*a)-exp(-0.3*a))/2.*sin(a+0.3)+log((0.3+a)/2) %(4) t=0:0.5:2.5; z4=t.^2.*(t=0t1)+(t.^2-1).*(t=1t2)+(t.^2-2*t+1).*(t=2t3) %第2题 a=[12 34 -4;34 7 87;3 65 7]; b=[1 3 -1;2 0 3;3 -2 7]; a+6*b a-b+eye(size(a)) a*b a.*b a^3 a.^3 a/b b\a [a,b] [a([1,3],:);b^2] %第3题 a=[1 2 3 4 5;6 7 8 9 10;11 12 13 14 15;16 17 18 19 20;21 22 23 24 25] b=[3 0 16;17 -6 9;0 23 -4;9 7 0;4 13 11] c=a*b f=size(c) d=c(f(1)-2:f(1),f(2)-1:f(2)) whos %第4题 %(1):

a=100:999; b=rem(a,21); c=length(find(b==0)) %(2): a=lsdhksdlkklsdkl; k=find(a=aa=z); a(k)=[] %实验二 matlab矩阵分析与处理 %第1题 e=eye(3); r=rand(3,2); o=zeros(2,3); s=diag([2,3]); a=[e,r;o,s]; a^2 b=[e,(r+r*s);o,s^2] %第2题 h=hilb(5) p=pascal(5) hh=det(h) hp=det(p) th=cond(h) tp=cond(p) %第3题 a=fix(10*rand(5)) h=det(a) trace=trace(a) rank=rank(a) norm=norm(a) %第4题 a=[-29,6,18;20,5,12;-8,8,5] [v,d]=eig(a) %数学意义略 %第5题方法一 %(1): a=[1/2,1/3,1/4;1/3,1/4,1/5;1/4,1/5,1/6]; b=[0.95,0.67,0.52]; x=inv(a)*b %(2):

MATLAB程序设计与应用(第二版)

阅阅读读时时::请请选选择择““视视图图||文文档档结结构构图图””,,弹弹出出文文档档中中的的标标题题链链接接。。数学软件 MATLAB 程序设计与应用

第1章MATLAB系统环境 1.1 MATLAB概貌 1.2 MATLAB环境的准备 1.3 MATLAB操作界面 1.4 MATLAB帮助系统 自上世纪80年代以来,出现了科学计算语言,亦称数学软件。 MATLAB Mathematica Mathcad Maple LINDO LINGO 1.1 MATLAB概貌p3 MATLAB 是MATrix LABoratory(矩阵实验室)的缩写。 1984年由Math Works 公司推出,现已成为国际公认的优秀的工程应用开发环境,是影响最大,流行最广的科学计算语言。 1.1.1 MATLAB的发展

1. 从MATLAB 4.2c开始,每个版本增加了一个建造编号; 2. 例如MATLAB7.6的建造编号是R2008a。说明MATLAB7.6与MATLAB2008a是等同的; 3. 对于建造编号,正规化以后,每年出两个版本。一般来说。a是测试版,b是正式版。a是前半 年出,b是后半年出。 教材采用MATLAB7.0(R14,2004) 实验室采用MATLAB 7.8(R2009a,2009.3,汉化) 1.1.2 MATLAB的主要功能p4 ◆数值计算和符号计算功能 ◆绘图功能 ◆语言体系 ◆MATLAB工具箱 (1) 数值计算和符号计算功能 MATLAB以矩阵作为数据操作的基本单位,还提供了十分丰富的数值计算函数。 MATLAB先后和著名的符号计算语言Maple与MuPAD(从MATLAB 2008b开始使用MuPAD)相结合,使得MATLAB具有符号计算功能。 (2) 绘图功能 可以绘制二维和三维图形。 MATLAB提供了两个层次的绘图操作: ●对图形句柄进行的低层绘图操作; ●建立在低层绘图操作之上的高层绘图操作。 (3) 语言体系 MATLAB具有程序结构控制、函数调用、数据结构、输入输出、面向对象等程序语言特征,而且简单易学、编程效率高。 MATLAB是解释性语言,不能脱离MATLAB环境而独立运行。 (4) MATLAB工具箱 MATLAB包含两部分内容:基本部分和各种可选的工具箱。 MATLAB工具箱分为两大类:功能性工具箱和学科性工具箱。 基本部分 构成MATLAB的核心内容,也是使用和构造工具箱的基础。 功能性工具箱 主要用来扩充其符号计算功能、可视建模仿真功能及文字处理功能等。 学科性工具箱 Control System Toolbox 控制系统工具箱 Signal Processing Toolbox 信号处理工具箱 Neural Network Toolbox 神经网络工具箱 Optimization Toolbox 最优化工具箱 Financial Toolbox 金融工具箱 Statistics Toolbox 统计学工具箱 开始→工具箱 MATLAB具备很强的开放性 除内部函数外,所有MATLAB基本文件和各工具箱文件都是可读、可改的源文件,用户可通过对源文件的修改或加入自己编写的文件去构成新的专用工具箱。

MATLAB程序设计及应用(第二版)课后实验答案

。 Matlab课后实验题答案 《 实验一 MATLAB运算基础 1. 先求下列表达式的值,然后显示MATLAB工作空间的使用情况并保存全部变量。 (1) 0 12 2sin85 1 z e = + (2) 21 ln( 2 z x =,其中 212 0.455 i x + ??=?? -?? (3) 0.30.3 3 0.3 sin(0.3)ln, 3.0, 2.9,,2.9,3.0 22 a a e e a z a a - -+ =++=--

(4) 22 42011 122123t t z t t t t t ?≤

) 3. 设有矩阵A 和B 1234 53 166789101769,11 121314150 23416171819209 7021222324254 1311A B ???? ????-??? ?????==-??? ? ???????????? (1) 求它们的乘积C 。 (2) 将矩阵C 的右下角3×2子矩阵赋给D 。 (3) 查看MATLAB 工作空间的使用情况。 4. 完成下列操作: (1) 求[100,999]之间能被21整除的数的个数。 (2) 建立一个字符串向量,删除其中的大写字母。 解:(1) 结果:

MATLAB程序设计与应用课后习题答案

西安科技大学MATLAB程序设计 专业:信息与计算科学 班级:1001班 学号:1008060129 姓名:刘仲能 2012年6月27日

实验一 2.已知: ??? ? ? ?????-= 765 3 8773443412A ,???? ? ?????--=72 3 302131 B 求下列表达式的值: (1)A+6*B 和A-B+I (其中I 为单位矩阵) (2)A*B 和A.*B (3)A^3和A.^3 (4)A/B 及B\A (5)[A,B]和 [A([1,3],:);B^2]

3.设有矩阵A 和B ????? ?? ? ????????= 2524 23 22 21 2019181716151413121110987654321A ,??????? ? ????????--=1113 4 079423096171603 B (1) 求它们的乘积 C 。 (2) 将矩阵C 的右下角3×2子矩阵赋给D 。 (3) 查看MATLAB 工作空间的使用情况 (1) (2) (3)

4.完成下列操作 (1)求[100,999]之间能被21整除的数的个数。(2)建立一个字符串向量,删除其中的大写字母。 (1)(2)

实验二 3.建立一个5×5矩阵,求它的行列式值、迹、秩和范数。 运行截图: A 矩阵的行列式值、迹、秩分别如下: 范数如下: 4.已知 ???? ? ?????--= 58 8 1252018629A 求A 的特征值及特征向量,并分析其数学意义。 运行截图:

5.下面是一个线性方程组:???? ??????= ???? ? ????????? ? ?????52.067.095.06/15 /14 /15 /14/13 /14/13/12 /1321x x x (1)求方程的解; (2)将方程右边向量元素改为0.53,在求解,并比较的变化和解的相对 变化; (3)计算系数矩阵A 的条件数并分析结论。 (2) 变大,其解中,相对未变化前的的解:x1变大,x2变小,x3变大。 (3) 由于A 矩阵的条件数很大,故当线性方程组中的b 变大时,x 也将发生很大的变

Matlab程序设计与应用第二版刘卫国

实验 T1: %%第一小题 z1=2*sin(85*pi/180)/(1+exp(2)) %%第二小题x=[2,1+2i;-0.45,5]; z2 %%第三小题 a=-3.0:0.1:3.0; 0.3)+log((0.3+a)/2) %%第四题 t=0:0.5:2.5 z4=(t>=0&t<1).*(t.A2)+(t>=1 &t<2).*(t 八2-1)+(t>=2&t<3).*(t.A2-2*t+1) T2: A=[12,34,-4;34,7,87;3,65,7] B=[1,3,-1;2,0,3;3,-2,7] disp ('A+6*B='); disp(A+6*B); disp('A-B+I=');disp(A-B+eye(3)); disp('A*B=');

disp(A*B); disp('A.*B='); disp(A.*B); disp('A A3='); disp(AT); disp('A.A3二'); disp(A.A3); disp('A/B='); disp(A/B); disp('B\A='); disp(B\A); disp('[A,B]='); disp([A,B]); disp('[A([1,3],:);BA2]='); disp([A([1,3],:);BA2]); T3: z=1:25; A=reshape(z,5,5)'; B=[3,0,16;17,-6,9;0,23,-4;9,7,0;4,13,11];C=A*BD=C(3:5,2:3) T4-1: a=100:999; b=find(rem(a,21)==0); c=length(b)

MATLAB程序设计与应用(第二版)实验参考答案

MATLAB程序设计与应用(第二版)实验参考答案 %实验一MATLAB运算基础 %第一题 %(1) z1=2*sin(85*pi/180)/(1+exp(2)) %(2) x=[2,1+2i;-0.45,5]; z2=0.5*log(x+sqrt(1+x.^2)) %(3) a=-3.0:0.1:3.0; z3=(exp(0.3*a)-exp(-0.3*a))/2.*sin(a+0.3)+log((0.3+a)/2) %(4) t=0:0.5:2.5; z4=t.^2.*(t>=0&t<1)+(t.^2-1).*(t>=1&t<2)+(t.^2-2*t+1).*(t>=2&t<3) %第二题 A=[12 34 -4;34 7 87;3 65 7]; B=[1 3 -1;2 0 3;3 -2 7]; A+6*B A-B+eye(size(A)) A*B A.*B A^3 A.^3 A/B B\A [A,B] [A([1,3],:);B^2] %第三题 A=[1 2 3 4 5;6 7 8 9 10;11 12 13 14 15;16 17 18 19 20;21 22 23 24 25] B=[3 0 16;17 -6 9;0 23 -4;9 7 0;4 13 11] C=A*B F=size(C) D=C(F(1)-2:F(1),F(2)-1:F(2)) whos %第四题 %(1): A=100:999; B=rem(A,21); C=length(find(B==0)) %(2): A='lsdhKSDLKklsdkl';

k=find(A>='A'&A<='Z'); A(k)=[] %实验二MATLAB矩阵分析与处理 %第一题 E=eye(3); R=rand(3,2); O=zeros(2,3); S=diag([2,3]); A=[E,R;O,S]; A^2 B=[E,(R+R*S);O,S^2] %第二题 H=hilb(5) P=pascal(5) Hh=det(H) Hp=det(P) Th=cond(H) Tp=cond(P) %第三题: A=fix(10*rand(5)) H=det(A) Trace=trace(A) Rank=rank(A) Norm=norm(A) %第四题: A=[-29,6,18;20,5,12;-8,8,5] [V,D]=eig(A) %数学意义略 %第五题方法一: %(1): A=[1/2,1/3,1/4;1/3,1/4,1/5;1/4,1/5,1/6]; b=[0.95,0.67,0.52]'; x=inv(A)*b %(2): B=[0.95,0.67,0.53]'; x=inv(A)*B %(3): cond(A) %第五题方法二: A=hilb(4) A(:,1)=[] A(4,:)=[] B=[0.95,0.67,0.52]';

(完整word版)MATLAB程序设计及应用(第二版)课后实验答案

Matlab课后实验题答案 实验一 MATLAB运算基础 1. 先求下列表达式的值,然后显示MATLAB工作空间的使用情况并保存全部变量。 (1) 0 12 2sin85 1 z e = + (2) 21 ln( 2 z x =+,其中 212 0.455 i x + ??=?? -?? (3) 0.30.3 3 0.3 sin(0.3)ln, 3.0, 2.9,,2.9,3.0 22 a a e e a z a a - -+ =++=--L (4) 2 2 4 2 01 112 2123 t t z t t t t t ?≤< ? =-≤< ? ?-+≤< ? ,其中t=0:0.5:2.5 2. 已知:

1234413134787,2033657327A B --???? ????==???? ????-???? 求下列表达式的值: (1) A+6*B 和A-B+I (其中I 为单位矩阵) (2) A*B 和A.*B (3) A^3和A.^3 (4) A/B 及B\A (5) [A,B]和[A([1,3],:);B^2] 解: 3. 设有矩阵A 和B 1234 53 166789101769,11 121314150 23416171819209 7021222324254 1311A B ???? ????-??? ?????==-??? ? ???????????? (1) 求它们的乘积C 。 (2) 将矩阵C 的右下角3×2子矩阵赋给D 。 (3) 查看MATLAB 工作空间的使用情况。

4. 完成下列操作: (1) 求[100,999]之间能被21整除的数的个数。 (2) 建立一个字符串向量,删除其中的大写字母。 解:(1) 结果: (2). 建立一个字符串向量 例如: ch='ABC123d4e56Fg9';则要求结果是: 实验二 MATLAB 矩阵分析与处理 1. 设有分块矩阵33 322322E R A O S ?????? =? ??? ,其中E 、R 、O 、S 分别为单位矩阵、随机矩阵、零矩

电子书_MATLAB程序设计与应用(第二版)

阅阅读读时时::请请选选择择““视视图图 || 文文档档结结构构图图””,,弹弹出出文文档档中中的的标标题题链链接接。。 数学软件 MATLAB 程序设计与应用

第1章MATLAB系统环境 1.1 MATLAB概貌 1.2 MATLAB环境的准备 1.3 MATLAB操作界面 1.4 MATLAB帮助系统 自上世纪80年代以来,出现了科学计算语言,亦称数学软件。 MATLAB Mathematica Mathcad Maple LINDO LINGO 1.1 MATLAB概貌p3 MATLAB 是MATrix LABoratory(矩阵实验室)的缩写。 1984年由Math Works 公司推出,现已成为国际公认的优秀的工程应用开发环境,是影响最大,流行最广的科学计算语言。 1.1.1 MATLAB的发展 2. 例如MATLAB7.6的建造编号是R2008a。说明MATLAB7.6与MATLAB2008a是等同的;

3. 对于建造编号,正规化以后,每年出两个版本。一般来说。a是测试版,b是正式版。a是前半 年出,b是后半年出。 教材采用MATLAB7.0(R14,2004) 实验室采用MATLAB 7.8(R2009a,2009.3,汉化) 1.1.2 MATLAB的主要功能p4 ◆数值计算和符号计算功能 ◆绘图功能 ◆语言体系 ◆MATLAB工具箱 (1) 数值计算和符号计算功能 MATLAB以矩阵作为数据操作的基本单位,还提供了十分丰富的数值计算函数。 MATLAB先后和著名的符号计算语言Maple与MuPAD(从MATLAB 2008b开始使用MuPAD)相结合,使得MATLAB具有符号计算功能。 (2) 绘图功能 可以绘制二维和三维图形。 MATLAB提供了两个层次的绘图操作: ●对图形句柄进行的低层绘图操作; ●建立在低层绘图操作之上的高层绘图操作。 (3) 语言体系 MATLAB具有程序结构控制、函数调用、数据结构、输入输出、面向对象等程序语言特征,而且简单易学、编程效率高。 MATLAB是解释性语言,不能脱离MATLAB环境而独立运行。 (4) MATLAB工具箱 MATLAB包含两部分内容:基本部分和各种可选的工具箱。 MATLAB工具箱分为两大类:功能性工具箱和学科性工具箱。 基本部分 构成MATLAB的核心内容,也是使用和构造工具箱的基础。 功能性工具箱 主要用来扩充其符号计算功能、可视建模仿真功能及文字处理功能等。 学科性工具箱 Control System Toolbox 控制系统工具箱 Signal Processing Toolbox 信号处理工具箱 Neural Network Toolbox 神经网络工具箱 Optimization Toolbox 最优化工具箱 Financial Toolbox 金融工具箱 Statistics Toolbox 统计学工具箱 开始→工具箱 MATLAB具备很强的开放性 除内部函数外,所有MATLAB基本文件和各工具箱文件都是可读、可改的源文件,用户可通过对源文件的修改或加入自己编写的文件去构成新的专用工具箱。

Matlab程序设计与应用第二版刘卫国

实验一:T1: %%第一小题 z1=2*sin(85*pi/180)/(1+exp(2)) %%第二小题 x=[2,1+2i;-0.45,5]; z2 %%第三小题 a=-3.0:0.1:3.0; 0.3)+log((0.3+a)/2) %%第四题 t=0:0.5:2.5 z4=(t>=0&t<1).*(t.^2)+(t>=1&t<2).*(t .^2-1)+(t>=2&t<3).*(t.^2-2*t+1) T2: A=[12,34,-4;34,7,87;3,65,7] B=[1,3,-1;2,0,3;3,-2,7] disp ('A+6*B='); disp(A+6*B); disp('A-B+I=');disp(A-B+eye(3)); disp('A*B=');

disp(A*B); disp('A.*B='); disp(A.*B); disp('A^3='); disp(A^3); disp('A.^3='); disp(A.^3); disp('A/B='); disp(A/B); disp('B\A='); disp(B\A); disp('[A,B]='); disp([A,B]); disp('[A([1,3],:);B^2]='); disp([A([1,3],:);B^2]); T3: z=1:25; A=reshape(z,5,5)'; B=[3,0,16;17,-6,9;0,23,-4;9,7,0;4,13,11];C=A*BD=C(3:5,2:3) T4-1: a=100:999;

b=find(rem(a,21)==0); c=length(b) T4-2: a=input('请输入一个字符串:','s'); b=find(a>='A'&a<='Z'); a(b)=[]; disp(a); 实验二: T1: E=eye(3),R=rand(3,2),O=zeros(2,3),S=d iag([1,2]); A=[E,R;O,S] disp('A^2='); disp(A^2); disp('[E,R+RS;O,S^2]'); B=[E,R+R*S;O,S^2] T2: H=hilb(5) P=pascal(5)Hh=det(H) Hp=det(P) Th=cond(H)

最新MATLAB程序设计与应用(第二版)课后实验答案

Matlab 课后实验题答案 实验一 MATLAB 运算基础 1. 先求下列表达式的值,然后显示MATLAB 工作空间的使用情况并保存全部变量。 (1) 0 12 2sin851z e =+ (2) 221 ln(1)2z x x = ++,其中2120.45 5i x +??=??-?? (3) 0.30.330.3sin(0.3)ln , 3.0, 2.9,,2.9,3.022a a e e a z a a --+= ++=-- (4) 22 42011 122123t t z t t t t t ?≤=0&t<1).*(t.^2)+(t>=1&t<2).*(t.^2-1)+(t>=2&t<3) .*(t.^2-2*t+1) 2. 已知:

1234413134787,2033657327A B --???? ????==???? ????-???? 求下列表达式的值: (1) A+6*B 和A-B+I (其中I 为单位矩阵) (2) A*B 和A.*B (3) A^3和A.^3 (4) A/B 及B\A (5) [A,B]和[A([1,3],:);B^2] 解: M 文件: A=[12 34 -4;34 7 87;3 65 7];B=[1 3 -1;2 0 3;3 -2 7]; A+6.*B A-B+eye(3) A*B A.*B A^3 A.^3 A/B B\A [A,B] [A([1,3],:);B^2] 3. 设有矩阵A 和B 1234 53 166789101769,11 121314150 23416171819209 7021222324254 1311A B ???? ????-??? ?????==-??? ? ???????????? (1) 求它们的乘积C 。 (2) 将矩阵C 的右下角3×2子矩阵赋给D 。 (3) 查看MATLAB 工作空间的使用情况。 解:. 运算结果: E=(reshape(1:1:25,5,5))';F=[3 0 16;17 -6 9;0 23 -4;9 7 0;4 13 11]; C= E*F H=C(3:5,2:3) C = 93 150 77

MATLAB程序设计与应用

实验一 MATLAB 运算基础 第二题:已知 A=??????????7653877344-3412 B=??? ? ??????72-33021-31 求下列问题: 1) A+6*B 和A-B+I 2) A*B 和A.*B 3) A^3 A.^3 4) A/B B\A 5) [A,B] [A(1,3),:B.^2] 解: >> A=[12 34 -4;34 7 87;3 65 7]; B=[1 3 -1;2 0 3;3 -2 7]; I=[1 0 0;0 1 0;0 0 1]; (1) >> A+6*B ans = 18 52 -10 46 7 105 21 53 49 >> A-B+I ans = 12 31 -3 32 8 84 0 67 1 (2) >> A*B ans = 68 44 62 309 -72 596 154 -5 241 >> A.*B

ans = 12 102 4 68 0 261 9 -130 49 (3) >> A^3 ans = 37226 233824 48604 247370 149188 600766 78688 454142 118820 >> A.^3 ans = 1728 39304 -64 39304 343 658503 27 274625 343 (4) >> A/B ans = 16.4000 -13.6000 7.6000 35.8000 -76.2000 50.2000 67.0000 -134.0000 68.0000 >> B\A ans = 109.4000 -131.2000 322.8000 -53.0000 85.0000 -171.0000 -61.6000 89.8000 -186.2000 (5) >> [A,B] ans =

matlab程序设计与应用(第二版)第三章部分课后答案解析

第三章1. (1A=eye(3 (2A=100+100*rand(5,6 (3A=1+sqrt(0.2*randn(10,50 (4B=ones(size(A (5A+30*eye(size(A (6B=diag(diag(A 2. B=rot90(A C=rot90(A,-1 3. B=inv(A ;A的逆矩阵 C=det(A ;A的行列式的值 D=A*B E=B*A D=E 因此A与A-1是互逆的。 4. A=[4 2 -1;3 -1 2;12 3 0]; b=[2;10;8];

x=inv(A*b x = -6.0000 26.6667 27.3333 5. (1 diag(A ;主对角线元素ans = 1 1 5 9 triu(A ;上三角阵 ans = 1 -1 2 3 0 1 -4 2 0 0 5 2

0 0 0 9 tril(A ;下三角阵ans = 1 0 0 0 5 1 0 0 3 0 5 0 11 15 0 9 rank(A ;秩ans = 4 norm(A ;范数 ans = 21.3005 cond(A ;条件数ans = 11.1739 trace(A ;迹 ans = 16 (2略

6. A=[1 1 0.5;1 1 0.25;0.5 0.25 2] A = 1.0000 1.0000 0.5000 1.0000 1.0000 0.2500 0.5000 0.2500 2.0000 [V,D]=eig(A V = 0.7212 0.4443 0.5315 -0.6863 0.5621 0.4615 -0.0937 -0.6976 0.7103 D = -0.0166 0 0 0 1.4801 0 0 0 2.5365

MATLAB程序设计和应用课后习题答案解析

专业技术资料分享 西安科技大学MATLAB程序设计 专业:信息与计算科学 班级: 1001班 学号:1008060129 姓名:刘仲能 2012年6月27日

实验一 2.已知: ?? ??? ?????-=76538773443412A ,???? ? ?????--=723302131B 求下列表达式的值: (1)A+6*B 和A-B+I (其中I 为单位矩阵) (2)A*B 和A.*B (3)A^3和A.^3 (4)A/B 及B\A (5)[A,B]和 [A([1,3],:);B^2]

3.设有矩阵A 和B ????? ?? ?????????=25242322212019181716151413121110987654321A ,??????? ?????????--= 11134079423096171603B (1) 求它们的乘积C 。 (2) 将矩阵C 的右下角3×2子矩阵赋给D 。 (3) 查看MATLAB 工作空间的使用情况 (1) (2) (3)

4.完成下列操作 (1)求[100,999]之间能被21整除的数的个数。 (2)建立一个字符串向量,删除其中的大写字母。 (1) (2) 实验二 3.建立一个5×5矩阵,求它的行列式值、迹、秩和范数。

运行截图: A 矩阵的行列式值、迹、秩分别如下: 范数如下: 4.已知 ?? ?? ? ?????--=5881252018629A 求A 的特征值及特征向量,并分析其数学意义。 运行截图:

5.下面是一个线性方程组:?? ??? ?????=???? ????????????????52.067.095.06/15/14/15/14/13/14/13/12/1321x x x (1) 求方程的解; (2) 将方程右边向量元素 改为0.53 ,在求解,并比较 的变化和解的相 对变化; (3) 计算系数矩阵A 的条件数并分析结论。 (2) 变大,其解中,相对未变化前的 的解:x1变大,x2变小,x3变大。 (3) 由于A 矩阵的条件数很大,故当线性方程组中的b 变大时,x 也将发生很大的变化,即数值稳定性较差。 实验三 3.硅谷公司员工的工资计算方法如下: (1)工作时数超过120小时者,超过部分加发15%; (2)工作时数低于60小时者,扣发700元; (3)其余按每小时84元计发。

Matlab程序设计及应用实验讲义

Matlab程序设计及应用实验讲义 自编 电子科学与工程系 2013.02

实验一 MATLAB 环境与命令窗口 1、实验目的 1)熟悉MATLAB 的操作环境及基本操作方法; 2)掌握MATLAB 的搜索路径及其设置方法; 3)熟悉MATLAB 帮助信息的查阅方法; 2、实验主要仪器设备和材料 计算机PC 一台 2010a 软件 3、实验内容和原理 1、先建立自己的工作目录,再将自己的工作目录设置到MATLAB 的搜索路径下,再试验用help 命令能否查询到自己的工作目录。 2、在MATLAB 环境下验证下面几个例子,并总结MATLAB 的主要优点。 1)绘制正弦曲线和余弦曲线 2)求方程432379230x x x ++-=的全部根 3)求积分()1 0ln 1x x dx +? 4)求解线性方程组234832245917x y z x y z x y z -+=?? ++=??+-=? 3、利用MATLAB 的帮助功能分别查询inv 、plot 、 max 、round 等函数的功能与用法 4、完成下列操作: 1)在MATLAB 命令窗口输入以下命令: x=0:pi/10:2*pi;

y=sin(x); 2)在工作空间窗口选择变量y,再在工作空间窗口选择绘图菜单命令或在工具栏中单击绘图命令按钮,绘制变量的图形,并分析图形的含义。 5、访问MathsWorks公司的主页,查询有关MATLAB的产品信息。 思考与练习 1、如何启动和退出MATLAB的集成环境? 2、简述MATLAB的主要功能。 3、如果一个MATLAB命令包含的字符很多,需要分成多行输入,该如何处理? 4、help命令和look for命令有何区别? 5、在MATLAB环境下,建立一个变量fac,同时又在当前目录下建立了一个M 文件fac.m,如果需要运行fac.m文件,该如何处理?

MATLAB程序设计与应用(刘卫国编)课后实验答案

实验一 MATLAB 运算基础 1. 先求下列表达式的值,然后显示MATLAB 工作空间的使用情况并保存全部变量。 (1) 012 2sin851z e =+ (2) 21ln(2 z x =+,其中2 120.45 5i x +??=? ?-?? (3) 0.30.330.3sin(0.3)ln , 3.0, 2.9,,2.9,3.022a a e e a z a a --+= ++=-- (4) 2242011 122123t t z t t t t t ?≤

- 2. 已知: 1234413134787,2033657327A B --???? ????==???? ????-???? 求下列表达式的值: (1) A+6*B 和A-B+I (其中I 为单位矩阵) (2) A*B 和A.*B (3) A^3和A.^3 (4) A/B 及B\A

(5) [A,B]和[A([1,3],:);B^2] @ 解: 运算结果:

3. 设有矩阵A和B

1234 53 166789101769,11 121314150 23416171819209 7021222324254 1311A B ???? ????-??? ?????==-??? ? ???????????? (1) 求它们的乘积C 。 (2) 将矩阵C 的右下角3×2子矩阵赋给D 。 ( (3) 查看MATLAB 工作空间的使用情况。 解:. 运算结果: ! 4. 完成下列操作: (1) 求[100,999]之间能被21整除的数的个数。 (2) 建立一个字符串向量,删除其中的大写字母。 解:(1) 结果:

相关主题