习题2-数值数组及向量化运算
数值数组及其运算

第二章 数值数组及其运算数值数组(Numeric Array )和数组运算(Array Operations )始终是MATLAB 的核心内容。
自MATLAB5.x 版起,由于其“面向对象”的特征,这种数值数组(以下简称为数组)成为了MATALB 最重要的一种内建数据类型(Built-in Data Type ),而数组运算就是定义在这种数据结构上的方法(Method )。
本章系统阐述:一、二维数值数组的创建、寻访;数组运算和矩阵运算的区别;实现数组运算的基本函数;多项式的表达、创建和操作;常用标准数组生成函数和数组构作技法;高维数组的创建、寻访和操作;非数NaN 、“空”数组概念和应用;关系和逻辑操作。
顺便指出:(1)本章所涉内容和方法,不仅使用于数值数组,而且也将部分地延伸使用于在其他数据结构中。
(2)MATLAB5.x 和 6.x 版在本章内容上的差异极微。
(3)MATLAB6.5版新增的两种逻辑操作,在第2.13.2节给予介绍。
2.1 引导【例2.1-1】绘制函数x xe y -=在10≤≤x 时的曲线。
x=0:0.1:1y=x.*exp(-x)plot(x,y),xlabel('x'),ylabel('y'),title('y=x*exp(-x)') x =Columns 1 through 70 0.1000 0.2000 0.3000 0.4000 0.5000 0.6000 Columns 8 through 110.7000 0.8000 0.9000 1.0000y =Columns 1 through 70 0.0905 0.1637 0.2222 0.2681 0.3033 0.3293 Columns 8 through 112.2一维数组的创建和寻访 2.2.1一维数组的创建 2.2.2 一维数组的子数组寻访和赋值【例2.2.2-1】子数组的寻访(Address )。
MATLAB数组运算及向量化运算(ppt文档)

ans=8 1 6
357
492
3
常见矩阵生成函数
zeros(m,n) 生成一个 m 行 n 列的零矩阵,m=n 时可简写为 zeros(n)
ones(m,n)
eye(m,n)
diag(X)
tril(A) triu(A) rand(m,n) randn(m,n)
生成一个 m 行 n 列的元素全为 1 的矩阵, m=n 时可写为 ones(n)
向量与矩阵运算
向量与矩阵的生成(续)
矩阵的生成
由向量生成
通过编写m文件生成
由函数生成
例:>> x=[1,2,3];y=[2,3,4];
>> A=[x,y], B=[x;y]
A=1 2 3 2 3 4
B=1 2 3
234
例:>> C=magic(3) 幻方矩阵 行和,列和,对角线和等
7
矩阵操作
矩阵的旋转
fliplr(A) 左右翻转
flipud(A) 上下翻转 rot90(A) 逆时针旋转 90 度;
rot90(A,k) 逆时针旋转 k×90 度
例:>> A=[1 2 3;4 5 6]
A=1 2 3
>> B=fliplr(A)
B=3 2 14 5 6 C=4 5 6
1
向量与矩阵运算
向量与矩阵的生成(续)
矩阵的生成 直接输入: 例:>> A = [1 2 3; 4 5 6; 7,8,9]
矩阵用方括号“[ ]”括起 矩阵同一行中的元素之间用 空格 或 逗号 分隔 矩阵行与行之间用 分号 分开 直接输入法中,分号可以用 回车 代替
第3章数值数组及其运算

指令 rand randn
含义 产生均匀分布随机数组 产生正态分布随机数组
>>zeros(1,2) >>ones(2)
>>rand %(0,1) >>randn(2,3)
16
第三章 数值数组及其运算
❖ 问题9:执行数组运算的常用函数有哪些?
补充:测量数组维数和大小函数
指令
含义
ndims 测量数组维数
❖ 问题7:“全下标”和“单下标”的概念?
>>A=[1,3;2,4] ▪ 全下标 例A(1,2):表示在二维数组A的“第1行第2列”的元素 ▪ 单下标:将二维数组所有列按先左后右的次序、首尾相
接排成“一维长列”,然后,自上而下对元素进行标号。 >>A(3) >>B=[1,3,5;2,4,6] >>B(3)
10
第三章 数值数组及其运算
❖ 问题8:如何对二维数组的元素寻访和赋值?
>>A=[1 2 3;4 5 6;7 8 9] >>A(2,3) >>A(2,:) >>A(:,3) >>A(:) >>s1=[3 5 8] >>A(s1) >>s2=[3;5;8] >>A(s2)
>>A(2,3)=100 >>Sa=ones(3,2) >>A(:,[2 3])=Sa >>A([2 3],:)=Sa %出错 >>D=zeros(1,9) >>A(:)=D(:) >>A=D %对A重新定义了 >>A(s1)=[1 1 1] >>A(s1)=[10;10;10]
计算数学中的数组计算技术

计算数学中的数组计算技术计算数学是一门应用数学学科,它的研究对象是各种数学问题,包括数值计算、数学模型、优化问题、统计学等等,其中最显著的特点就是需要对大量的数据进行计算和处理。
为了解决这些计算难题,计算数学中的数组计算技术应运而生。
什么是数组?数组是计算机科学中的一个基础概念,简单来说,它就是一组相同类型的数据元素的集合,每个元素都有一个唯一的编号,我们可以通过这个编号来访问这个元素。
数组在计算数学中也有着广泛的应用,它可以用来表示向量、矩阵等数学对象。
数组计算技术数组计算技术主要包括以下几个方面:1. 向量化运算向量化运算是指对一个向量中的所有元素进行相同的计算,这种运算方式可以大大提高计算效率。
在计算数学中,有许多数学运算都可以采用向量化运算的方式进行计算,比如矩阵乘法、向量内积等。
2. 矩阵分解矩阵分解是一种将一个矩阵分解成若干特殊矩阵的方法,这些特殊矩阵具有一些特殊的性质,可以方便地进行计算。
在计算数学中,有几种常见的矩阵分解方法,比如LU分解、QR分解、SVD分解等。
3. 并行计算并行计算是指将一个大型计算任务划分成若干个小任务,然后在多个处理器上同时计算,最后再将结果合并起来的一种计算方式。
在计算密集型的数学问题中,采用并行计算可以大大提高计算速度。
4. CUDA计算CUDA是英伟达公司推出的一种并行计算平台,它利用了GPU 的并行计算能力,建立了一个使用标准C语言进行GPU编程的平台。
在计算数学中,CUDA可以用于加速大规模矩阵运算、快速傅里叶变换等复杂计算任务。
5. 数组库数组库是一种软件库,它提供了一系列的数学计算函数,这些函数可以方便地进行向量化运算、矩阵分解、并行计算等操作。
目前,有一些开源的数组库,比如NumPy、SciPy等,它们都提供了一系列高效的数学计算函数,可以方便地应用于计算数学中的各种问题。
数组计算技术的应用数组计算技术在计算数学中有着广泛的应用,主要体现在以下几个方面:1. 数据分析在数据分析中,我们需要对大量的数据进行处理和分析,采用数组计算技术可以方便地进行向量化运算、矩阵分解等操作,从而大大提高数据分析的效率。
(一)NumPy基础:数组和矢量计算

(⼀)NumPy基础:数组和⽮量计算⼀、创建ndarray1、各种创建函数的使⽤import numpy as np#创建ndarray#1、array⽅法data1 = [[6, 7.5, 8, 0, 1], [2, 8, 9.5, 10, 8]]# ⽣成数组arr1 = np.array(data1)'''shape-------->数组的形状dtype-------->数组的数据类型ndim--------->数组的维度'''print(arr1.shape, arr1.dtype, arr1.ndim)'''arange------->类似于range,返回数组ones---------->参数是⼀个元祖,返回全⼀数组ones_like----------->返回相同形状的数组,参数是数组eye----------->单位矩阵'''print(np.arange(10))print(np.zeros((3, 3)))print(np.ones_like(arr1))print(np.eye(10))⼆、adarray的数据类型1、dtype是⼀个属性,他可以确定⼀个数组的数据类型import numpy as npdata1 = [[1, 2, 3, 4], [8, 9, 10, 11]]#数据类型是⼀个类型名加⼀个表⽰各元素位长的数字narr1 = np.array(data1, dtype = np.float64)print(narr1)2、数据类型转换(astype)import numpy as npdata1 = [[1.8, 2.9, 3.7, 4], [8, 9, 10.8, 11]]#数据类型是⼀个类型名加⼀个表⽰各元素位长的数字narr1 = np.array(data1, dtype = np.float64)#函数astype返回仍是数组,可以设置类型print(narr1.astype(np.int64))三、数组与标量的运算数组可以使你不⽤编写循环即可对数据执⾏批量运算,通常叫做⽮量化import numpy as npdata1 = [[1, 2, 3, 4], [5, 6, 7, 8]]narr1 = np.array(data1)#乘法运算print(narr1*narr1)#减法运算print(narr1-narr1)#除法运算print(1/narr1)#开⽅运算print(narr1**2)四、基本的索引和切⽚1、将⼀个标量值赋给⼀个切⽚时,该值会⾃动传播到整个选区,跟列表最重要的区别在于,数组切⽚是原始数组的视图,数据不会被复制,视图上的任何修改都会直接反映到源数组上import numpy as nparr = np.arange(10)print(arr) #([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])print(arr[5]) #5print(arr[5:8]) #[5, 6, 7]arr[5:8] = 12 #对arr[5:8]赋值,使得原数组改变print(arr)'''即使将切⽚赋予⼀个新的变量,改变新变量的值,仍然会改变原数组'''arr_slice = arr[5:8]arr_slice[1] = 12345print(arr) #[ 0 1 2 3 4 12 12345 12 8 9]2、索引import numpy as nparr2d = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])print(arr2d)print(arr2d[0]) #访问第0⾏print(arr2d[0][1]) #访问第0⾏,第1列print(arr2d[0, 1]) #访问第0⾏,第1列arr3d = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]])print(arr3d[0, 1, 1]) #53、布尔型索引import numpy as npnames = np.array(["Bob", 'Joe', 'Will', 'Bob', 'Will', 'Joe', 'Joe'])data = np.random.randn(7, 4) #⽣成正态分布的随机数据print(data)print(names == 'Bob')'''假设每个名字对应data数组中的⼀⾏,想要选出对应于名字‘Bob’的所有⾏,跟算术运算⼀样,数组的⽐较运算也是⽮量化的,'''print(data[names == "Bob"])4、数组转置和轴对换a、转置(transpose)是重塑的⼀种特殊形式,它返回的是源数据的视图,数组不仅有transpose⽅法,还有⼀个特殊的T属性import numpy as nparr = np.arange(15).reshape(3, 5)print(arr)print(arr.T) #转置print(np.transpose(arr))#转置5、通⽤函数通⽤函数是⼀种对ndarray中数据执⾏元素级运算的函数,在做简单的⽮量化包装器import numpy as nparr = np.arange(10)print(np.sqrt(arr)) #求每个元素的开⽅print(np.exp(arr)) #求⾃然常数的⽅x = np.random.randn(10)y = np.random.randn(10)print(x)print(y)print(np.maximum(x, y)) #接受两个数组,返回⼀个结果数组6、利⽤数组进⾏数据处理Numpy数组使得可以将许多数据处理任务表述为简洁的数组表达式,⽤数组表达式代替循环的做法称为⽮量化。
Python学习(六)向量化

Python学习(六)向量化参考资料:1. 向量化函数(1)⾃定义sinc函数1import numpy as np23def sinc(x):4if x == 0.0:5return 1.06else:7 w = np.pi * x8return np.sin(w) / w可以作⽤于单个数值:如sinc(0)、sinc(3.0);但是不能作⽤于数组x = np.array([1,2,3]);sinc(x) 报错(2)可以使⽤numpy的vectorize将函数sinc向量化,产⽣⼀个新的函数1 x = np.array([1,2,3])2 vsinc = np.vectorize(sinc)3 vsinc(x) #作⽤是为 x 中的每⼀个值调⽤ sinc 函数1import matplotlib.pyplot as plt2 %matplotlib inline34 x = np.linspace(-5,5,101)5 plt.plot(x, vsinc(x))注:因为这样的⽤法涉及⼤量的函数调⽤,因此,向量化函数的效率并不⾼2. ⼆元运算(1)四则运算1import numpy as np2 a = np.array([1,2])3 a * 3 #数组与标量相乘,相当于数组的每个元素乘以这个标量45 a = np.array([1,2])6 b = np.array([3,4])7 a * b #数组相乘,结果为逐个元素对应相乘8 np.multiply(a, b) #使⽤函数9 np.multiply(a, b, a) #如果有第三个参数,表⽰将结果存⼊第三个参数中(2)⽐较和逻辑运算 //⼤部分逻辑操作是逐个元素运算的,返回布尔数组1 a = np.array([[1,2,3,4],2 [2,3,4,5]])3 b = np.array([[1,2,5,4],4 [1,3,4,5]])5 a == b #等于操作是对应元素逐个进⾏⽐较的,返回的是等长的布尔数组注:如果在条件中要判断两个数组是否⼀样时,不能直接使⽤ if a==b: 需要使⽤if all(a==b):对于浮点数,由于存在精度问题,使⽤函数allclose会更好 if allclose(a,b):3. ufunc对象(1)Numpy有两种基本对象:ndarray (N-dimensional array object)和ufunc (universal function object);ndarray是存储单⼀数据类型的多维数组,⽽ufunc则是能够对数组进⾏处理的函数。
向量化及其逆运算

向量化及其逆运算向量化是指将非向量形式的数据转化为向量形式的过程。
在计算机科学和机器学习领域中,向量化是一种常见的技术,能够提高计算效率和简化代码实现。
本文将详细介绍向量化的概念、应用场景以及逆运算方法,并提供一些指导意义的示例和技巧。
在计算机科学和机器学习中,常常需要对大量的数据进行处理和计算,如数值计算、数据分析、图像处理等。
传统的计算方法往往需要通过循环等方式逐个处理数据点,效率较低。
而向量化通过将数据转化为向量形式,可以利用硬件加速和矩阵运算等优化手段,大幅提高计算效率。
向量化的应用场景非常广泛。
在数值计算中,可以通过向量化来进行矩阵乘法、向量加法和点乘等运算,极大地简化了代码实现,并提高了性能。
在数据分析和机器学习中,向量化能够实现对大规模数据集的高效处理,例如特征提取、模型训练和预测等。
此外,在图像处理中,向量化可以对像素点进行矢量运算,实现图像的变换和滤波等操作。
向量化的逆运算是将向量形式的数据恢复为非向量形式的数据。
逆运算也被称为反向量化或解向量化。
在实践中,逆向量化常常涉及到数据的还原和可视化。
例如,将图像数据进行向量化后,可以通过逆向量化将向量形式的数据恢复为图像形式,并进行显示和分析。
逆向量化的方法多种多样,具体取决于数据的特点和应用场景。
在数值计算中,逆向量化通常使用reshape函数或索引操作来改变数据的形状和维度,从而恢复原始的数据结构。
在图像处理中,逆向量化常常涉及到插值和颜色映射等技术,以便将向量形式的数据转化为像素点的亮度和颜色信息。
在机器学习中,逆向量化常常用于对模型预测结果的还原和解释,例如恢复回归模型的预测值或分解图像生成模型的像素分布。
为了实现高效的向量化和逆向量化,以下是一些指导意义的技巧和建议:1. 在选择数据结构时,考虑使用NumPy数组或Pandas数据框架等高效的向量操作工具。
2. 尽量避免使用循环或显式的迭代操作,而是利用向量操作进行批量计算。
IDL中的数组操作

IDL中的数组操作IDL(Interactive Data Language)是一种用于科学数据分析和可视化的编程语言。
在IDL中,数组操作是其中一个重要的组成部分。
通过数组操作,我们可以对多维数组进行操作、计算和转换。
在下面的文章中,我将介绍IDL中的一些常见的数组操作技术,并提供一些例子来说明其用法。
1.创建数组在IDL中,可以使用多种方法来创建数组。
最简单的方式是使用[]符号,将元素用逗号隔开,创建一个一维数组。
例如,使用以下代码创建一个包含5个元素的一维数组:```IDLarr = [1, 2, 3, 4, 5]```可以使用 reshape 函数将一维数组转换为多维数组。
例如,使用以下代码将上述一维数组转换为一个 2x3 的二维数组:```IDLarr2d = reshape(arr, 2, 3)```2.访问数组元素通过索引,可以访问数组中的特定元素。
在IDL中,数组的索引从0开始。
例如,要访问二维数组中的第一个元素,可以使用以下代码:element = arr2d[0, 0]```3.数组操作IDL提供了许多用于对数组进行操作的内置函数。
以下是一些常用函数的示例:- sum:计算数组的总和```IDLtotal = sum(arr)```- min:找出数组中的最小值```IDLminimum = min(arr)```- max:找出数组中的最大值```IDLmaximum = max(arr)```- mean:计算数组的平均值average = mean(arr)```- sort:按升序对数组进行排序```IDLsorted_arr = sort(arr)```- reverse:将数组元素进行反转```IDLreversed_arr = reverse(arr)```4.数组运算IDL允许对数组进行基本的数学运算,如加法、减法、乘法和除法。
以下是一些示例:-加法```IDLresult = arr1 + arr2```-减法result = arr1 - arr2```-乘法```IDLresult = arr1 * arr2```-除法```IDLresult = arr1 / arr2```5.向量化运算向量化运算是一种在IDL中高效地对整个数组执行相同操作的方法。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
习题2
1.请读者先运行以下指令
a=0;b=pi;
t1=a:pi/9:pi;
t2=linspace(a,b,10);
T=t1*t2';
F=find(T<0);
然后,请回答变量a、t1、T、F的维度、规模、长度分别是多少t1完全等于t2吗为什么
1)产生数据
a=0;b=pi;
t1=a:pi/9:pi;
t2=linspace(a,b,10);
T=t1*t2';
F=find(T<0);
2)罗列各变量的特征
Na=ndims(a);Nt1=ndims(t1);NT=ndims(T);NF=ndims(F);
Sa=size(a);St1=size(t1);ST=size(T);SF=size(F);
La=length(a);Lt1=length(t1);LT=length(T);LF=length(F);
fprintf('数组%7s%8s%8s%8s\n','a','t1','T','F')
fprintf('维度数%5d%8d%8d%8d\n',Na,Nt1,NT,NF)
fprintf('规模%5d%3d%5d%3d%5d%3d%5d%3d\n',Sa,St1,ST,SF)
fprintf('长度%7d%8d%8d%8d\n',La,Lt1,LT,LF)
数组 a t1 T F
维度数 2 2 2 2
规模 1 1 1 10 1 1 0 0
长度 1 10 1 0
3)判断数组相等
P=t1==t2 %对不同浮点计算方法获得的数进行比较的本指令,不推荐使用
E=max(abs(t1-t2))
P =
1 1 1 1 1 1 0 1 1
1
E =
可见2个数组中的元素不完全相等。
应记住:这种现象在数值计算中常常会遇到;并且,若想检验同一个量的不同方法、途径算得的结果,应尽量不用“==”符判断,而应借助“两个量间的(相对)误差水平是否小于某个容差”进行判断。
比如
pp=abs(t1-t2)<1e-14
pp =
1 1 1 1 1 1 1 1 1
1
2.对于指令A=reshape(1:18,3,6)产生的数组
A =
1 4 7 10 13 16
2 5 8 11 14 17
3 6 9 12 15 18
先请你用一条指令,使A数组中取值为2、4、8、16的元素都被重新赋值为NaN。
然后,再请你用一条指令,把A数组的第4、5两列元素都被重新赋值为Inf。
1)产生数组A
A=reshape(1:18,3,6)
A =
1 4 7 10 13 16
2 5 8 11 14 17
3 6 9 12 15 18
2)利用单序号实现对2、4、8、16的元素的重新赋值
A([2,4,8,16])=NaN %这些位置元素的重赋值不可能采用“全下标”一次性实现
A =
1 NaN 7 10 13 NaN
NaN 5 NaN 11 14 17
3 6 9 12 15 18
3)利用全下标和冒号对第4、5列元素进行重赋值
A(:,[4,5])=Inf
A =
1 NaN 7 Inf Inf NaN
NaN 5 NaN Inf Inf 17
3 6 9 Inf Inf 18
3.由指令rng('default'),A=rand(3,5)生成二维数组A,试求该数组中所有大于的元素的位置,分别求出它们的“全下标”和“单下标”。
1)产生试验数组
rng('default')
A=rand(3,5)
A =
2)寻找数值大于的所有元素的全下标
[ri,cj]=find(A>;
disp(' ')
disp('大于的元素的全下标')
disp(['行号',int2str(ri')])
disp(['列号',int2str(cj')])
大于的元素的全下标
行号 1 2 1 2 2 3 1 3 1 3
列号 1 1 2 2 3 3 4 4 5 5
3)寻找数值大于的所有元素的单序号
id=find(A>;
disp(' ')
disp('大于的元素的单序号')
disp(id')
大于的元素的单序号
1 2 4 5 8 9 10 12 13 15 4.已知A=magic(3),B=rand(3),请回答以下问题:
(1)A.*B和B.*A的运行结果相同吗请说出理由。
(2)A*B 和A.*B 的运行结果相同吗请说出理由。
(3)A*B 和B*A 的运行结果相同吗请说出理由。
(4)A.\B 和B./A 的运行结果相同吗请说出理由。
(5)A\B 和B/A 的运行结果相同吗请说出理由。
(6)A*A\B-B 和A*(A\B)-B 的运行结果相同吗它们中那个结果的元素都十分接近于0
(7)A\eye(3)和eye(3)/A 的运行结果相同吗为什么
(1)相同。
数组对应元素间相乘运算,服从交换律。
(2)不同。
前者是矩阵乘积,后者是数组对应元素的乘积。
(3)不同。
矩阵乘运算不服从交换律。
(4)相同。
因为在两个指令中,数组A 始终是“除数组”,而B 是“被除数组”。
(5)一般不同。
前者是B 左除A ,后者是B 右除A 。
(6)后者结果接近于全0元素阵。
A*(A\B)-B 相当于A*(inv(A)*B)-B ,所以几乎为0阵。
(7)相同。
实际上得到的就是A 的逆阵。
5. 已知矩阵⎥⎦
⎤⎢⎣⎡=4321A ,(1)运行指令B1=A.^, B2=.^A, B3=A^, B4=^A 可以观察到不同运算方法所得结果不同。
(2)请分别写出根据B1, B2, B3, B4恢复原矩阵A 的M 码。
1)生成四个指数运算结果
A=[1,2;3,4];
B1=A.^
B2=.^A %等式两边进行若进行对数操作,可得
B3=A^
B4=^A %等式两边进行若进行矩阵对数操作,可得
B1 =
B2 =
B3 =
+ -
- +
B4 =
2)逆运算
A1=B1.^2
A2=log(B2)/log
A3=B3^2
A4=logm(B4)/logm
A1 =
A2 =
1 2
3 4
A3 =
+ +
- +
A4 =
6.先运行指令x=-3*pi:pi/15:3*pi; y=x; [X,Y]=meshgrid(x,y); warning off; Z=sin(X).*sin(Y)./X./Y; 产生矩阵Z。
(1)请问矩阵Z中有多少个“非数”数据(2)用指令surf(X,Y,Z); shading interp观察所绘的图形。
(3)请写出绘制相应的“无裂缝”图形的全部指令。
(提示:isnan用于判断是否非数;可借助sum求和;realmin是最小正数。
)
〖解答〗
x=-3*pi:pi/15:3*pi;
y=x;
[X,Y]=meshgrid(x,y);
warning off
Z=sin(X).*sin(Y)./X./Y;
NumOfNaN=sum(sum(isnan(Z))) %计算“非数”数目
%NumOfNaN2=length(find(isnan(Z)==1))
subplot(1,2,1),surf(X,Y,Z),shading interp,title('有缝图')
%产生无缝图
XX=X+(X==0)*realmin;
YY=Y+(Y==0)*realmin;% realmin返回指定浮点数类型所能表示的最小值
ZZ=sin(XX).*sin(YY)./XX./YY;
subplot(1,2,2),surf(XX,YY,ZZ),shading interp,title('无缝图') NumOfNaN =
181
7.在时间区间[0,10]中,绘制t
15.0-
=曲线。
要求分别采取
-
e
y t2
cos
“非向量化编程”和“向量化编程”编写两段程序绘图。
〖解答〗
%标量循环运算法
t=linspace(0,10,200);
N=length(t);
y1=zeros(size(t));
for k=1:N
y1(k)=1-exp*t(k))*cos(2*t(k));
end
subplot(1,2,1),plot(t,y1),xlabel('t'),ylabel('y1'),grid on
%数组运算法
y2=1-exp*t).*cos(2*t);
subplot(1,2,2),plot(t,y2),xlabel('t'),ylabel('y2'),grid on。