点击蓝字 关注我
本文大部分内容为2019年初次接触 TAM 211时所写,后续存在少量修改与增补。叙述时间可能有点错乱,凑合着看吧。
新的学期,我们迎来了 TAM 211 , 静力学的课程。虽说这是一门 水课 轻松愉快 的课,但每月两次(也有可能是四次)的 Quiz 总也是让人心惊胆颤的。
得益于暑期实验室项目的要求,对 MATLAB 的基本操作我也算是小有所成。因此,为了服务广大的 ME, CE 人民,我特地在暑的尾巴加班加点改出了这篇 MATLAB教程,开学大礼包不客气哟。
话不多说,请看学习笔记:
学前预热
MATLAB 的性能十分出色,它比其他程序(比如说 Python )的优越之处在于完善的帮助系统。
当你码代码遇到了一个忘记使用方法的函数时,你就可以在命令行窗口打上
help xxx
它会自动告诉你这玩意该怎么用!
如果是直接忘记应该用什么函数了,也可以上网百度搜素,各种博客与论坛上面会有很多解决方案,总有一款适合你。
因为直接在命令行窗口编写程序或者进行计算的话是不能修改已经运行过的东西的。而且一按回车就直接运行而不是换行(使用Enter+Shift),所以请务必 使用脚本(Script) 窗口!这能带来很大的便利。
在做作业的时候,可以不用做一题删一行,而是把原过程留着,打上注释(Ctrl+R, Ctrl+T 可以取消注释),方便事后检查错误之处(比如说在 211 quiz 之前或在 FlipitPhysics 成绩出来之后)。
设置 MATLAB 搜索路径
在使用的过程中,MATLAB的函数搜索仅仅包含当前文件夹与搜索路径中的文件。
当前文件夹
MATLAB 搜索路径
因此,在使用自己写的或者其他外置函数时,需要事先把它放到搜索路径中。过程也很简单:
主页 - 设置路径 -
添加文件夹/添加并包含子文件夹
TAM211
相信大家在之前的ECE110中也经历过这种事情:经过重重复杂计算,写了慢慢一纸的 A4 ,终于把答案给算出来并且被Prairielearn 评为正确,还需要 再来一遍 才能满分通过。然而,当自己重复那个复杂操作的时候一不小心出来了个啥岔子,于是就 再来亿遍 了。
这种情况在你使用 MATLAB 进行解题的时候就绝对不会发生了,因为 MATLAB 是不会出错的!要错就是自己错了。
如果答案很不幸地又错了,那就肯定是阴险狡诈的题目不仅仅改变了数据的大小,还更改了某个条件。这个时候就认命重做亿遍吧。
Solve([f1,f2,...],[x1,x2,...])
MATLAB 中的 solve 函数接受两个矩阵,前一个矩阵输入函数关系,后一个矩阵输入变量名字。它输出变量的一个解或多个解。
但要注意的是:
1. 使用本函数之前必须先声明变量!
事先声明变量
2. 输入的是包含一个或多个函数关系式的矩阵,不是其他杂七杂八的东西!
函数关
系式正
确示范
函数关
系的错
误示范
3. 函数关系中需要两个等号连用!!
一个等号是赋值,两个等号才是等于
4. 最终还需要用 [x y] = solve() 来进行赋值
懒得赋值
------------------------------
进行赋值
这个东西十分神秘,它的赋值方向不是一一对应的,而是一一对应的。
如果我们写了一句
[x y] = solve([f1 f2],[x y])
那么什么都不会发生
但如果写的是
[y x] = solve([f1 f2],[x y])
神奇的事情就发生了
本该是赋给y的值变到x上去了!
总结来说,solve 函数的赋值方式还是一一对应的。它的对应方式和变量声明的顺序无关,只与 solve 这一行中变量使用的顺序有关。
图解如下
有关 solve() 的两个小技巧:
syms 并不仅仅支持解方程,它还可用于其他含参的运算。
例如来自老白的 H9
我们就可以先声明参数 a 与 b ,然后进行莫得感情的乘方运算。
代码
结果
它也可以用于直接进行含参的方程的求解。
代码
结果
很多时候 solve 得出的结果是一串计算式,还需要复制粘贴二次求答案。
这并不是最复杂的那一个,但肯定是最典型的
此时我们就可以和 double() 函数连用直接打出需要的答案来。
代码
结果
感兴趣的同学可以验算一下 x 的值到底是不是348.5507 哦。
cross(V1,V2)
这玩意大家应该都挺熟悉的,就是用来求两个三维向量叉乘结果的函数。其中 V1 与 V2 分别就代表了那两个向量。
此函数一般用于求某个力关于某个点的 momentum, 需要
首先将 力 与 那个点到力的作用点 这两个向量表示出来,
无脑叉乘,
最后左手定则判断方向就搞定了。
比如说这题
只需要注意:
三维向量才存在叉乘,所以如果题目给定条件是二维的,需要简单转化为三维坐标才行。
acosd(x) 三角函数相关
关于三角函数,需要知道三点:
1. a... 代表反三角函数 arc...
2. x 默认为是弧度制的
3. ...d 接受角度制
norm(A)
这个函数用于求某个向量的模。
可被用于:
求两向量间夹角
求各种投影
求某个方向上的单位向量
以及其他一切用到向量的模的地方
很简单也很实用的函数,没啥好注意的。
PHYS212
虽说我们在考试的时候用不了 MATLAB ,但是在平时做题学习时的简单使用能够极大地减少埋头按计算器的时间。
当然,需要配合以下几个小技巧
否则只能起到事倍功半的效果
储存常量
做题的时候是不是经常忘记这个常量是多少,然后往前使劲翻页寻找它的大小或者百度搜索找到一堆不相干的东西?
想象中的百度百科
实际上的百度百科
更不用说一些难以言说的希腊字母了。没个好一点的输入法和标准一点的拼音你就连打都打不出来。
这时候我读书少没文化就体现出来了
因此,我们可以把常数都一次性储存在 MATLAB 的工作区中,需要的时候直接调用就可以了。
目前为止这学期有用过的几个常量
也可以直接写在脚本的最上方以防止被覆盖。
记录公式
也没啥技术含量,就是把要用的公示写在最上方并且注释掉,方便复制粘贴而已
写出长长一串
科学记数法的简便表示
之前我只会用 *10^n 来表示科学记数法,于是用 MATLAB 来解题的时候就显得很傻。
显得很傻
有时觉的还是像我平时在计算机上做的那样无脑加零比较方便,即使有时候双手双脚都不够数零的个数,检查也很麻烦。
不那么傻
直到后来,我终于学会了科学记数法:
显得很聪明
真的不要太方便啊!
int(fx,x1,x2)
这个函数是专门用来求积分的,它接受一个表达式 fx, 积分开始值 x1 与积分结束值 x2(当然有些时候会是无穷大 inf),输出的就是定积分的结果了,也可用于不定积分的求解。
例题
解
它只有一个注意事项项:
需要事先声明变量
可用于 potential (电势差)的计算,十分好用。
多重积分 (Iterated Integrals)
原理相同,只是连续使用多次 int 函数罢了
实例:
解:
syms x y z
mz = int(x^2+y^2,z,0,sqrt(9-y^2));
mzy = int(mz,y,3*x,3); %连用三次
mzyx = int(mzy,x,0,1); %每次迭代即可
disp(double(mzyx))
得:
>> H59E50
11.2000
MATH241
学期初, MATLAB 在数学课上的应用在矩阵领域:
zeros() , ones() , eyes()等
得到矩阵
A‘ , inv(A) , max()等
矩阵操作与
A(:,1)等
矩阵索引
之后会需要进行一些图像的打印,详见下文:
MATLAB | 三维绘图与等高线绘制
当然
这些都是没用的。
你以为老白的题目是靠 MATLAB 就能解决的吗?
别做梦了!
老老实实地去钻研课件吧
结
总而言之, MATLAB 并不只是一个绘图软件,也不仅仅是高级一点的计算器。对于将来的数据处理与仿真模拟来说,它更是不可或缺的。因此,多学一些操作手法与内置函数(包括一些外加的工具箱)还是十分有必要的。希望大家在即将到来的考试/Quiz中能够取得好看的成绩吧!
扫码关注我
盯住点赞与在看的手