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

合集下载

c语言 数组 练习题

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教程之二数值数组及向量化运算

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验证)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程序设计至关重要,下面将为大家介绍一些关于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. 习题四:数组元素逆序排列题目描述:编写一个程序,将给定整型数组的元素逆序排列,并输出结果。

第三章 数组阵列及向量化运算

第三章 数组阵列及向量化运算

例:3.5-2关系运算例:求sin(x)/x近似极限,修补图形缺口
t=-2*pi:pi/10:2*pi; y=sin(t)./t; tt=t+(t==0)*eps; yy=sin(tt)./tt; subplot(1,2,1),plot(t,y),axis([-7,7,-0.3,1.2]) xlabel('t'),ylabel('y'),title('残缺图形') subplot(1,2,2),plot(tt,yy),axis([-7,7,-0.3,1.2]) xlabel('tt'),ylabel('yy'),title('完整图形')
对m行、n列的2维数组a: 计为m×n的数组a; 行标识、列标识均从1开始; 行标识从上到下递增; 列标识从左到右递增。 a=
1
2
3
4
5
2 22 23 24 25 3 32 33 34 35 4 42 43 44 45 a(3, 4)=34
§1 数值数组
1. 一维数组的创建和寻访 创建:(1)逐个元素输入法 >> x= [2 pi/2 sqrt(3) 3+5i] (2)冒号生成法( x = a:inc:b ) >> x = 1:2:10; y = 1:100; z=100:-3:1; (3)线性(或对数)定点法 x = linspace(a,b,n) (等差) 同x = a: (b-a)/(n-1): b x = logspace(a,b,n) (等比) %n为数组长度 例:>>x=linspace(1,7,5) 访问: x(3), x([1,3 5]), x(1:3), x(4:end), x(find(x>4)) (4) 函数生成法例: >>ones(1,6)

向量化运算

向量化运算

向量化运算
向量化运算是指将数学运算应用于整个向量或矩阵,以提高计算效率和简化代码。

向量化运算可以利用硬件优化,如使用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. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

习题21.请读者先运行以下指令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=lengt h(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 03)判断数组相等P=t1==t2 %对不同浮点计算方法获得的数进行比较的本指令,不推荐使用E=max(abs(t1-t2))P =1 1 1 1 1 1 0 1 1 1E =4.4409e-16可见2个数组中的元素不完全相等。

应记住:这种现象在数值计算中常常会遇到;并且,若想检验同一个量的不同方法、途径算得的结果,应尽量不用“==”符判断,而应借助“两个量间的(相对)误差水平是否小于某个容差”进行判断。

比如pp=abs(t1-t2)<1e-14pp =1 1 1 1 1 1 1 1 1 1 2.对于指令A=reshape(1:18,3,6)产生的数组A =1 4 7 10 13 162 5 8 11 14 173 6 9 12 15 18先请你用一条指令,使A数组中取值为2、4、8、16的元素都被重新赋值为NaN。

然后,再请你用一条指令,把A数组的第4、5两列元素都被重新赋值为Inf。

1)产生数组AA=reshape(1:18,3,6)A =1 4 7 10 13 162 5 8 11 14 173 6 9 12 15 182)利用单序号实现对2、4、8、16的元素的重新赋值A([2,4,8,16])=NaN %这些位置元素的重赋值不可能采用“全下标”一次性实现A =1 NaN 7 10 13 NaNNaN 5 NaN 11 14 173 6 9 12 15 183)利用全下标和冒号对第4、5列元素进行重赋值A(:,[4,5])=InfA =1 NaN 7 Inf Inf NaNNaN 5 NaN Inf Inf 173 6 9 Inf Inf 183.由指令rng('default'),A=rand(3,5)生成二维数组A,试求该数组中所有大于0.5的元素的位置,分别求出它们的“全下标”和“单下标”。

1)产生试验数组rng('default')A=rand(3,5)A =0.8147 0.9134 0.2785 0.9649 0.95720.9058 0.6324 0.5469 0.1576 0.48540.1270 0.0975 0.9575 0.9706 0.80032)寻找数值大于0.5的所有元素的全下标[ri,cj]=find(A>0.5);disp(' ')disp('大于0.5的元素的全下标')disp(['行号 ',int2str(ri')])disp(['列号 ',int2str(cj')])大于0.5的元素的全下标行号 1 2 1 2 2 3 1 3 1 3列号 1 1 2 2 3 3 4 4 5 53)寻找数值大于0.5的所有元素的单序号id=find(A>0.5);disp(' ')disp('大于0.5的元素的单序号')disp(id')大于0.5的元素的单序号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.^(0.5), B2=0.5.^A, B3=A^(0.5), B4=0.5^A 可以观察到不同运算方法所得结果不同。

(2)请分别写出根据B1, B2, B3, B4恢复原矩阵A 的M 码。

1)生成四个指数运算结果A=[1,2;3,4];B1=A.^0.5B2=0.5.^A %等式两边进行若进行对数操作,可得B3=A^0.5B4=0.5^A %等式两边进行若进行矩阵对数操作,可得 B1 =1.0000 1.41421.73212.0000B2 =0.5000 0.25000.1250 0.0625B3 =0.5537 + 0.4644i 0.8070 - 0.2124i1.2104 - 0.3186i 1.7641 + 0.1458iB4 =0.9910 -0.4422-0.6634 0.32762)逆运算A1=B1.^2A2=log(B2)/log(0.5)A3=B3^2A4=logm(B4)/logm(0.5)A1 =1.00002.00003.00004.0000A2 =1 23 4A3 =1.0000 + 0.0000i2.0000 + 0.0000i3.0000 - 0.0000i4.0000 + 0.0000iA4 =1.00002.00003.00004.00006.先运行指令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 offZ=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),shadinginterp,title('无缝图')NumOfNaN =1817.在时间区间[0,10]中,绘制t-=曲线。

要求分别采取15.0-cosey t2“非向量化编程”和“向量化编程”编写两段程序绘图。

〖解答〗%标量循环运算法t=linspace(0,10,200);N=length(t);y1=zeros(size(t));for k=1:Ny1(k)=1-exp(-0.5*t(k))*cos(2*t(k));endsubplot(1,2,1),plot(t,y1),xlabel('t'),ylabel('y1' ),grid on%数组运算法y2=1-exp(-0.5*t).*cos(2*t);subplot(1,2,2),plot(t,y2),xlabel('t'),ylabel('y2' ),grid on。

相关文档
最新文档