本文最后更新于:2019年9月15日 晚上
概览 :本文是Matlab的简易学习笔记,为了全国大学生数学建模竞赛做一些准备。
参看视频:https://www.bilibili.com/video/av14503445?from=search&seid=10560014714789112428
运算符与规则
1 cos (((1 +2 +3 +4 )^3 /5 )^0.5 )
1 sin (pi ^0.5 ) + log (tan (1 ))
log函数
log 以10为底的函数:lg
log 以e为底的函数:ln
在matlab中以以e为底的对数以log函数表示,以10为底的对数用log10表示
embedding function 1 2 3 4 5 6 7 sin (cos (pi )) ||cos (pi )sin (ans )
变量 variable matlab中变量不需要指定类型
1 2 3 4 变量名 = 数值 a = 10 '=' 是assignment operator,是将10 指定给a这个变量
命令行输入 who 可以查看当前的变量有哪些
输入 whos 可以查看当前的变量大小、类型等详细信息
一般默认的类型是double,8字节
特殊变量和关键字
matlab 数据类型
matlab Calling Priority variable(高)
Built-in function
Subfunction
Private function(低)
当拿一个函数的名称作为变量名称时,会优先使用变量
在命令行输入 format long
类似的改变显示格式
命令行
分号 表示不会把计算结果显示出来
clc : 清除命令行
clear : 清除workspace的变量
who : 查看在workspace的变量
whos : 查看在workspace的变量信息
iskeyword : 打印关键字
format + 格式 : 改变显示格式
矩阵和向量 Array(Vector and Matrix) 行向量:
列向量
乘积
1 2 3 4 5 6 a * b = 30 b * a = 1 2 3 4 2 4 6 8 3 6 9 12 4 8 12 16
输入矩阵: 空格隔开列,分号分隔行
1 2 3 4 5 6 >> A = [1 21 6 ; 5 17 9 ; 31 2 7 ] A = 1 21 6 5 17 9 31 2 7
Array index 取出上述矩阵A的特定位置的元素
matlab下标从1开始
A(1,2) ——取出矩阵坐标为(1,2)位置的元素。第一行,第二列
A(4) ——从第一列数起对应的index值
A([1 3 5]) —— 取出第1、3、5个元素的值
A([1 3; 1 3]) ——取出第1、3个元素构成一个矩阵
A([1 3] , [1 3]) ——前面代表第1、3行,后面代表第1、3列,取出他们构成的交集,然后组成一个矩阵
矩阵值替换
Colon Operator 创建等差数列
1 2 3 4 5 6 7 8 9 10 11 12 A = [1 :100 ] A = [1 :2 :99 ] B = [1 :5 ; 2 :3 :15 ; -2 :0.5 :0 ] strs = 'a' :2 :'z'
当然,当Colon Operator前后都无参数时表示这个矩阵全部的值 。
删除行或者列 1 2 3 4 5 A(2 ,:) = [] A(:,2 ) = []
增广矩阵 1 2 3 4 5 6 7 8 9 10 11 12 13 a = [1 2 ;3 4 ]; b = [9 8 ;7 6 ]; c = [a b] c = 1 2 9 8 3 4 7 6 d = [a;b] d = 1 2 3 4 9 8 7 6
矩阵运算 1 2 + | - | * | / | ^ | . | ‘ | 加 |减 |乘 |除 |乘方 |每一项 |转置 |
1 2 3 4 5 6 7 8 9 10 11 12 a = [1 2 ;3 4 ]; b = [9 8 ;7 6 ]; a.*b = 9 16 21 24 a./b -- a做被除数 a.\b -- a做除数
矩阵与实数做运算 1 2 3 4 5 6 A A + a A / a 同理 A ./ a 与A / a 结果一样 A ^ a A .^ a
特殊的矩阵 1 2 3 4 5 6 7 8 9 10 11 eye (n) -- 创建n*n identity matrixzeros (n1,n2) -- 创建n1*n2的值全为0 的矩阵ones (n1,n2) -- 创建n1*n2的值全为1 的矩阵diag () -- 创建对角线矩阵diag ([2 3 4 ])ans = 2 0 0 0 3 0 0 0 4
矩阵的一些函数 1 2 3 4 5 6 7 8 9 10 11 12 13 14 A是一个矩阵max (A) -- 得到每一列最大的数max (max (A)) -- 得到这个矩阵最大的数min () --同理 sum(A) -- 得到每一列的和 sum(sum(A)) -- 得到矩阵所有数值的和mean (A) -- 得到整个列的平均值sort (A) -- 对矩阵的每一列按照从小到大进行排序sortrows (A) -- 对矩阵的行按照每行的第一个值从小到大进行排序size (A) -- 获取矩阵的行列数length (A) -- 指获取向量的长度find (A==5 ) -- 找到矩阵中值为5 的那个元素的index
程序 1 2 3 4 5 for i =1 :10 x=linspace (0 ,10 ,101 ); plot (x,sin (x+i )); print(gcf,'-deps' ,strcat('plot' ,num2str(i ),'.ps' ));end
当给一段程序的前面加上 %%
的符号的时候,就是把程序分成section
,可以单独执行。
scripts – 指令 程序内的后面加上分号;就不会把结果显示在命令行里。
1 2 3 4 5 6 7 8 9 10 if ,elseif ,else for switch ,case while break continuneend pausereturn
换行 如果一行内容过多可以使用三个点隔开,表示换行。
1 2 a = [1 2 3 4 5 ;... 6 7 8 9 10 ]
逻辑判别式 boolean: 1为true,0为false。
if…elseif…else 1 2 3 4 5 6 a = 3 ;if rem (a,2 ) == 0 disp ('a is even' )else disp ('a is odd' ) end
switch 1 2 3 4 5 6 7 8 9 10 11 input_num = 1 ;switch input_num case -1 disp ('negative 1' ); case 0 disp ('zero' ); case 1 disp ('positive 1' ); otherwise disp ('other value' );end
while 1 2 3 4 5 6 n = 1 ;while prod(1 :n) < 1e100 n = n + 1 ;end
for 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 for variable=start:increment:end commandsend for n=1 :10 a(n) = 2 ^n;end disp (a) tic A = zeros (2000 ,2000 );for ii = 1 :size (A,1 ) for jj = 1 :size (A,2 ) A(ii,jj) = ii+jj; end end toc
break 跳出循环
1 2 3 4 5 6 7 8 9 10 x = 2 ;k = 0 ;error = inf ; error_threshold = 1e-32 ;while error > error_threshold if k > 100 break end x = x - sin (x)/cos (x); error = abs (x - pi ); k = k+1 ;end
function – 函数
函数格式 1 2 function 输出结果 = 函数名(输入) 如果输出结果有多个值可以使用[a F]这种形式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 function x = freebody (x0,v0,t) x = x0 + v0.*t + 1 /2 *9.8 *t.*t; freebody(0 ,0 ,10 )ans = 490 freebody([0 ,1 ],[0 ,1 ],[10 ,20 ])ans = 490 1981
1 2 3 4 5 6 7 8 9 function y = F2C () while 1 TinF = input('pleasr input a temperature in F:' ); if isempty (TinF) break end y = 5 *(TinF-32 )/9 ; fprintf('==>Tem in C = %f\n' ,y);end
function handle 1 2 3 f = @(x) exp (-2 *x); x = 0 :0.1 :2 ;plot (x,f(x));
方程式求根 symbolic variable 创建symbolic variable的方式有两种:sym
或者syms
1 2 3 4 5 syms x x=sym('x' ) x+x+x = 3 *x
solve()函数求解 例:y = x * sin(x) - x = 0
1 2 syms x solve('x*sin(x) - x' ,x)
解多元方程 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 >> syms x y >> eq1 = x -2 *y -5 ; >> eq2 = x + y -6 ; >> A = solve(eq1,eq2,x,y) >> A = x: [1 x1 sym] y: [1 x1 sym] >> A.x ans = 17 /3 >> A.y ans = 1 /3
多个未知数 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 syms x a b solve('ax^2 - b' )ans = b^(1 /2 )/a^(1 /2 ) -b^(1 /2 )/a^(1 /2 ) solve('ax^2 - b' ,'b' ) ans = a*z^2
其他参考连接 matlab线性规划
matlab绘制曲线相交的交点
历年国赛