MATLAB教学__02MATLAB as A Calculator and Array Operation-计算器与数组操作


前言

本文是学习郭老师的MATLAB教程过程中所做的笔记。本章笔记属于MATLAB基础,内容较杂,但都很重要。


郭彦甫老师上课使用的版本:MATLAB R2014a

我学习时使用的版本:MATLAB R2022b

界面窗口组成:

  • current folder-当前文件夹

  • command window-命令行窗口

  • workspace(存放variable变量)-工作区

  • command history-历史命令

编程模式有2种:

  • command line(in command window)-命令行(在命令行窗口内)

  • Scripts(.m files)-脚本(.m文件)


一、MATLAB as A Calculator-MATLAB作为计算器(直接在命令行窗口输入)

1.基本运算

  • 运算符号:+、-、*、/、^

  • 按下Enter计算结果,显示为:ans

  • 运算规则:

  • 1.从左到右

  • 2.运算优先级为(依次下降):

    • (1)括号()

    • (2)次方^

    • (3)乘法和除法*、/

    • (4)加法和减法+、-

Exercise-练习
  • 在这里插入图片描述
cos(((1+2+3+4)^3/5)^0.5)

备注:学会查找MATLAB对应指令,如查询三角函数sin的MATLAB指令:
1.在浏览器搜索框键入“MATLAB sin”。(online help)
2.在MATLAB内部也可以搜索,在软件界面右上角搜索框输入“sin”即可。
3.在命令行窗口输入“help sin”后按Enter,会出现简短的文字信息。

  • 在这里插入图片描述
sin(sqr(pi))+log(tan(1))
  • 在这里插入图片描述
  2^(3.5*1.7)
  • 在这里插入图片描述
 exp(sin(10)

2.Embedding Functions-嵌入函数

  • 当函数成分很复杂时,可以将部分嵌入到其他函数中:

    例如
    在这里插入图片描述
    如下所示,

在这里插入图片描述

  • 多行代码可以压缩到一个命令当中。

3.Variables-变数(变量)

  • 变量不需要在赋值前进行说明(宣告)。

    说明(宣告):表明变量的形态是int、single、double或char等等。

  • 单个“等号”(=) 是赋值运算符:
    在这里插入图片描述
    如下所示,
    在这里插入图片描述
    但是,
    在这里插入图片描述
    所以我们可知:不能把变量指定给(赋给)一个实数,因为这个实数永远不会等于这个变量,实数是固定的不会改变。

思考(自行尝试):
1.大写和小写不同吗?
(如A=10,a=20)
2.变量名称能够以数字开头吗,可以包含数字吗?
(如2A=10,A2=10)

4.Numeric Variable (Data) Type-数值变量(数据)类型

在这里插入图片描述

  • 变量不被说明,而直接使用时,默认数据类型为double

    (1)双击工作区内的名称A,出现下图。
    在这里插入图片描述
    (2)命令行窗口输入who、whos
    在这里插入图片描述

double是一个64位(64bits)(=8个字节(8Bytes)的储存位置,里面可以储存floating point浮点运算的数值。
若要足够精准地储存一个小数,使用double是没有问题的。

5.Special Variables and Constants-特殊变量和常量

  • ans:答案answer

  • i,j:复数complex number

  • Inf:无穷大∞

  • eps:很小很小的数2.2204e-016

  • NaN:不是一个数值not a number

  • pi:圆周率π
    在这里插入图片描述

上述名称不能作为变量名

此外, 下列keywords的名称也都不能当做变量名,否则会发生混乱:

在这里插入图片描述
下图是发生混乱的一个例子:欲计算cos(8),但先令变量名为cos,将字串This String.指定给变量cos,然后cos(8)得到了变量cos第8个位置r:

在这里插入图片描述
在这里插入图片描述
而实际上cos为余弦函数,-1<cos(8)<1,应当得到一个实数。首先使用clear cos清除工作区中的变量cos,然后执行cos(8),得到正确结果:

在这里插入图片描述
此时注意“clear+变量名”可以清除工作区的某个变量,而“clear all”则会清空工作区

所以也不能用built-in function内置函数的名称当做变量名

6.MATLAB Calling Priority-MATLAB调用优先级

因此,注意下面的MATLAB调用优先级:

在这里插入图片描述
对应中文如下表所示:

名称优先级
变量1
内置函数2
子函数3
私有函数:mex文件>p文件>m文件4

7.Numeric Display “Format”-数字显示“格式”

我们都知道π=3.14159265…,但是在MATLAB里

在这里插入图片描述
只显示到了小数点后第四位。如果先输入format long,再输入pi,那么会显示到小数点后第15位:

在这里插入图片描述
下面表格总结了7种数字显示“格式”:

StyleResultExample
short短,固定十进制格式,小数点后有 4 位数字。3.1416
long长,固定十进制格式,小数点后有 15 位数字表示双精度值,单精度值为小数点后 7 位数字。3.141592653589793
shortE简短的科学记数法,小数点后有 4 位数字。3.1416e+00
longE长科学记数法,小数点后有 15 位数字表示双精度值,单精度值为小数点后 7 位数字。3.141592653589793e+00
bank小数点后有 2 位数字的货币格式。3.14
hex二进制双精度数的十六进制表示形式。400921fb54442d18
rat小整数的比率355/113
Exercise-练习
  • 计算加式结果的不同显示格式:分别用rat和long显示,
    在这里插入图片描述
    在这里插入图片描述
    所以答案是选项1和选项d。

8.Command Line Terminal-命令行终止符

观察下面两条指令的不同

在这里插入图片描述
当在指令后加上分号;时,MATLAB不会显示运算结果,尤其在指令过多可以减少不必要的麻烦,如下

在这里插入图片描述

使用上下方向键可以调出历史命令

9.Some Functions-一些重要指令

  • clc:清除命令行窗口的显示内容

  • clear:清除工作区的所有变量

  • who:显示工作区的变量名称

  • whos:显示工作区的变量信息


二、Array(Vector and Matrix)-数组(向量和矩阵)

1.向量和矩阵

矩阵和向量在MATLAB里一般都用中括号[ ]表示

例如,行向量A = [1 2 3 4],包含1,2,3,4四个元素,用空格隔开;列向量B = [1;2;3;4],包含包含1,2,3,4四个元素,用分号隔开(分号起换行的作用)。

在这里插入图片描述
在这里插入图片描述
则,两向量内积应为

在这里插入图片描述
两向量外积应为

在这里插入图片描述

尝试输入下面这个矩阵:
在这里插入图片描述
答案:
在这里插入图片描述

2.Array Indexing-数组索引(很重要,写程式时常用)

数组索引的意思是访问数组中特定元素的数字

若欲访问上图矩阵A中的21,方法有两种:

  1. A(1,2):对应矩阵A的第1行,第2列的元素。

在这里插入图片描述
2. A(4):对应矩阵A的第4个元素(按从上往下,从左往右的顺序数)。

在这里插入图片描述

思考下面指令对应的答案是什么?

在这里插入图片描述
答案:

在这里插入图片描述
在这里插入图片描述

注意:对于A([1 3],[1 3]):逗号前的[1 3]表示第1行和第3行,逗号后的[1 3]表示第1列和第3列,然后取行列相交的处的元素,即[1 6;31 7]。

3.Replacing Entries-取代某位置的某数值

使用上节所学,改变矩阵A中的下列元素:

在这里插入图片描述

在这里插入图片描述

此外,我顺便尝试了
在这里插入图片描述

4.Colon Operator-冒号运算符

想要创建一个长矩阵:A = [1 2 3 … 100],不可能逐字输入,可以使用A = [1 : 100],1为第一个数,100为最后一个数,等差为1。

所以冒号运算符可以用于创建等差数列

若要求B = [1 3 5 … 99],则可以使用B = [1:2:99],1为第一个数,99为最后一个数,等差为2。

冒号运算符语法:

在这里插入图片描述

Exercise-练习(并思考为什么):
  • 在这里插入图片描述

答案:

在这里插入图片描述

所以冒号运算符也可以和str一起用。

  • 在这里插入图片描述

首先我们知道A( 1 , 2 )表示A的第1行第2列的位置,把2换成冒号:,则A( 1 , : )表示A的第1行所有列,此时冒号:起到了indexing索引的作用,表示全部。

所以使用A ( 3 , : )访问到A的第三行。

在这里插入图片描述
然后

在这里插入图片描述
这里的[ ]表示为空,即令A的第3行为空,就删除了A的第三行。同理可以使用A( )=[ ]删除任意行和任意列

5.Array Concatenation-数组串联(数组连接)

只要能够保留相应的矩形形状,就可以通过串联形成数组(向量和矩阵)。

在这里插入图片描述
在这里插入图片描述

此外,思考[ A ; B ]的结果应当是什么?
答案:
在这里插入图片描述

Exercise-练习:
  • 如下,创建矩阵A,B,C,D并把他们串联成矩阵F。
    在这里插入图片描述

    答案:

    首先创建矩阵A、B、C、D,

    在这里插入图片描述

    然后进行串联,

    在这里插入图片描述

    或者

    在这里插入图片描述

6.Array Manipulation-数组操作(四则运算)

数组运算符包括表格中的7种:

+-*/
^.

在这里插入图片描述

输入下列指令,观察结果:

在这里插入图片描述

  • A+B为矩阵加法,A*B为矩阵乘法,这里不再赘述。

  • A.*B为点乘,即对应位置元素相乘,即结果为:

    在这里插入图片描述

  • 注意,矩阵没有除法,A/B表示A*(B的逆矩阵),即A*inv(B),其中inv(B)表示B的逆矩阵(与B^(-1)等效)。

  • A./B为点除,即对应位置元素相除,即结果为:

    在这里插入图片描述

那么矩阵A和实数a的运算呢?

在这里插入图片描述

  • A+a表示把矩阵A的每个位置上的元素都加上实数a,即

    在这里插入图片描述

  • A/a就是把A的每个位置上的元素都除上实数a。

  • A./a为A点除a,因为a为实数,所以结果和A/a一样,把A的每个位置上的元素都除上实数a。

  • A^a表示A的a次方,即A的二次方,即A*A。

  • A.^a就是把A的每个位置上的元素都取a次方,即

    在这里插入图片描述

最后,单引号又是做什么运算呢?

在这里插入图片描述

A’表示矩阵A的转置,简单来说就是对角线元素不变,将其他元素以对角线为对称轴做对称交换,可自行搜索了解转置的概念。

在这里插入图片描述

下表总结了常见的四则运算:

SymbolOperationFormExamples
+标量数组加法A+b[6,3]+2=[8,5]
-标量数组减法A-b[8,3]-5=[3,-2]
+数组添加A+B[6,5]+[4,8]=[10,13]
-数组减法A-B[6,5]-[4,8]=[2,-3]
*矩阵乘法A*B[3,5]*[4,8]'=52
.*数组乘法A.*B[3,5].*[4,8]=[12,40]
./数组右除法A./B[2,5]./[4,8]=[2/4,5/8]
.\数组左除法A.\B[2,5].\ [4,8]=[4/2,8/5]
.^数组取幂A.^B[3,5].[2,4]=[32,5^4]

7.Some Special Matrix-一些特殊矩阵

  • linspace():线性间隔向量。

  • eye(n):nxn的单位矩阵。

  • zeros(n1,n2):n1xn2的零矩阵。

  • ones(n1,n2):n1xn2的矩阵,且每个位置的元素都是1。

  • diag():对角矩阵。

  • rand():均匀分布的随机数。

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

8.Some Matrix Related Functions-一些矩阵相关函数

在这里插入图片描述

则输入下列指令,观察结果:

在这里插入图片描述

  • max():找到每列的最大数。

    在这里插入图片描述

    如上,max(A)给出了每一列最大的数,每次对列做运算。

    max(max(A)):找到矩阵中的最大数。

    在这里插入图片描述

  • min(A):找到每列的最小数。

    在这里插入图片描述

  • sum(A):对每列求和。

    在这里插入图片描述

  • mean(A):对每列求平均。

    在这里插入图片描述

  • sort(A):对每列元素进行升序排列。

    在这里插入图片描述

  • sortrows(A):默认基于第一列中的元素按升序对矩阵行进行排序。详见帮助文档。

    在这里插入图片描述

  • size(A):返回矩阵A的维度(行数和列数)。

    在这里插入图片描述

  • length(A):返回矩阵A中最大数组维度的长度。对于向量,长度仅仅是元素数量。对于具有更多维度的数据,长度为 max(size(A))。空数组的长度为零。

    在这里插入图片描述

  • find(A):返回A中非零元素的索引和值。详见帮助文档。

    在这里插入图片描述

    注意,括号内为两个==,是关系运算符。


总结

本章笔记由MATLAB作为计算器直接在命令行窗口输入和MATLAB的数组(向量和矩阵)知识这两个部分组成,内容虽然比较杂但是十分重要。


之后陆续上传后面章节的笔记和PDF版本,欢迎关注。

MATLAB教程地址

我最常用的写作开源软件Marktext的介绍、下载、安装与设置

MATLAB教学__01学习导览
MATLAB教学__02MATLAB as A Calculator and Array Operation-计算器与矩阵操作
MATLAB教学__03Script Writing,Structured Programming and User-defined Function-撰写脚本,结构化编程和用户自定义函数

  • 14
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 26
    评论
对于Java GUI编程实现计算器,你可以使用Swing和AWT这两种Java GUI工具包之一。 以下是一个简单的Java GUI计算器的实现示例: ```java import javax.swing.*; import java.awt.*; import java.awt.event.*; public class Calculator extends JFrame implements ActionListener { private JButton[] numberButtons; private JButton[] operatorButtons; private JButton clearButton, equalsButton, decimalButton; private JTextField textField; private double num1 = 0, num2 = 0, result = 0; private char operator; public Calculator() { setTitle("Calculator"); // Create the number buttons numberButtons = new JButton[10]; for (int i = 0; i < 10; i++) { numberButtons[i] = new JButton(String.valueOf(i)); } // Create the operator buttons operatorButtons = new JButton[4]; operatorButtons[0] = new JButton("+"); operatorButtons[1] = new JButton("-"); operatorButtons[2] = new JButton("*"); operatorButtons[3] = new JButton("/"); // Create the clear, equals, and decimal buttons clearButton = new JButton("C"); equalsButton = new JButton("="); decimalButton = new JButton("."); // Create the text field textField = new JTextField(10); textField.setEditable(false); // Set the layout manager and add the components setLayout(new GridBagLayout()); GridBagConstraints gc = new GridBagConstraints(); gc.gridx = 0; gc.gridy = 0; gc.gridwidth = 4; add(textField, gc); gc.gridwidth = 1; gc.gridy = 1; for (int i = 0; i < 10; i++) { gc.gridx = i % 3; gc.gridy = i / 3 + 2; add(numberButtons[i], gc); numberButtons[i].addActionListener(this); } gc.gridx = 0; gc.gridy = 5; add(operatorButtons[0], gc); operatorButtons[0].addActionListener(this); gc.gridx = 1; add(operatorButtons[1], gc); operatorButtons[1].addActionListener(this); gc.gridx = 2; add(operatorButtons[2], gc); operatorButtons[2].addActionListener(this); gc.gridx = 3; add(operatorButtons[3], gc); operatorButtons[3].addActionListener(this); gc.gridx = 0; gc.gridy = 6; add(clearButton, gc); clearButton.addActionListener(this); gc.gridx = 1; add(equalsButton, gc); equalsButton.addActionListener(this); gc.gridx = 2; add(decimalButton, gc); decimalButton.addActionListener(this); setSize(200, 200); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); } public void actionPerformed(ActionEvent e) { for (int i = 0; i < 10; i++) { if (e.getSource() == numberButtons[i]) { textField.setText(textField.getText() + i); } } if (e.getSource() == decimalButton) { textField.setText(textField.getText() + "."); } if (e.getSource() == clearButton) { textField.setText(""); num1 = 0; num2 = 0; result = 0; operator = ' '; } if (e.getSource() == operatorButtons[0]) { num1 = Double.parseDouble(textField.getText()); operator = '+'; textField.setText(""); } if (e.getSource() == operatorButtons[1]) { num1 = Double.parseDouble(textField.getText()); operator = '-'; textField.setText(""); } if (e.getSource() == operatorButtons[2]) { num1 = Double.parseDouble(textField.getText()); operator = '*'; textField.setText(""); } if (e.getSource() == operatorButtons[3]) { num1 = Double.parseDouble(textField.getText()); operator = '/'; textField.setText(""); } if (e.getSource() == equalsButton) { num2 = Double.parseDouble(textField.getText()); switch (operator) { case '+': result = num1 + num2; break; case '-': result = num1 - num2; break; case '*': result = num1 * num2; break; case '/': result = num1 / num2; break; } textField.setText(Double.toString(result)); } } public static void main(String[] args) { new Calculator(); } } ``` 这个示例应该可以实现一个简单的Java GUI计算器

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 26
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lau师傅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值