习题2-数值数组及向量化运算
c语言 数组 练习题

c语言数组练习题C语言数组练习题C语言作为一门被广泛应用的编程语言,数组是其重要的数据结构之一。
掌握数组的使用和操作对于编写高效的程序至关重要。
本文将通过一些实际的练习题来帮助读者加深对C语言数组的理解和应用。
1. 求数组元素的和题目:给定一个整数数组,编写一个程序来计算数组中所有元素的和。
解法:使用一个变量sum来存储数组元素的和。
通过遍历数组,将每个元素累加到sum中,最后返回sum即可。
以下是示例代码:```c#include <stdio.h>int sumArray(int arr[], int size) {int sum = 0;for (int i = 0; i < size; i++) {sum += arr[i];}return sum;}int main() {int arr[] = {1, 2, 3, 4, 5};int size = sizeof(arr) / sizeof(arr[0]);int sum = sumArray(arr, size);printf("数组元素的和为:%d\n", sum);return 0;}```2. 查找数组中的最大元素题目:给定一个整数数组,编写一个程序来找到数组中的最大元素。
解法:使用一个变量max来存储数组中的最大值。
通过遍历数组,将每个元素与max比较,更新max的值为较大的那个元素。
以下是示例代码:```c#include <stdio.h>int findMax(int arr[], int size) {int max = arr[0];for (int i = 1; i < size; i++) {if (arr[i] > max) {max = arr[i];}}return max;}int main() {int arr[] = {3, 8, 2, 1, 5};int size = sizeof(arr) / sizeof(arr[0]);int max = findMax(arr, size);printf("数组中的最大元素为:%d\n", max);return 0;}```3. 数组元素的反转题目:给定一个整数数组,编写一个程序来反转数组中的元素。
matlab2011教程之二数值数组及向量化运算

第 2 章 数值数组及向量化运算本章集中讲述两个数据类型(数值数组和逻辑数组)、两个特有概念变量(非数和空)、以及MATLAB的数组运算和向量化编程。
值得指出:本章内容是读者今后编写各种科学计算M码的基本构件。
数值数组(Numeric Array)是MATLAB最重要的数据类型数组。
在各种维度的数值数组中,二维数组为最基本、最常用。
本章对二维数组创建、标识、寻访、扩充、收缩等方法进行了详尽细腻的描述,并进而将这些方法推广到高维数组。
本章讲述的逻辑数组主要产生于逻辑运算和关系运算。
它是MATLAB 援引寻访数据、构成数据流控制条件、、编写复杂程序所不可或缺的重要构件。
数组运算是MATLAB区别于其它程序语言的重要特征,是MATLAB绝大多数函数指令、Simulink许多库模块的本性,是向量化编程的基础。
为此,本章专辟第2.2节用于阐述MATLAB的这一重要特征。
在此提醒读者注意:随书光盘mbook目录上保存着本章相应的电子文档“ch02_数值数组及向量化运算.doc”。
该文档中有本章全部算例的可执行指令,以及相应的运算结果。
2.1数值数组的创建和寻访2.1.1一维数组的创建1递增/减型一维数组的创建(1)“冒号”生成法(2)线性(或对数)定点法2其他类型一维数组的创建(1)逐个元素输入法(2)运用MATLAB函数生成法【例2.1-1】一维数组的常用创建方法举例。
a1=1:6a2=0:pi/4:pia3=1:-0.1:0a1 =1 2 3 4 5 6a2 =0 0.7854 1.5708 2.3562 3.1416a3 =Columns 1 through 81.0000 0.9000 0.8000 0.7000 0.6000 0.5000 0.4000 0.3000Columns 9 through 110.2000 0.1000 0b1=linspace(0,pi,4)b2=logspace(0,3,4)b1 =0 1.0472 2.0944 3.1416b2 =1 10 100 1000c1=[2 pi/2 sqrt(3) 3+5i]c1 =2.0000 1.5708 1.73213.0000 + 5.0000i rng defaultc2=rand(1,5)c2 =0.8147 0.9058 0.1270 0.9134 0.6324〖说明〗x1=(1:6)' , x2=linspace(0,pi,4)'y1=rand(5,1)z1=[2; pi/2; sqrt(3); 3+5i]2.1.2二维数组的创建1小规模数组的直接输入法【例2.1-2】在MATLAB环境下,用下面三条指令创建二维数组C。
MATLAB练习作业(已做)2012

说明:如在测试时请将程序中的中文字符改为西文(部分程序为手写,并未经matlab验证)2012年春《MATLAB基础》第一次上机练习与作业练习1:脚本文件建立一个文件名为helloWorld的脚本文件,运行该文件时显示出如下文字:Hello World!I am going to learn MATLAB•提示: 用disp显示字符串,将要显示的字符号串用单引号引起来。
如'This is a string'练习2:变量获取并保存当前的日期与时间●用函数clock生成一个变量,变量名为start●用size查看start的维数,它是一个行向量还是一个列向量?●start包含什么内容?用help clock查看●用函数datestr将向量start转换成字符串,得到新的变量,名为startString●将start与startString保存为mat文件,文件名为startTime●在练习1建立的脚本文件helloWorld.m文件中,用load函数导入变量startTime, 并显示如下文字:I started learning MATLAB on * start date and time*练习3:标量你将要以指数增长的速度来学习MATLAB, 将如下内容添加到helloWorld.m文件中●假设你的学习时间是一个常量,为1.5 days,将此时间用秒表示,赋给变量tau●假设课程持续时间为5 days. 将这个时间单位转换为秒,保存在变量endofClass中?●将学到的知识描述为t的函数,函数方程为:●用函数datestr将向量start转换成字符串,得到新的变量startString●在课程结束时间endofClass,你将学到多少知识?用变量knowledgeAtEnd表示(指数函数exp)●用变量knowledgeAtEnd,显示如下语句:At the end of the MATLAB class, I will know X% of MATLAB提示: 将数转换成字符串,用num2str练习4:向量运算计算从课程开始到现在经过的时间,用秒表示.●在helloWorld.m中,建立一系列变量,变量名分别为:secPerMin, secPerHour,secPerDay,secPerMonth(假设每个月30.5天),以及secPerYear.●将变量按次序secPerYear,secPerMonth, secPerDay,secPerHour, secPerMin,1 排列,构成一个行向量,命名为secConversion?●用时钟函数clock生成一个向量currentTime●计算经过的时间elapsedTime,用currentTime与start相减.●通过向量secondConversion与elapsedTime的数量积运算计算时间t,●显示当前的时间水平,用变量currentKnowledge表示. ()●显示如下语句:At this time, I know X% of MATLAB练习5:向量函数计算你的学习轨迹.●在helloWorld.m中,建立线性时间向量tVec,包含从0到endOfClass的10000个样本点.●计算在每个时间点处对应的知识值,仍然用函数练习6:向量寻址什么时候你将学到50%的MATLAB知识?.●在向量knowledgeVec中,查找最接近0.5的元素所在的位置.●用halfTime保存对应的时间●显示如下语句:I will know half of MATLAB after X days要将halfTime用secPerDay转换成天数练习7:绘图画出学习的轨迹图?.●在helloWorld.m中,打开一个新的图形窗口(figure)●用向量tVec与knowledgeVec画出知识轨迹,画图时,将时间单位转换为天●用图形窗口中的zoom in 查看halfTime,与前面计算结果相比较.clear,clc;disp('Hello World!');disp('I am going to learn MA TLAB');start=clock;[startx,starty]=size(start);if startx>startydisp('一个行向量')elsedisp('一个列向量');endstartString=datestr(start);save startTime.mat start startString;waittime=input('为使程序达到较好的执行效果,请输入程序需要暂停时间(秒):'); state = 0;h = waitbar(0, '请等待...', 'Name', '进度条', 'CreateCancelBtn', ...'state = 1; delete(h); clear h');h1 = findall(h, 'style', 'pushbutton');set(h1, 'string', '取消', 'fontsize', 10)for i = 1 : 100waitbar(i/100, h, ['已暂停时间百分比' num2str(i) '%']);pause(waittime/100);if statebreakendendif exist('h') == 1delete(h);endload startTimedisp('I started learning MATLAB on * start date and time*');tau=1.5*24*3600;endofClass=5*24*3600;knowledgeAtEnd=1-exp(-tau/endofClass);disp(['At the end of the MATLAB class, I will know ',num2str(knowledgeAtEnd*100),' % of MATLAB']);secPerMin=60;secPerHour=3600;secPerDay=24*secPerHour;secPerMonth=30.5*secPerDay;secPerYear=12*secPerMonth;secondConversion=[secPerYear,secPerMonth, secPerDay,secPerHour, secPerMin,1]; currentTime=clock;elapsedTime=currentTime-start;elapsedTime=elapsedTime.*secondConversion;currentknowledge=1-exp(-elapsedTime/endofClass);disp(['At this time, I know ',num2str(sum(currentknowledge)*100),'% of MATLAB']);tVec=linspace(0,endofClass,1000);knowledgeVec=1-exp(-tVec./endofClass);halfTimeindex=find(abs(knowledgeVec-0.5)<1e-3);halfTime=sum(tVec(halfTimeindex))/length(halfTimeindex)/secPerDay;disp(['I will know half of MATLAB after ',num2str(halfTime),' days']);plot(tVec/secPerDay,knowledgeVec);xlabel('Day');2012年春《MATLAB基础》第二次上机练习与作业练习1:函数文件建立一个文件名为plotSin的函数文件,要求:●函数声明为:functon plotSin(f1)●该函数用于画出频率为的正弦波在区间上的图像.●每个周期含有16个数据点function plotsin(f1)xnum=16*f1;x=linspace(0,2*pi,xnum);plot(x,sin(f1*x));练习2:条件语句●修改函数plotSin(f1)使之有两个输入变量,形式为plotSin(f1,f2)●如果输入的变量个数为1,执行以前写的绘图命令.否则显示文字'Two inputs were given'●提示:输入变量的数目用内置变量名:narginfunction plotsin(f1,f2)if nargin==1xnum=16*f1;x=linspace(0,2*pi,xnum);plot(x,sin(f1*x));elseerror('Two inputs were given');end练习3:绘图命令●修改PlotSin中的绘图命令,将数据点类型改为正方形,线形改为红色虚线,线宽为2.设置数据点填充色为黑色(属性名为:LineWidth, MarkerFaceColor)●如果有2个输入变量,新开一个绘图窗口,上下排列,并且激活上面图形窗口plotSin(6)plotSin(2,3)function plotsin(f1,f2)if nargin==1h1=figure(1);xnum=16*f1;x=linspace(0,2*pi,xnum);plot(x,sin(f1*x),'--rs','MarkerFaceColor','k','LineWidth',2);elseh2=figure(2);h1=figure(1);xnum=16*f1;x=linspace(0,2*pi,xnum);plot(x,sin(f1*x),'--rs','MarkerFaceColor','k','LineWidth',2);end练习4:半对数图在过去5年里,某课程学生人数分别为:15,25,55,115,144.班级规模似乎呈指数增长趋势,用半对数图来验证.要求绘制的图形效果如下●相关函数:semilogy,xlabel,ylabel,axis,title●数据点为玫红,正方形,没有折线相连.点的大小为10,点边线的宽度为4.x=1:5;y=[15,25,55,115,144];h=semilogy(x,y,' sr','MarkerSize',10,'Linewidth',4);xlabel('x');ylabel('y');title('My Semilogy plot');axis([0,6,10,300])set(h,'Color',[1 0.3 0.6]);练习5:条形图生成一个有5个随机数构成的向量,画出一幅条形图,条形块为红色.效果如下:bar(1:5,rand(5,1),'r')练习6:圆的绘制●建立一个画圆的函数文件.function [x y]=getCircle(center,r)运行程序得到的是圆上点的坐标●调用程序画出同心圆及五环图,效果如下col=['b','k','r','y','g'];subplot 121r1=1:5;center1=[0,0];for i=1:5[x,y]=getCircle(center1,r1(i));plot(x,y,col(i),'Linewidth',2);hold onendaxis equalaxis([-5 5 -5 5])subplot 122r2=0.5;center2=[-1 0;0 0;1 0;-0.5 -0.5;0.5 -0.5];for i=1:5[x,y]=getCircle(center2(i,:),r2);plot(x,y,col(i),'Linewidth',2);hold onendaxis equalaxis([-1.5 1.5 -1.5 1])-505-101-1.5-1-0.50.512012年春《MATLAB 基础》第三次上机练习与作业练习1:演示文件命令窗口中,键入:demo,出现MATLAB的demo演示窗口,然后选择:MATLAB下的Matrices,依次选取其中的Basic Matrix operation 、Matrix manipulation两个示例,进行MATLAB矩阵运算的学习。
《数组和向量》课件

向量的数乘运算
总结词
数乘运算是指用一个标量去乘一个向 量,得到的结果仍为一个向量。
详细描述
数乘运算的结果是原向量大小的变化 和方向的改变。设有一个向量a和一个 标量k,数乘运算的结果是k*a,其大 小为|k|*|a|,方向与原向量a相同或相 反,取决于k的正负。
向量的点乘和叉乘运算
总结词
点乘和叉乘是两个向量的内积和外积,分别对应了向量的长度和方向。
详细描述
点乘的结果是一个标量,表示两个向量的长度和夹角的余弦值。叉乘的结果是一个向量,其方向垂直于作为运算 两向量的平面,大小等于两向量的模的乘积与夹角的正弦值的乘积。
04
数组和向量在编程中的应 用
数组在数据处理中的应用
数据存储
数组是用于存储大量数据 的有序集合,可以高效地 存储、检索和操作数据。
一维数组的赋值
可以通过索引来给一维数组中的元素赋值。例如,`arr[0] = 10`会将数组的第一 个元素赋值为10。
二维数组的创建与赋值
二维数组的创建
在Python中,可以使用方括号[]来创建二维数组。例如,`matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]`。
数据处理
通过数组运算,可以快速 进行数据清洗、筛选、排 序和聚合等操作。
并行计算
利用多维数组,可以实现 高效的并行计算,提高数 据处理速度。
向量在机器学习算法中的应用
特征表示
相似度计算
向量用于表示机器学习算法中的特征 ,可以描述数据的内在规律和关系。
向量可以用于计算数据之间的相似度 ,用于聚类、分类和推荐等任务。
《数组和向量》PPT课件
contents
目录
C程序设计(数组)习题与答案

C程序设计(数组)习题与答案C程序设计(数组)习题与答案数组是C语言中常用的数据结构之一,它可以存储多个相同类型的元素。
掌握数组的使用对于C程序设计至关重要,下面将为大家介绍一些关于C数组的习题及其答案。
1. 习题一:计算数组元素的和题目描述:编写一个程序,计算给定数组中所有元素的和,并输出结果。
解题思路:```c#include <stdio.h>int main() {int arr[5] = {1, 2, 3, 4, 5}; // 定义一个包含5个元素的整型数组int sum = 0; // 用于存储和的变量// 遍历数组,累加每个元素的值for (int i = 0; i < 5; i++) {sum += arr[i];}printf("数组元素的和为:%d\n", sum);return 0;}```2. 习题二:查找数组中的最大值题目描述:编写一个程序,找出给定整型数组中的最大值,并输出结果。
解题思路:```c#include <stdio.h>int main() {int arr[7] = {4, 7, 2, 9, 1, 5, 8}; // 定义一个包含7个元素的整型数组int max = arr[0]; // 假设第一个元素为最大值// 遍历数组,比较每个元素的值与当前最大值的关系for (int i = 1; i < 7; i++) {if (arr[i] > max) {max = arr[i];}}printf("数组中的最大值为:%d\n", max);return 0;}```3. 习题三:查找数组中的特定元素题目描述:编写一个程序,在给定整型数组中查找是否存在指定元素,并输出结果。
解题思路:```c#include <stdio.h>int main() {int arr[6] = {3, 6, 9, 2, 5, 8}; // 定义一个包含6个元素的整型数组 int target = 2; // 指定要查找的元素int found = 0; // 用于标记是否找到目标元素的变量// 遍历数组,比较每个元素的值与目标值的关系for (int i = 0; i < 6; i++) {if (arr[i] == target) {found = 1;break;}}if (found) {printf("数组中存在目标元素:%d\n", target);} else {printf("数组中不存在目标元素:%d\n", target);}return 0;}```4. 习题四:数组元素逆序排列题目描述:编写一个程序,将给定整型数组的元素逆序排列,并输出结果。
习题2参考答案及数组广义表习题

习题2参考答案一、单项选择题1.A 2.A 3.D 4.C 5.D 6.A 7.B 8.B 9.C 10.A 11.D 12.B 13.C 14.B 15.C 16.C 17.B 18.D 19.C 20.A二、填空题1.线性2.n-i+13.相邻4.前移,前,后5.物理存储位置,链域的指针值6.前趋,后继7.顺序,链接8.一定,不一定9.线性,任何,栈顶,队尾,队头10.单链表,双链表,非循环链表,循环链表11.使空表和非空表统一;算法处理一致12.O(1),O(n)13.栈满,栈空,m,栈底,两个栈的栈顶在栈空间的某一位置相遇14.2、315.O(1)三、简答题1.头指针是指向链表中第一个结点(即表头结点)的指针;在表头结点之前附设的结点称为头结点;表头结点为链表中存储线性表中第一个数据元素的结点。
若链表中附设头结点,则不管线性表是否为空表,头指针均不为空,否则表示空表的链表的头指针为空。
2.线性表具有两种存储结构即顺序存储结构和链接存储结构。
线性表的顺序存储结构可以直接存取数据元素,方便灵活、效率高,但插入、删除操作时将会引起元素的大量移动,因而降低效率:而在链接存储结构中内存采用动态分配,利用率高,但需增设指示结点之间关系的指针域,存取数据元素不如顺序存储方便,但结点的插入、删除操作较简单。
3.应选用链接存储结构,因为链式存储结构是用一组任意的存储单元依次存储线性表中的各元素,这里存储单元可以是连续的,也可以是不连续的:这种存储结构对于元素的删除或插入运算是不需要移动元素的,只需修改指针即可,所以很容易实现表的容量的扩充。
4.应选用顺序存储结构,因为每个数据元素的存储位置和线性表的起始位置相差一个和数据元素在线性表中的序号成正比的常数。
因此,只要确定了其起始位置,线性表中的任一个数据元素都可随机存取,因此,线性表的顺序存储结构是一种随机存取的存储结构,而链表则是一种顺序存取的存储结构。
5.设尾指针比设头指针好。
向量化运算

向量化运算
向量化运算是指将数学运算应用于整个向量或矩阵,以提高计算效率和简化代码。
向量化运算可以利用硬件优化,如使用SIMD指令集或并行处理器。
向量化运算可以在很大程度上提高计算速度,特别是在大规模数据或高维度数据上。
传统的循环运算可能会导致大量的重复计算和内存访问,而向量化运算可以同时对整个向量或矩阵进行操作,减少了循环和内存操作的开销。
常见的向量化运算包括加法、减法、乘法、除法、点积、叉积等运算。
通过对整个向量或矩阵进行这些运算,可以大幅提高计算效率。
在Python中,NumPy是一个常用的向量化运算库。
它提供了多维数组对象和一组函数,可以进行高效的向量化运算。
使用NumPy,可以方便地对大规模数据进行数学运算,并且可以利用底层的C语言优化,提高运算速度。
例如,可以使用NumPy进行矩阵乘法操作:
```python
import numpy as np
a = np.array([[1, 2], [3, 4]]) # 创建矩阵
b = np.array([[5, 6], [7, 8]])
c = a.dot(b) # 矩阵相乘
print(c)
```
输出结果为:
```
[[19 22]
[43 50]]
```
以上代码中,a和b都是二维数组,使用dot()函数进行矩阵乘法运算,得到结果c。
通过向量化运算,可以高效地进行矩阵乘法操作。
第三章 数值数组及向量化运算

含
义
产生均匀分布随机数组 产生正态分布随机数组 产生全1数组 产生全0数组 生成各种分布随机数组 在指定字符集上生成均布随机数组 产生个各种用途的测试数组/矩阵
17
山东师范大学物理与电子科学学院
3.2 数值数组的创建和访问
【例3.2-5】标准数组产生的演示。
6
山东师范大学物理与电子科学学院
3.1 数值计算的特点和地位
第 【例3.1-2】已知 f (t ) esin( t ) 三 章 (1)符号计算解法 数 值 数 组 及 向 量 化 运 算
,求 s( x ) f (t ) dt 。
0 4
syms t x ft=exp(-sin(t)) sx=int(ft,t,0,4) ft = exp(-sin(t)) Warning: Explicit integral could not be found. > In sym.int at 58 sx = int(exp(-sin(t)),t = 0 .. 4)
第 三 章 3.2.1 一维数组的创建
就所创建的一维数组的用途而言,大致分为两类:自变量数组和 通用变量数组。
数 值 1、递增/递减一维数组的创建 这类数组的特点:数组元素值的大小按递增或递减的次序排列;数 数 组 组元素之间的“差”是“确定”的,即“等步长”的。这类数组主要用 及 作函数的自变量,for循环中循环自变量等。 向 量 (1)“冒号”生成法 x=a: inc: b 化 运 算
山东师范大学物理与电子科学学院
12
这是最简单,但又最通用的构造方法。如 a0= 数值数组的创建和访问
第 三 章 数 值 数 组 及 向 量 化 运 算
- 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-
cos
e
y t2求分别采取“非向量化编程”和“向量化编程”编写两段程序绘图。
〖解答〗
%标量循环运算法
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'),gri d on
%数组运算法
y2=1-exp*t).*cos(2*t);
subplot(1,2,2),plot(t,y2),xlabel('t'),ylabel('y2'),gri d on。