在比赛的前几天查看一下可视化画图的方式
#符号识别
piecewise 分段函数
#与其他语言的区别
对于控制指令 matlab大多都是没有标点符号,而对于有分号则为不输出
在某些指令中有些像python一样的简便
而对于end则是类似Java
matlab 2018a中的一些函数
xor(x,y)功能:异或运算 同为0或者非0时返回0,否则返回1
any(x) 功能:如果是零向量或者零矩阵则返回1,否则返回0
#区分
数组 用 Array=[2 2 4]
结构体 用Struct=struct(’ ‘,value,’ \',value)
单元数组(每个单元数据类型可以不一样)
C={} \',‘隔开,’;\'换行 或者C=cell(2,2) 生成2*2的空单元数组
注意:同一般的数值数组一样,单元数组的内存空间是动态分配的,用cell函数创建空单元数组的主要目的是为该单元数组预先分配连续的存储空间,节省内存占用,提高执行效率。
C(m,n)指的是单元 比内容多了一个 []
C{m,n}指的是单元内容
#矩阵
输出矩阵的第二列
C=matrix(:,2)
#像命令一样的了解内存占用情况
whos
对于特定的矩阵或者其他变量 whos matrix
矩阵元素寻址
(1)寻址 元素按照列的原则存储在内存空间中
三种寻址方式
1)单个元素寻址 最方便就是matrix(i,j)
2)多个元素寻址 比如第3列第二至五个 则根据列的原则去寻找,matrix(2:5,3)
注意matrix(2:4)是按照列去数
%若是连续访问元素则 C(1:4) 若是跳跃地访问元素,则 C([1 7])
eg. 给第一个和第七个元素赋值为2 9,,则 C([1 7])=[2 9];
3)线性寻址
用一个下标去表示 原理是(j-1)*m+i #m 是行数
matrix(8)是按照行去数
4) find(x)
find(A>2)
(2)增添
matrix(:,4)=0;
(3)删除
没有函数 直接将他复制成空 空是不占内存的
(4)求和求积
因为都是按列得到一个行向量 因此若是求的所有元素的和 sum(sum())
求积 prod()
矩阵的逻辑运算符很重要
A&B
A|B
单个& 或者 | 是对于逐个元素的逻辑运算
#测试的小技巧
errordlg(‘出错’)
num=6;
mat=magic(4)
try
mat_num=mat(num,:)
catch
mat_end=mat(end,:)
end
lasterr #显示出错原因
函数文件的写法
一个函数最好一个文件 函数名字和文件名字最好相同,若是不同,调用以文件名为主
函数文件比脚本文件多了函数定义行,在使用的时候 记得把函数文件要添加到路径之中才可在命令行中调用。
函数
对于重复性的操作我们通常会写成函数,但是有些操作会感觉像是牛刀小试,在matlab中我们可以采用匿名函数来表示 (函数句柄)
eg. F=@(input1,input2…) expression
F=@(x,y)x.^y+3xy
F(2,9)
F(2,7)
%子函数、私有函数和内联函数(private)
放在主函数文件中
格式为
function y=x(s,b)
…
…
%--------subfunction------- #这个是备注
funct=creating (a.n)
…
…
子函数只能被同一个M文件的主函数或者其他子函数调用
私有函数
eg.假设文件夹newmath在matlab的搜索路径下(不在也可以),那么newmath文件夹下名字为private的文件夹中所包含的函数只可以被newmath文件夹下的函数调用。
由于private函数对父文件夹外不可见,所以它们能使用与其他文件夹中函数相同的名字。
内联函数 这个定义和C++类似 之前还是该不清楚内联函数的作用 现在找到一篇文章理解了
内联函数的主要作用是什么?
对于以上的两种形式的函数表示
函数的形参是函数的 表现形式为
function b=humps
…
…
fminsearch(@humps)
函数的可变数量
跟python一样有这个功能
把固定的形参放前面 把不确定的设为varargin 输出不确定个数的设为varargout
eg. function varargout=spit(d,n,varargin)
%nargin 在函数体内获得实际的输入变量
%nargout 在函数体内获得实际的输出变量
switch nargin
case
…
varargin{2} %可变变量的第二个参数
跨空间变量传递
当我们在写程序的时候,也许会遇到这样的问题,就是想在函数中调用workspace中的变量,或者想把函数中的变量传到workspace 中去,如何实现呢,下面的文章也许对你有用。首先我们看下,什么是Base workspace 和function workspace。当执行一个m文件时候,matlab会给每个函数都分配一个工作空间,称为函数工作空间,它是与基本工作空间分离的。在workspase brower 的stack属性中,可以访问上述两空间,当函数空间只在调试模式下可用,否则stack是灰色的。我们在workspase brower中看到的就是Base workspace,它保存了当前用户的使用变量。在做gui的时候我们想调用base 中的变量,或者想把当前空间的变量存到base 空间中,以下两种方法也许对你有用:
1.
跨空间计算串表达式的值
Evalin(‘workspace’,’exp1’) :在workspace指定的空间中求表达式exp1的值
Workspace可以取两个值:’base’和’caller’。
当取值为base时,表示计算eval(‘exp1’)将从基本工作空间中获得变量值;
当取值为caller时,表示计算eval(‘exp1’)将从主调函数工作空间中获得变量值。
2.
跨空间赋值
assignin(‘workspace’,’name’,value):把当前空间中的value赋值给workspace指定的空间中name变量。
例1:在当前函数中调用base空间中的bus变量。
Busline= evalin(‘base’,’bus’):将base 中的bus赋值给当前函数中的busline。
例2:将当前函数中的busline输出到base中名为bus的变量。
assignin(‘base’,’bus’,busline)。
上述资料参考于”精通 matlab6.5版”,北京航空航天大学出版社,张志涌编。
文件导入matlab工作空间中
百度视频实践
画图
1.可以在同一个画面上建立几个坐标系, 用subplot(m,n,p)命令;把一个画面分成m×n个图形区域, p代表当前的区域号,在每个区域中分别画一个图>
2. figure(‘名称’)
3. 二维画图的基本用法
4. xlim([0 2*pi]) 设定x轴的上下限的范围
5. 基本要素:
figure
plot
xlabel(\'Independent Variable X \')
ylabel(‘Dependent Variables Y and Z’)
title(‘Sine and Cosine curves’)
legend(‘y=x+sinx+e^{x}’);
gtext(‘text’)通过使用鼠标或方向键 让text放置在图形窗口中
%对于关键点的抠圈和曲线的不同设定 可以用两条plot设定。
对比图形 subplot(1,2,1);
图形页面的导出
#交互式画图
数据分析
##多项式加法乘法
a=[1 3 5 7 9];
b=[2 4 6 8 10];
c=a+b
输出
c =
3 7 11 15 19
代表着c(x)=3x4+7x3+11x2+15x+19
而不是简单的加法
乘法则是多项式
MATLAB使用一维行向量来表示多项式,多项式的系数按照降幂次序排列。
roots() 多项式求根,返回一个列向量
poly() 由根创建多项式
conv() 多项式乘法
deconv() 多项式除法
polyder() 多项式微分
polyint() 多项式积分
polyval() 多项式求值
residue() 有理多项式(由分子多项式和分母多项式)部分分式展开
数据插值
插值的任务是由已知的观测点为物理量建立一个简单的、连续的解析模型,以便能根据该模型推测该物理量在非观测点的特性。
interp1() 一维插值
interp2() 二维差值
%请问两个向量卷积是怎么运算 不同于矩阵的卷积? 向量卷积相当于两个多项式的乘积?
三次样条插值法
#符号数学运算
有些变量不是数值型的,就真的就像字符串一样是字符
这里就用sym 定义一个字符符号 syms 定义多个字符符号
class()识别数据类型 isa()识别数据类型配对是否正确
对于应用十分广泛,比如因式分解等
当要赋值的时候则x=2 然后就可得出结果。