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:

  • Matlab

MATLAB是一种语法简单用途广泛的编程语言,既可以用于编写脚本,函数,也可以用于面向对象的程序开发或开发GUI界面。MATLAB被广泛应用于数值计算,图像处理,机器学习等领域。

  1. 高效的数值计算及符号计算功能,能使用户从繁杂的数学运算分析中解脱出来;
  2. 广阔的线性代数,统计,傅立叶分析,筛选,优化,数值积分,解常微分方程的数学函数库。
  3. 具有完备的图形处理功能,实现计算结果和编程的可视化;
  4. 友好的用户界面及接近数学表达式的自然化语言,使学者易于学习和掌握;
  5. 功能丰富的应用工具箱(如信号处理工具箱、通信工具箱等) ,为用户提供了大量方便实用的处理工具。
  6. MATLAB的编程接口给开发工具,提高代码质量和可维护性和性能的最大化。
  7. 它提供了基于MATLAB算法集成了CJava,NET和Microsoft Excel等与外部应用程序和语言功能。

1. 变量与矩阵

MATLAB变量声明是不需要指出变量的类型

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开始,这点需要牢记

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;

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

2. 分支与循环

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

3. 函数及函数句柄

这里分别使用函数函数句柄的方法来生成__Fibonacci__数列。

需要注意函数名和文件名要保持一致,以下先使用函数的方式:

function y = fibonacci (x)
if x == 1 || x==2
y = 1;
return % return可以不写
else
y = fibonacci(x-1) + fibonacci(x-2);
return
end

以下是使用函数句柄的方式:

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

4. 数值微积分

使用dx=0.000001为步长的向前差分求sin(x)的导数

\[f^,(x)=\frac{f(x+dx)-f(x)}{dx}
\]
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\):

\[\int_a^bf(x)dx=\frac{b-a}{n}\sum_{i=1}^nf(x_i)
\]
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)

5. 常微分方程(组)的数值解

使用__Euler__法计算常微分方程(误差较大,不推荐):

\[\frac{dy}{dx}=x^2+y^2+3x-2y
\]
\[y|_{x=0}=1
\]

取时间步长为h,则

\[y(x_{n+1})=y(x_n)+f(y(x_n),x_n)*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计算常微分方程组:

\[\frac{dx}{dt}=2x-3y
\]
\[\frac{dy}{dt}=x+2y
\]
\[x|_{t=0}=1
\]
\[y|_{t=0}=1
\]
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

6. 偏微分方程(组)的数值解

使用pdepe进行微分方程(组)的求解,需要先将微分方程(组),以及边界和初值条件化为如下形式:

\[c(x,t,\frac{\partial{u}}{\partial{x}})\frac{\partial{u}}{\partial{t}}=x^{-m}\frac{\partial}{\partial{t}}[x^mf(x,t,u,\frac{\partial{u}}{\partial{x}})]+s(x,t,u,\frac{\partial{u}}{\partial{x}})
\]
\[p(x,t,u)+q(x,t,u)*f(x,t,u,\frac{\partial{u}}{\partial{x}})=0
\]
\[u(x,t_0)=u_0
\]

举一个例子:

\[\frac{\partial{u}}{\partial{t}}=\frac{\partial^2{u}}{\partial{x^2}}-u
\]
\[u|_{x=0}=1
\]
\[u|_{x=1}=0
\]
\[u|_{t=0}=(x-1)^2
\]

求解过程如下:

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

7. 文件读取

#通过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

8. 快捷键

4.1. 注释

Ctrl+r:选中要注释的多行文本,然后按Ctrl+r就可以实现多行注释。

Ctrl+t:选中已经注释了的多行文本,然后按Ctrl+t就可以取消多行注释。

Resource

【编程语言】Matlab 学习记录的更多相关文章

  1. Matlab学习记录(函数)

    Matlab中的内建函数 Matlab自定义函数 用function构造函数 用inline构造函数 用syms构造符号函数 多项式相关函数 polyvalx convx 向量和矩阵运算函数 向量运算 ...

  2. matlab学习记录

    1.在命令框输入preferences,可以调整字体大小 2.产生正太分布函数 参考:https://blog.csdn.net/s334wuchunfangi/article/details/816 ...

  3. Matlab 进阶学习记录

    最近在看 Faster RCNN的Matlab code,发现很多matlab技巧,在此记录: 1. conf_proposal  =  proposal_config('image_means', ...

  4. Python学习记录day6

    title: Python学习记录day6 tags: python author: Chinge Yang date: 2016-12-03 --- Python学习记录day6 @(学习)[pyt ...

  5. Python学习记录day5

    title: Python学习记录day5 tags: python author: Chinge Yang date: 2016-11-26 --- 1.多层装饰器 多层装饰器的原理是,装饰器装饰函 ...

  6. Matlab安装记录 - LED Control Activex控件安装

    Matlab安装记录-LED Control Activex控件安装 2013-12-01  22:06:36 最近在研究Matlab GUI技术,准备用于制作上位机程序:在Matlab GUI的技术 ...

  7. Thrift学习记录

    Thrift学习记录 Thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发.它结合了功能强大的软件堆栈和代码生成引擎,以构建在C++,Java,Python,PHP,Ruby,Erlang, ...

  8. Python全栈工程师系列学习之学习记录

    @ 目录 前言 Day 01 一.python的历史和种类 二.安装python解释器以及配置环境变量 三.变量.常量和注释 Day 02 Day 03 Day 04 Day 05 Day 06 一. ...

  9. git原理学习记录:从基本指令到背后原理,实现一个简单的git

    一开始我还担心 git 的原理会不会很难懂,但在阅读了官方文档后我发现其实并不难懂,似乎可以动手实现一个简单的 git,于是就有了下面这篇学习记录. 本文的叙述思路参照了官方文档Book的原理介绍部分 ...

随机推荐

  1. Lua控制语句

    目录 1. 控制结构 if-else 单个 if 分支 型 两个分支: if-else 型 多个分支: if-elseif-else型 2. while 型控制结构 3. repeat控制结构 4. ...

  2. Python - 字符串常用函数详解

    str.index(sub, start=None, end=None) 作用:查看sub是否在字符串中,在的话返回索引,且只返回第一次匹配到的索引:若找不到则报错:可以指定统计的范围,[start, ...

  3. 入门Kubernetes-Service

    一.前言 前一篇文章通过 Deployment 实现了Pod中服务实现滚动更新/回滚等操作:在真实应用场景中,需要将一组Pod提供给外部访问.而且Pod生命周期是短暂的,在 Pod 的生命周期过程中, ...

  4. 何为“Secure Contexts”安全内容? 终于说明白了!

    ​​​何为"Secure Contexts"安全内容? 终于说明白了! 看图说话 [途径1]:地址栏输入: edge://flags/ 按需设置选项后,重启浏览器即可. Allow ...

  5. 做词云时报错cannot import name ‘WordCloud‘ from partially initialized module ‘wordcloud‘的解决办法

    问题: 在做词云时,运行时出现该问题,wordcloud安装成功,但运行出错,错误提示是:cannot import name 'WordCloud' from partially initializ ...

  6. Python+Requests+异步线程池爬取视频到本地

    1.本次项目为获取梨视频中的视频,再使用异步线程池下载视频到本地 2.获取视频时,其地址中的Url是会动态变化,不播放时src值为图片的地址,播放时src值为mp4格式 3.查看视频链接是否存在aja ...

  7. 小猿圈-IT自学人的小圈子 【强力推荐学习】

    笔记链接 https://book.apeland.cn/details/322/ 学习视频 https://www.apeland.cn/python

  8. JavaScript学习之路(个人理解&经验):构造函数、类、实例

    构造函数: 声明:"构造函数"是一类函数的 "名字" 正确的读法是"构造函数"而不是"构造 / 函数" 构造函数形如普通 ...

  9. 【Mysql】InnoDB 中的 B+ 树索引

    接上一篇内容,InnoDB 的作者想到一种更灵活的方式来管理所有目录项,是什么? 一.目录项记录页 其实这些用户目录项与用户记录很像,只是目录项中的两个列记录的是主键和页号而已,那么就可以复用之前存储 ...

  10. 04 AOF日志:宕机了,Redis如何避免数据丢失

    接下来两篇将记录Redis持久化存储两大技术:AOF日志.RDB快照 本篇重点 "AOF日志实现""AOF日志三种写回策略""AOF重写--避免日志过 ...