本文为学习Mooc 课程“科学计算与Matlab语言”专题一的笔记。
#留作自己复习用,也方便其他同学查找相关的内容。
#另外,想学习的同学可以免费报名参加Mooc官网所提供的相关课程。
一、基础知识:
求解 x²-3x+1=0 的根;
采用roots 求根;
新生注意,“;”表示暂时不输出结果;
>> p=[1-31];
>> x=roots(p)
x =
2.6180
0.3820
采用定义符号求解(1)中的例题:
利用sysm来定义变量x,利用solve 来求解解析表达,利用eval 来得到小数的值;
>> syms x;
x = solve(x^2 - 3*x + 1)
x =
3/2 - 5^(1/2)/2
5^(1/2)/2 + 3/2
>> x=eval(x)
x =
0.3820
2.6180
函数绘图,采用(1)中的函数进行绘制:
size表示输出矩阵的行与列;
zeros(size(x))表示生成一个同行列的零矩阵;
“.*”表示矩阵的对应元素相乘,要求两个矩阵必须是同行列的;
“*”则对应的是矩阵乘法,矩阵AB的乘法要求A的列数等于B的行数;
plot函数进行绘制,必须一个x对应一个y,两条曲线则要输入plot(x,y1,x,y2);
>> x=[-5:0.1:5];
>> y1=x.*x-3*x+1;
>> y2=zeros(size(x));
>> plot(x,y1,x,y2);
以上命令所绘制的函数曲线
利用fzero 函数来求解函数零点:
这里要注意的是,必须有@(x)这个函数句柄,其作用在于定义变量x;
>> f=@(x)x^2-3*x+1;
>> x=fzero(f,0.5)
x =
0.3820
>> y=fzero(f,2.5)
y =
2.6180
另外的一些基础知识:
matlab函数的自变量往往是矩阵,而因变量也为对应的矩阵,例如:
>> A = [0.5*pi,pi;1.5*pi,2*pi];
>> B=sin(A)
B =
1.0000 0.0000
-1.0000 -0.0000
对于三角函数而言,sin表示弧度制,而sind表示角度制:
>> sin(0.5*pi)
ans =
1
>> sind(90)
ans =
1
abs函数用于取复数的模或者实数的绝对值:
>> a=3+4i;
>> abs(a)
ans =
5
四种取整函数:
>> a=5.5;
>> floor(a)
ans =
5
>> ceil(a)
ans =
6
>> round(a)
ans =
6
>> fix(a)
ans =
5
先说floor和ceil,这两个相当于 [X] 与 [X]+1 ,即向下取整与向上取整。
而round函数更简单,直接四舍五入。
fix函数是取和原点近的整数,因此可以理解为直接消去小数,例如:
>> a=[3.6,-3.6];
>> fix(a)
ans =
3 -3
找到345的个位,十位,百位(rem为取余数):
>> m=345;
m1=rem(m,10)
m2=rem(fix(m/10),10)
m3=fix(m/100)
m1 =
5
m2 =
4
m3 =
3
找到100以内的素数:
>> x=1:100;
k=isprime(x);
k1=find(k);
p=x(k1)
p =
1 至 23 列
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83
24 至 25 列
89 97
isprime函数是可以判断一个数是否为素数的函数,是素数输出1,否则输出0。
x为一个100维的向量,k对应的也为一个100维的向量。
find函数可以用来查看非零元素的序号。
其实这个问题输出k1和输出p的结果是完全相同的,因为非零元素的序号就是元素本身。
最后一行指的是在x中提取,提取k1对应位置的元素。
二、关于矩阵的基本知识:
1.关于建立矩阵:
(1)直接输入,用两端中括号括起来,逗号分隔每一行的元素,分号表示换行;
>> a=[1,2,3;4,5,6]
a =
1 2 3
4 5 6
(2)利用分块矩阵:
>> a=[1,2,3;4,5,6]
a =
1 2 3
4 5 6
>> b=[7,8,9]
b =
7 8 9
>> c=[a;b]
c =
1 2 3
4 5 6
7 8 9
(3)利用矩阵运算:
>> a=[1,1,1];
>> b=[1,3,5];
>> c=a+i*b
c =
1.0000 + 1.0000i 1.0000 + 3.0000i 1.0000 + 5.0000i
>> d=a+b*i
d =
1.0000 + 1.0000i 1.0000 + 3.0000i 1.0000 + 5.0000i
2.关于建立行向量:
(1)利用初始值,步长与最终值(省略步长默认为1):
note:用冒号进行连接,进行向量的创建
>> t=1:3:10
t =
1 4 7 10
>> u=1:11
u =
1 2 3 4 5 6 7 8 9 10 11
(2)利用linspace 函数进行创建,输入初始值,最终值,元素总数:
note:用冒号创建是根据步长的,用linspace是根据向量size的;
另外,如果不输入总个数,Matlab默认共100个值。
>> k=linspace(0,100,3)
k =
0 50 100
>> v=linspace(1,100)
v =
1 至 23 列
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
24 至 46 列
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
47 至 69 列
47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
70 至 92 列
70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
93 至 100 列
93 94 95 96 97 98 99 100
3.引用矩阵的元素:
(1)通过位置进行引用,A(i,j)表示调用这个位置的元素,利用等号可以给元素进行修改或者添加,添加的意思是指,如果矩阵是2×2的,在提取元素i或j的过程中存在超过2×2的范围,依然可以赋值,这个时候默认空缺元素为零,如下:
>> a=[1,2,3;4,5,6];
>> a(1,2)=1
a =
1 1 3
4 5 6
>> a(3,5)=1
a =
1 1 3 0 0
4 5 6 0 0
0 0 0 0 1
(2)通过序号进行引用:
note:序号是从左向右,每一列从左到右排列的,例如:
>> a=[1,4,7;2,5,8;3,6,9];
a(8)
ans =
8
(3)sub2ind (S,I,J)函数,I为行下表,J为列下表,S为矩阵的尺寸size,表示提取一个位置处元素的序号:
>> size(a)
ans =
3 3
>> sub2ind(size(a),[1,1],[1,2])
ans =
1 4
其实这里和a矩阵是什么元素是无关的,这知识一个位置与序号的转换,当然,位置的行标和列标不光可以是向量,还可以是矩阵:
>> sub2ind(size(a),[1,2,3;1,2,3],[1,1,1;2,2,2])
ans =
1 2 3
4 5 6
得到的结果是一至六,它的位置恰好是按照从左向右每一列从上到下选取的,更要说明的是,I与J可以是同型矩阵。
(4)ind2sub 就是sub2ind的逆过程,从序号得到行列指标,如图:
>> [i,j]=ind2sub(size(a),[1,2,3,4,5,6,7,8,9])
i =
1 2 3 1 2 3 1 2 3
j =
1 1 1 2 2 2 3 3 3
(5)引用子矩阵:
A(i,j)表示引用一个元素;
A(i:i+m,j:j+n)表示引用一个子矩阵;
note:如果这里的i与i+m之间为i:k:i+m则k表示步长;
如果在行或者列处直接用“:”代替,表示全部引用;
>> a
a =
1 2 3 4 5 6 7 8
9 10 11 12 13 14 15 16
1 2 3 4 5 6 7 8
9 10 11 12 13 14 15 16
1 2 3 4 5 6 7 8
9 10 11 12 13 14 15 16
>> a(1:2:5,:)
ans =
1 2 3 4 5 6 7 8
1 2 3 4 5 6 7 8
1 2 3 4 5 6 7 8
当然,完全可以引用特定行,用两个向量分别表示行和列即可:
>> a([1,3,5],[1,2,3])
ans =
1 2 3
1 2 3
1 2 3
end可以表示最后一行:
>> a(end,:)
ans =
9 10 11 12 13 14 15 16
>> a(:,end)
ans =
8
16
8
16
8
16
>> a(3:end,:)
ans =
1 2 3 4 5 6 7 8
9 10 11 12 13 14 15 16
1 2 3 4 5 6 7 8
9 10 11 12 13 14 15 16
(6)删除矩阵中的元素:
空矩阵可以表示删除,形如[ ]。
>> a(:,[1,2])=[]
a =
3 4 5 6 7 8
11 12 13 14 15 16
3 4 5 6 7 8
11 12 13 14 15 16
3 4 5 6 7 8
11 12 13 14 15 16
(7)利用reshape重铸矩阵的结构,但是元素顺序不变:
>> c=[1,2,3,4]
c =
1 2 3 4
>> d=reshape(c,2,2)
d =
1 3
2 4
另外的一个表达c(:)表示把他按照顺序排成一个列向量。
三、Matlab的基本运算:
1.算数运算:
(1)加“+”,减“-”,乘“*”,右除“/”,左除“\”,乘方“^”。
note:Matlab运算是基于矩阵意义的。
重点说一下“/”与“\”的含义:
A/B=A*inv(B),即B右除A等于B乘A矩阵的逆矩阵;
A\B=inv(A)*B,即A左除B等于A的逆矩阵乘B矩阵;
(2)“.”运算:
点运算要求两个矩阵必须同型,然后对应元素做相应运算。
"./";".\";".*"都同理。
>> x=[0.1:0.3:1];
>> y=sin(x).*cos(x)
y =
0.0993 0.3587 0.4927 0.4546
2.关系运算:
(1)两个标量的比较,是直接比较大小的,成立时结果取1,否则为0;
判断等于的时候的方式是输入“==”,而不是“=”。
>> x=1
x =
1
>> x>2
ans =
0
>> x==1
ans =
1
(2)同型矩阵之间逐个元素进行比较;标量与矩阵比较等价于标量与矩阵的每一个元素进行比较,如下:
>> a=[1,1,1;1,1,1;1,1,1];
>> b=[2,2,2;2,2,2;2,2,2];
>> a>b
ans =
0 0 0
0 0 0
0 0 0
>> a<3
ans =
1 1 1
1 1 1
1 1 1
武汉格发信息技术有限公司,格发许可优化管理系统可以帮你评估贵公司软件许可的真实需求,再低成本合规性管理软件许可,帮助贵司提高软件投资回报率,为软件采购、使用提供科学决策依据。支持的软件有: CAD,CAE,PDM,PLM,Catia,Ugnx, AutoCAD, Pro/E, Solidworks ,Hyperworks, Protel,CAXA,OpenWorks LandMark,MATLAB,Enovia,Winchill,TeamCenter,MathCAD,Ansys, Abaqus,ls-dyna, Fluent, MSC,Bentley,License,UG,ug,catia,Dassault Systèmes,AutoDesk,Altair,autocad,PTC,SolidWorks,Ansys,Siemens PLM Software,Paradigm,Mathworks,Borland,AVEVA,ESRI,hP,Solibri,Progman,Leica,Cadence,IBM,SIMULIA,Citrix,Sybase,Schlumberger,MSC Products...