title: Matlab Learning Record
date: 2020-05-23 20:11:26
author: liudongdong1
img: https://gitee.com/github-25970295/blogImage/raw/master/img/voice-recognition-speech-detect-deep-260nw-694633963.webp
reprintPolicy: cc_by
cover: false
categories: 语言框架
tags:java
MATLAB是一种语法简单用途普遍的编程语言,既能够用于编写脚本,函数,也能够用于面向对象的程序开发或开发GUI界面。MATLAB被普遍应用于数值计算,图像处理,机器学习等领域。python
- 高效的数值计算及符号计算功能,能使用户从繁杂的数学运算分析中解脱出来;
- 广阔的线性代数,统计,傅立叶分析,筛选,优化,数值积分,解常微分方程的数学函数库。
- 具备完备的图形处理功能,实现计算结果和编程的可视化;
- 友好的用户界面及接近数学表达式的天然化语言,使学者易于学习和掌握;
- 功能丰富的应用工具箱(如信号处理工具箱、通讯工具箱等) ,为用户提供了大量方便实用的处理工具。
- MATLAB的编程接口给开发工具,提升代码质量和可维护性和性能的最大化。
- 它提供了基于MATLAB算法集成了C,Java,NET和Microsoft Excel等与外部应用程序和语言功能。
MATLAB在变量声明是不须要指出变量的类型
。git
clear; %清空内存 clc; %清空命令行 r1=1; %为一个变量赋值 z1=1+sqrt(3)*i; %赋值一个复数 sqrt()开方运算 z_real=real(z1); %复数的实部 z_img=imag(z1); %复数的虚部 z_abs=abs(z1); %复数的模 z_ang=angle(z1); %复数的幅角 z2=z1^2; %平方运算
MATLAB的数组索引从1开始,这点须要牢记
。github
arr1=rand(1,5); %arr1=[0.1418,0.4217,0.9157,0.7922,0.9594] arr2=zeros(1,5); %arr2=[0,0,0,0,0] arr3=ones(1,5); %arr3=[1,1,1,1,1] arr4=linspace(1,2,5); %arr4=[1,1.25,1.5,1.75,2] arr4=linspace(2,2,5); %arr4=[2,2,2,2,2] mat1=rand(3,3); %随机生成3*3矩阵 mat2=[1,2,3;4,5,6;7,8,9];
获取
一维数组的长度用length函数
;获取多维函数的维数大小用size
;web
n = ndims(A) # 获取数组维度 numberOfElements = length(array) #即一维数组的长度或者多维数组中最大的维数行数或列数中的较大值 [m,n] = size(X) #得到矩阵的各个维数的大小 a=[1,2,3,4,5] #用逗号或空格间隔 a=[1 2 3 4 5] x=初始值 :[步长]:终值 x=linspace(初始值 ,终值,个数n) x=logspace(初始值 ,终值,个数n)#生成[10初值,10终值]之间等分的n个数 若是步长省略,默认步长为50 M = max(A) C = max(A,B) for i=1:1:r plot([time(w(i,1)),timev2(w(i,2))],[phaseznormal(w(i,1)),phasev2(w(i,2))],'--','Color',[0.5 0.5 0.5], 'LineWidth',0.5); hold on end
MATLAB经常使用的分支语句有__if-else__和__switch-case__算法
limit = 0.75; A = rand(10,1) if any(A > limit) disp('There is at least one value above the limit.') else disp('All values are below the limit.') end
MATLAB经常使用的循环有__while__循环和__for__循环编程
for v = 1.0:-0.2:0.0 disp(v) end for v = [1 5 8 17] disp(v) end
这里分别使用函数
和函数句柄
的方法来生成__Fibonacci__数列。数组
须要注意函数名和文件名要保持一致
,如下先使用函数
的方式:框架
function y = fibonacci (x) if x == 1 || x==2 y = 1; return % return能够不写 else y = fibonacci(x-1) + fibonacci(x-2); return end
如下是使用函数句柄
的方式:dom
fibo=@(n) (((1+sqrt(5))/2)^n-((1-sqrt(5))/2)^n)/sqrt(5); fn=zeros(1,100); for i=1:1:100 fn(i)=fibo(i); end
使用dx=0.000001为步长的向前差分求sin(x)的导数
:
figure ('name','diff demo1'); x=linspace(0,10,100); y=sin(x); dx=0.000001;dydx=[]; for i=1:100 dydx(i)=(sin(x(i)+dx)-y(i))/dx; end plot(x,y,'r',x,dydx,'b'); legend('sin(x)','cos(x)'); title('diff demo'); xlabel('x');ylabel('y')
使用MATLAB的差分工具diff
计算导数
h = 0.001; % step size X = -pi:h:pi; % domain f = sin(X); % range Y = diff(f)/h; % first derivative Z = diff(Y)/h; % second derivative plot(X(:,1:length(Y)),Y,'r',X,f,'b', X(:,1:length(Z)),Z,'k')
使用矩形法计算\(\int_0^1x^2dx\):
n=100000;a=0;b=1; %取步长为100000 x=a:1/n:b; dx=(b-a)/n;x=x+dx/2; s=x.^2; %采样 int=dx*sum(s);
调用MATLAB中的quad
函数使用__Simpson__法计算数值积分
:
func=@(x)x.^2; int=quad(func,0,1)
使用__Euler__法计算常微分方程(偏差较大,不推荐):
取时间步长为h,则
function matlab_demo func=@(x,y)x.^2+y.^2+3*x-2*y [x,y]=euler(func,[0,1],1,0.01) plot(x,y) return function [x,y]=euler(fun,xspan,y0,h) x=xspan(1):h:xspan(2) y(1)=y0; for n=1:length(x)-1 y(n+1)=y(n)+h*feval(fun,x(n),y(n)) end return
使用45阶__Runge-Kutta__算法ode45
计算常微分方程组:
function ode_demo y0=[1,1]; tspan=0:0.01:5; option = odeset('AbsTol',1e-4); [t,x]=ode45(@dfunc,tspan,y0,option); figure('name','ode45 demo'); plot(t,x(:,1),'r',t,x(:,2),'b'); return function dx=dfunc(t,x) dx=zeros(2,1); dx(1)=2*x(1)-3*x(2); % x(1)=x dx(2)=x(1)+2*x(2); % x(2)=y return
使用pdepe
进行微分方程(组)的求解,须要先将微分方程(组),以及边界和初值条件化为以下形式:
举一个例子:
求解过程以下:
function pde_demo x=0:0.05:1; t=0:0.05:1; m=0; sol=pdepe(m,@pdefun,@pdeic,@pdebc,x,t); figure('name','pde demo'); surf(x,t,sol(:,:,1)); title('pde demo'); xlabel('x');ylabel('t');zlabel('u'); return function [c,f,s]=pdefun(x,t,u,du) %方程描述函数 c=1; f=1*du; s=-1*u; return function [pa,qa,pb,qb]=pdebc(xa,ua,xb,ub,t) %边界描述函数 pa=ua-1; qa=0; pb=ub; qb=0; return function u0=pdeic(x) %初值描述函数 u0=(x-1)^2; return
#经过python 文件进行存储为txt格式,而后经过matlab代码直接读取 np.savetxt("xy1.txt", yvals,fmt='%d',delimiter=',')
clear ;close all; clc data=load('./kinect/314637_Guesture_segment.txt') x_dtw=data(:,1) y_dtw=data(:,2) z_dtw=data(:,3) time=data(:,4) %转置操做 data=data.’ phase=4*pi*(x_dtw.^2+y_dtw.^2+z_dtw.^2)/0.33 phaseznormal=zscore(phase) save kinect.txt -ascii phaseznormal
Ctrl+r
:选中要注释的多行文本,而后按Ctrl+r
就能够实现多行注释。
Ctrl+t
:选中已经注释了的多行文本,而后按Ctrl+t
就能够取消多行注释。