matlab入门篇,一些基础用法记一下~
M语言是解释型语言
who:查看当前变量
whoes:查看当前变量及其维数、所占字节数等。
clear: 清除所有变量
clear + 变量名: 清除该变量
save 把当前的变量数据保存到默认命名的mat文件中(.mat文件,一种数据文件)
**save[**文件名][变量名][变量名][-append][-ascii]
数据类型
数值型:双精度、单精度、整型
a =1; 默认建立double数据类型
b = uint8(a); b转换为uint8;
a = uint8(a); a转换为uint8.
字符串
字符串和字符都是使用单引号,获取ascii码值,使用double或者abs函数
如double('a');
ascii转化为字符输出
char函数:char(63);输出ascii码63代表的字符。
字符串去单引号
str2num 、num2str、eval('t=1'):将字符串当成语句执行
结构体
结构体.成员名 = 表达式 // 可以一直建立... 不需要声明
isstruct:是否是结构体。fieldnames、isfield函数、rmfield函数、getfield函数
单元
使用{}建立 : a = {1,'str',[11 12 13 14]};
多维矩阵
矩阵的建立:
直接输入:同行元素使用空格或者逗号隔开,不同行元素使用分号作为间隔
建立0、1矩阵:zeros(row,column);同理建立ones(row,column);
冒号表达式建立向量: e1:e2:e3 其中e1为初始值,e2为步长,e3为结束值
类似冒号表达式:linspace(sta,end,step_length);
矩阵的简单操作:
索引矩阵:A(i,j) == A(i*(m-1)+j);
int / pair<int,int>find(A == 2) : 在矩阵A中查找值为2的元素,返回序列号或者坐标,有多个答案时候返回多个。
ind2sub(size(A),ind); sub2ind(sizeof(A),x,y);
重排矩阵:res=reshape(A,9,1) <==> A(:);
矩阵的转置:A';
矩阵的拆分(索引矩阵的特例):M = A(1,:)<==>M=A(1,1:end)第一行所有列内容,又如M=A(1,1:3); 一行一至三列
删除矩阵元素:A(ind) = []; A(1,:) = [];
矩阵扩展(复制):M = repmat(A,2,1); (把A矩阵扩展成2行一列,其中把A整体看成一个元素)
矩阵压缩(去重):A = [1 2 3 4 4 ]; S = unique(A);
矩阵处理基础
特殊矩阵的建立
单位矩阵: I = eye(m,n); 一般(m == n)(方阵嘛(^_^));
随机矩阵:rand:产生0到1的随机均匀矩阵。randn:产生0到1之间的随机数,服从正态分布
e.g.: Sn = rand(1,10); Sn = randn(1,10);
Sn = a + (b - a) * rand(row,column); a~b的随机均匀矩阵
y = u + sqrt(s)*randn:产生均值为u,方差为s的正态分布的随机矩阵
mean函数可以获得序列的均值,std可以得到序列的方差
魔方矩阵:magic(5);
Hilbert: hilb(4) (format rat) 可以以有理数形式输出 (H(i,j) = (i+j-1)/(i+j))
Toeplitz: toeplitz(1:6);
矩阵和向量运算
matlab以矩阵为单位,可以直接实现矩阵的加法、数乘等运算以及矩阵的行列式、矩阵的秩、矩阵的逆以及转置等运算
det(A):矩阵A的行列式 ,如果行列式不为0,则可逆。
inv(A):矩阵的逆
复数向量 : a = [1 + 5i, 2,3+6i];
向量内积:s = a*b‘.(a、b均为行向量)
线性方程组求解
A = [1,2,3;1,4,8;1,8,27];
b = [5,-2,6]’;
x = inv(A)*b; OR x = A/ b;
矩阵的相似化简和分解
Jordan标准型:jordan(A); [v J] = jordan(A);其中V是相似变换矩阵,J是约当标准型
矩阵特征值:eig(A); [V J] = eig(A)
矩阵和向量的范数
范数:norm(A,1):1范数,norm(A,2):2范数,norm(A,inf):无穷范数,norm(A,'fro'):f范数
矩阵分析
计算函数矩阵导数(计算函数矩阵中的每一个元素导数):diff(A):求一阶导数。diff(A,2)求二阶导数。
矩阵函数:funm(A,@exp // @sin //@ cos);
Matlab程序控制结构
M文件:Script File、Function File.
数据输入:input函数。数据显示:disp函数。程序暂停:pause函数(以秒为单位)。
分支 与循环 help for 、help switch 、help while 、help if
Matlab二维高层绘图操作
%%二维高层绘图
%基本绘图
x = 0:0.1:2*pi;
y = sin(x);
plot(x,y);
%第二个参数为矩阵
y1 = sin(x);
y2 = cos(x);
y3 = 0.002*exp(x);
y4 = x;
y5 = 0.002*tan(x);
z = [y1;y2;y3;y4;y5];
% plot(x,z);
%两个参数都是矩阵
x1 = 0:0.01:2*pi;
x2 = -pi:0.01:pi;
x = [x1;x2];
```
y1 = cos(x1);
y2 = sin(x2);
y = [y1;y2];
plot(x,y); % 按列绘图
plot(x',y');
% plot只有一个参数
x = linspace(0,2*pi,200);
y = sin(x);
plot(y)
y2 = cos(x);
y3 = y + i*y2;
plot(y3)
% plot有多个参数
x1 = linspace(0,2*pi,200);
x2 = linspace(0,2*pi,100);
y1 = cos(x1);
y2 = sin(x2);
plot(x1,y1,x2,y2)
% plot含有的曲线选项
x = linspace(0,2*pi,100);
y = sin(x);
plot(x,y,'r') %r g y m k b
plot(x,y,'*') % * . p < >
plot(x,y,':') %'--' '-' '-.' ':'
plot(x,y,'r*:')
```
%% 图形标注
x = linspace(0,2*pi,100);
y = sin(x);
plot(x,y);
xlabel('x');
ylabel('y');
title('正弦');
text(2,0.3,'y=sin(x)')
```
x1 = linspace(0,2*pi,200);
x2 = linspace(0,2*pi,100);
y1 = cos(x1);
y2 = sin(x2);
plot(x1,y1,x2,y2)
xlabel('x');
ylabel('y');
title('正弦');
text(2,0.3,'y=sin(x)^2');
text(0.5,0.2,'y=cos(x)_2');
legend('cos','sin');
%坐标轴控制
xlim([0 10])
% axis equal
```
%% 图像保持
x =0:0.1:2*pi;
y1 = sin(x);
y2 = cos(x);
hold on % 图形保持
plot(x,y1,'r');
plot(x,y2,'g');
hold off % 图形保持取消
%% 窗口分割
x = 0:0.1:2*pi;
y1 = sin(x);
y2 = cos(x);
y3 = tan(x);
y4 = exp(x);
subplot(221); % 将窗口分成2*2的小格,然后绘制第一个
plot(x,y1);
subplot(222);
plot(x,y2);
subplot(223);
plot(x,y3);
subplot(224);
plot(x,y4);
Matlab符号运算
%符号变量
a = sym('a')
syms b;
b
%符号常量
c = sym('3');
%符号表达式
syms x
f1 = 3*x+6
f2 = 3*x+6
%符号四则运算
fadd1 = f1 + f2
fsub1 = f1 - f2
fmu1 = f1*f2
fdiv = f1 / f2
%符号表达式化简
syms x y
s = (x^2+y^2)^2+(x^2-y^2)^2;
spy = simplify(s);
%符号表达式和数值的转换
eval(c)
%因式分解,展开和合并同类项
syms a b x y
f1 = a^3 - b^3;
factor(f1) %因式分解
f2=(3*x^2+8*y^2)*(-x^2+3*y);
expand(f2) % 展开
f3=3*x^2+4*x^2+5*x^2*y;
collect(f3) % 合并同类型
%符号矩阵
a1 = [x x+y;y y^2]
transpose(a1) % 普通转置
a1' % 共轭转置
%符号函数值的求解
syms x
f1 = x^3-9;
subs(f1,3)
% 符号极限,符号微分,符号积分
syms x a
y =sin(x+a);
limit(y,0)
y2 = sqrt(1+exp(x));
diff(y2) % 数值中是求差分,符号计算是求解导数
diff(y2,2) % 求二重导数
diff(y2,3)
y3 = (3-x^2)^3; % 不定积分
int(y3)
% 求定积分
y4 = abs(1-x);
int(y4,1,2)
% 符号级数求和、泰勒级数
syms n
f = 1/ n^2;
s1 = symsum(f,n,1,inf) % 无穷级数
%泰勒展开
syms x
y = (1 + x + x^2) / (1 - x + x^2);
taylor(y,x,1,'Order',3) % 在x=1处进行taylor展开并且 得到第三项的值
%符号代数方程
clear
syms x
eval(solve(x+x*exp(x)-10))
% 方程组
clear
syms x y
[x y] = solve('x+y-98','x^(1/3)+y^(1/3)-2','x,y')
[x y] = solve('1/x^3+1/y^3-28','1/x+1/y-4','x,y')
%符号微分方程
dsolve('Dy-(x^2+y^2)/x^2/2','y(1)=2','x')
来源:oschina
链接:https://my.oschina.net/u/4270011/blog/3402570