文档章节

matlab常用函数及功能

j
 jwdiange
发布于 2017/02/17 11:28
字数 2625
阅读 38
收藏 0

matlab 程序变成可执行行exe程序

电脑安装MATLAB,MATLAB compiler 以及一个MATLAB compiler 支持的第三方C/C++编译器(比如VS)。

  1. 配置编译器 mbuild -setup
  2. 安装MCR D:\Program Files\MATLAB\R2014a\toolbox\compiler\deploy\win64 双击 MCRInstaller.exe 安装。
  3. 新建test.m 文件 在命令行输入 mcc -m test.m = = = = = =安装VS的过程中出现了: VS2010不能正确加载 'VSTS for Database Professionals Sql Server Data-tier Application'包, == = == = = = = = 这是由于 以前安装过VS,后来卸载了,但是没有完全卸载。所以两者冲突。Start->Microsoft Visual Studio 2010->Visual Studio Tools-->Visual studio Command Prompt (2010)输入:devenv /resetskippkgs回车 亲试已经解决问题!

MATLAB 编辑器 文本内加横线,让程序更加可视化。

%%注释即可加横线,代码分块。直至遇到下一个 %% e.g.:

%% 设定时间
Ntc  = 100;                      % 每个光周其100个点,对应dt=1.0857
dt = T0/(Ntc-1);
%% 基本参数
c=3e8;
lamda=800e-9;                   % wavelenth (m)
I=1.8e14; 

%%生成随机数 
randint(m,n,[x,y]) %在[x,y]之间产生m行n列随机整数。
rand(m,n)%产生m行n列在0~1之间的随机数。

%% pcolor 演示,pcolor(X,Y,Z),X是二维矩阵,Y也是二维矩阵,Z为二维矩阵
x=-10:10;
y=-10:10;
[X,Y]=meshgrid(x,y);%产生对应的格点。X对应于Z的列,X(1,:)与X(2,:)相同;Y对应于Z的行,X(:,1)与X(:,2)相同
Z=X.^2+Y.^2;
pcolor(X,Y,Z) 
%%暂停n秒
pause(n)
%%将数字转化为字符并进行格式控制
n=10;
str=num2str(n,'%7.7d')       %将n转化为字符,并以七位数字符输出,不够前面补零。
%控制坐标轴标签的字体,颜色,
figure
plot((1:10).^2)
xlabel('str','FontSize',16,)
%控制输入输出
disp(['原子单位制下时间为:']);
a=input('inptu two number:');%a可以为矩阵。比如:输入矩阵时:[1,2,3],或者[1 2 3]

continue与break continue 跳出本此循环,执行下次循环, break 跳出距离break最近的循环,不在执行循环

 for i=1:4
     if i==3
         continue;
     end
     i
 end

输出结果为: i = 1 i =

 2

i = 4

 for i=1:4
     if i==3
         break;
     end
     i
 end

i = 1

i = 2

ezplot 画隐函数,从变量中画。

the_C5=3;
ezplot(['(x-0)^2+(y-0)^2=' num2str(th_C5^2)]);%C2
text(0,0,'C2')

控制图片大小,图片更好看

t = 0:0.01:2;
x = sin(2*pi*t);
figure
subplot(2,1,1)
plot(t,x,'k','linewidth',2)   
h1=gca;
subplot(2,1,2)
plot(t,-x,'b','linewidth',2)   
h2=gca;
set(gcf,'unit','centimeters','position',[3 5 7 5])
% 3和5指定figure在屏幕上的位置,据左边屏幕3cm,据下面屏幕边5cm。7和5指定figure大小。7cm×5cm
set(h1,'Position',[0 0  .5 .4]); 
set(h2,'Position',[.6 .6 .3 .3]);
% set(h,'Position',[x1 y1 x2 y2]),x1和y1:h1对应的图的起点在整个图中x轴(y轴)方向的位置,用比例表示。x2,y2,表示h1对应的图片在这个figure中的比例。
%set(h2,'Position',[.3 .3 .5 .5])
xlabel('\fontsize{20} \bftime') %x轴标签,设置字体为20号(默认14号),\bf表示黑体。然后紧跟着是字符‘time’

提高速度

  1. 无用的注释删掉 1、尽量避免使用循环 (1)尽量使用像量化的运算代替循环操作,可明显提高执行效率; (2)在必须使用多冲循环时,尽量将循环次数少的放在外层,较多的在内层。 2、大型矩阵预先定维 给大型矩阵动态定位是很费时的事情,在定义大型矩阵时,首先用Matlab的内建函数, 如zeros()或ones()对变量进行定维,然后赋值,可显著减少时间。 3、二重循环的矩阵代替 使用meshgrid()函数构造两个m×n的矩阵i,j,从而直接得出所需矩阵。如: [i,j]=meshgrid(1:m,1:n);%m=10,n=1000 H=1./(i+j-1) %此例生成了一个m×n的Hillbert长方形矩阵

    4、优先考虑内建函数 它们是由更底层的C语言实现的,执行效率显然要快于使用循环的矩阵运算。

    5、采用更有效的算法 你如quad()和quad8(),后者无论在速度上还是在精度上都要明显优于前者。

    6、应用Mex技术 比如,当好事的循环不可避免时,可考虑C语言,按Mex技术要求的格式编写相应部分的程序, 通过编译连接,形成Matlab中可直接调用的动态链接库(dll)文件。

    7、遵守Performance Acceleration的规则(可以参考帮助文档,总结为以下七条) 1、只有使用以下数据类型Matlab才会对程序加速: logical,char,int8,uint8,int16,int32,uint32,double,对其它类型不予加速;

    2、Matlab不会对超过三维的数组加速;
    
    3、当使用for循环时,只有当for循环的范围内只使用标量来表示并且每一条语句只使用支持加速的数据类型,只是用三维以下的数组,只调用了内建函数时才予以加速;
    
    4、当使用if,elseif,while和switch时,条件测试语句只是用了标量才会予以加速;
    
    5、不要在同一行写入多条操作,这样会减慢执行速度;
    
    6、当某条操作改变了原来的数据类型和形状(大小或维数)时,会减慢速度;
    
    7、应带使用这样的复常量如x=1+2i,而x=1+2*i会减慢速度。
    

可以使用一对tic/toc来查看某段程序的执行时间。

取整函数 fix 和round

fix, 舍去小数部分 round,四舍五入

fix(-2.03) ans = -2 fix(-2.96) ans = -2 >>round(4.3) ans = 4 round(4.8) ans = 5

semilogy 函数,y轴用对数坐标。x轴用线性坐标。

x=1:6;
y=10.^(x)
figure
semilogy(x,y)

set(gca, 'fontsize', 12); % 更改当前坐标轴字体大小

当前路径下 (mat和m文件在一起): load .mat; 在下一级路径下: load .\下一级路径的文件名*.mat; 在上一级路径下: load ..*.mat; 在平行文件夹内: load ..\平行的文件夹**.mat;

例如,读写当前目录下aaaa文件夹中的x.txt文件

saveas, 保存图片


fid = fopen('.\aaaa\x.txt', 'wt'); 
fprintf(fid, '%s\n', '1234'); 
fclose(fid);

name='wd';

a=1:8;

for i=1:3

    b=a.^i;

    plot(a,b)

    h=gca;

    saveas(h,['E:\牛刀小试\aa\aaaa',name,num2str(i,'%4.4d'),'.jpg'])

end

旋转电场 rotation electric field.


t=0:0.01:4*pi;
E0=1;
w=1;
phi=pi/2;
a=0.3;% a is the elliticity
ex=a/sqrt(1+a^2); 
ey=1/sqrt(1+a^2);%长轴在y方向

Exx=ex*E0.*cos(w.*t);
Eyy=ey*E0.*cos(w.*t+phi);  
theta1=pi/6;%rotation angle.
Ex=cos(theta1)*Exx-sin(theta1)*Eyy; % rotation matrix=[cos(theta1),-sin(theta1);sin(theta1),cos(theta1)];
Ey=sin(theta1)*Exx+cos(theta1)*Eyy; %从时间轴看过去,沿逆时针旋转
figure
plot3(t,Exx,Eyy,'r',t,Ex,Ey,'b')

二维绘图基本指令,plot

离散数据点 符号| 含义 | |符号 |含义 | |符号 |含义
---|--- |---|--- |--- |---|--- |--- d|菱形 diamond | |x|叉形 ||<| o|空心圆圈 | |.|实心黑点 ||>| s|方块符 square | |+| ||v| p|五角星pentagram| |*| | | h|六角形 hexgram | |^| | |

连续线型

符号 含义 符号 含义
- 细实线 -. 点划线
虚点线 -- 虚划线
颜色
--- --- --- ---
b:blue g:green r:red c:青色

三维绘图

[X,Y]meshgrid(x,y) x为长度为n的行向量,y为长度为m行向量 则X为m行n列的矩阵,每一行为x。Y为m行n列的矩阵,每一列为y。例如:

x=1:3;
y=10:14;
[X,Y]=meshgrid(x,y)

结果为: X =

 1     2     3
 1     2     3
 1     2     3
 1     2     3
 1     2     3

x作为它的行,列数为length(y)

Y =

10    10    10
11    11    11
12    12    12
13    13    13
14    14    14

peaks函数,产生二维高斯分布。有三个极大值点,三个极小值点。

pcolor 二维 mesh 三维网线图 surf 三维曲面图

向量点乘,叉乘

cross,求向量的叉积(cross product)

dot,求向量点积(dot product) matlab 中 $ f()$

画高斯函数

$$ f(x,\sigma,c)=e^{\frac{-(x-c)^2} {2\sigma^2}} $$

x=-10:0.01:10;
y=gaussmf(x,[2 0]) %y=gaussmf(x,[sig c])
figure
plot(x,y)

比较两个字符串,strcmp(str1,str2) clear 在函数内部,只能清除函数里面,并且是clear之前的变量。对于主程序的变量,无能为力。

画动态图

1.画彗星轨迹图 comet(x,y,p),commet3(x,y,z)(3D).从初始点到终点的动态轨迹图,p*length(y)为尾巴长度,默认p=0.1例如

t=0:0.01:2*pi;
x=cos(2*t).*(cos(t).^2);
y=sin(2*t).*(sin(t).^2);
comet(x,y);

2.movie,画多个图,动态图片然后保存。

nFrames = 20;

% Preallocate movie structure.
mov(1:nFrames) = struct('cdata', [],...
                        'colormap', []);

% Create movie.
Z = peaks; surf(Z);
axis tight manual
set(gca,'nextplot','replacechildren');
for k = 1:nFrames
   surf(sin(2*pi*k/20)*Z,Z)
   mov(k) = getframe(gcf);
end

% Create AVI file.
movie2avi(mov, 'myPeaks.avi', 'compression', 'None');

符号计算

syms x a b %定义符号 x,a,b

f1=x*log(x);
s1=int(f1,x) % f(x)dx  indefinite integral
s2=int(f1,x,a,b) % 定积分,积分上下限为a,b
pretty(s2)   %把s2转化为易读形式。

对于复数矩阵A,max 函数取得是A中模最大的元素。

反向排序矩阵

a=0:10;
b=a(end:-1:1)

b = 10 9 8 7 6 5 4 3 2 1 0

对文件夹和文件的操作

创建文件夹,复制文件

mkdir('a/b');%在当前目录的a文件夹下,创建名为b的子文件夹
copyfile('source','destination')
copyfile('E:\a\','E:\b')%把a文件夹下的所有文件复制到b文件夹里
%copies the file or folder named source to the file or folder destination
%多个文件
[a,b]=copyfile('sf','df') ;%把sf文件下的a,b复制到df文件夹下。

读写文件

fid=fopen('a.txt','r')
%读取文件a.txt,读取正确,fid为正整数。fid=-1,读取失败。
frewind(fid)      %返回到文件的开头
fgets()  %从文件中读行,返回行结束符 

eval 函数的使用

  1. 对文件重命名
eval(['!rename',',a.txt' ',b.txt']); %把a.txt重命名为b.txt

矩阵求和

A为二维矩阵m×n,b=sum(A,2) 对所有的行求和,b为m×1.例如:

计算程序所用时间

  1. tic toc 组合
tic
程序
toc
  1. clock 和estime()
t1=clock
程序
t2=clock
estime(t1,t2)  %调用windows的系统时钟来计算
  1. cputime函数 根据cpu的主频来判断时间,与前两个不同
t1=cputime
函数
t2=cputime
t=t2-t1

cumsum()函数进行含变量上限的积分

$$A\left( t \right) =- \int_0^t {E\left( {t'} \right)dt'} $$

Ax = -cumsum(Ex).*dt;

© 著作权归作者所有

j
粉丝 0
博文 3
码字总数 2884
作品 0
武汉
私信 提问
VC++与Matlab混合编程之引擎操作详解

Visual C++是当前主流的应用程序开发环境之一,开发环境强大,开发的程序执行速度快。但在科学计算方面函数库显得不够丰富、读取、显示数据图形不方便。Matlab是一款将数值分析、矩阵计算、信...

flyhighly
2010/12/21
393
0
matlab基本操作和语法

1.前言 准确的说这篇文章不是给完全的编程新手,特别是以前没有过一定编程经验的人准备的。 文章的适合对象是:已经有一定编程基础的人,如果你想用Matlab来快速的完成算法验证,以及科研学术...

NORTHhan
2016/04/22
0
0
接触Matlab10年后的一个总结,随时使用Matlab要掌握的一些要点

阅读目录 1.前言 2.Matlab的简单介绍 3.Matlab开发环境介绍 4.那些常见的命令 5.不得不说的矩阵操作 6.编程语法 7.关于Matlab我想说的话   不记得上一次写超过20行的matlab程序是什么时候了...

老朱第八
2017/11/11
0
0
MATLAB vs. Python | 选择 MATLAB 用犹豫吗?

基于矩阵的 MATLAB 语言让数学直观易读。 工程师和科学家需要能够直观表达矩阵和数组数学运算的编程语言,而非通过通用编程实现的编程语言。 Python 中的矩阵数学需要执行函数调用,而非自然...

技术小能手
2018/08/01
0
0
数学软件--MATLAB

MATLAB是矩阵实验室(Matrix Laboratory)的简称,是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据 分析以及数值计算的高级技术计算语言和交互式环境,主要包括MAT...

匿名
2010/04/28
35.3K
2

没有更多内容

加载失败,请刷新页面

加载更多

医疗项目pc端后台页面用vue重构整个html页面

页面源码是vue

xintaiideas
29分钟前
1
0
领域驱动中的“贫血症和失忆症” --实践领域驱动--原文

贫血症严重危害着人类健康,并且伴随有危险的副作用。当贫血领域对象被首次提出来时,它并不是一个博得赞美的词汇,它描述的是一个缺少内在行为领域对象。奇怪的是,人们对于贫血领域对象的态...

还仙
32分钟前
5
0
条码打印软件中标签预览正常打印无反应怎么解决

在使用条码打印软件制作标签时,有客户反馈,标签打印预览正常的,但是打印无反应,咨询是怎么回事?今天针对这个情况,可以参考以下方法进行解决。 一、预览正常情况下,打印没反应 (1)在条码...

中琅软件
42分钟前
5
0
判断字符串的时候

判断字符串的时候一定把常量房前边, //报警程度 String leve = vo.getDeviceAlertDeal().getWarnLevel(); if(("0").equals(leve)) { row.add("无报警"); }else if(("1").equals(leve)) { ro......

简小姐
43分钟前
7
0
Linux maven3.6.2 install

PS:安装 maven 之前请先安装 jdk 1.安装 wget 命令(安装过就不用了) yum -y install wget 2.寻找需要的 maven 版本 https://maven.apache.org/download.cgi 3.进入 /var/local 文件夹 cd...

东方神祇
45分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部