MatlabMatlabMatlab学习资料

matlab笔记

2017-01-07  本文已影响357人  VeyronC

显示中文帮助的方法

预设→常规→帮助→在mathworks.com网站上(需要Internet连接)→语言(简体中文)


/:右除。a/b表示矩阵a乘以矩阵b的逆。a/b == a * inv(b)

\:左除。a\b表示矩阵a的逆乘以b。 a\b == inv(a) * b

./:右除。a./b表示矩阵a中的每个元素除以矩阵b的对应的元素。

.\:左除。a.\b表示矩阵b中的每个元素除以矩阵a的对应的元素。

.*点乘不是矩阵的乘法,是对应元素相乘。


1 MATLAB系统环境与设置

2 MATLAB的数据操作及语法

字符串

eval()函数一个很好的功能就是可以自动生成一系列变量
注意eval()中拼接字符串外面要加中括号!
for x = 1:3
    eval(['a',num2str(x),' = 7'])
end
%% 相当于执行了下面三条语句
a1 = 7
a2 = 7
a3 = 7
for y = 1:2
   eval(['title(''test',num2str(y),''');']);
end

结构体

Cell(单元或元胞)

3 MATLAB的矩阵操作

矩阵索引

重排矩阵

矩阵拆分

删除矩阵元素

扩展矩阵

压缩矩阵,去除重复元素

4 MATLAB矩阵处理基础

特殊矩阵建立
矩阵和向量运算
线性方程组求解
矩阵的相似化简和分解
矩阵和向量的范数
矩阵分析

线性方程组的求解,也可以用左除运算符,效率比较高。

A = [1, 2, 3; 1, 4, 9, 1 8 27];
b = [5, -2, 6]'
x = inv(A)*b
x = A\b    %%解出结果与上一行相同
norm(A, 1)      %1范数
norm(A, 2)      %2范数
norm(A, inf)    %无穷范数
norm(A, 'fro')  %f范数

矩阵分析:

S = funm(A, @fun);

A = [0 1; 0 -2];
expA = funm(A, @exp)
expA = expm(A)  %结果同上
sinA = funm(A, @sin)
cosA = funm(A, @cos)

5 MATLAB程序控制结构

顺序结构

分支(选择)结构

x = input('x');
if x < 10
    y = log(x);
else
    y = cos(x);
end
%多分支if语句
c = input('input a character', 's');
if c >= 'A' & c <= 'Z'
    disp(char(abs(c) + abs('a') - abs('A')));
elseif c >= 'a' & c <= 'z'
    disp(char(abs(c) - abs('a') + abs('A')));
elseif c >= '0' & c <= '9'
    disp(c);
end
%switch分支,在1000不同价格范围有不同的折扣rate
price = input('input price');
switch fix(price/100)
    case {0, 1}   %可以用单元结构表示当判断条件为0或1的时候
        rate = 0;
    case {2, 3, 4}
        rate = .03;
    case {5, 6, 7, 8, 9}
        rate = .05;
    otherwise
        rate = .1; 
end
try
    语句组1
catch           %可没有
    语句组2    %可没有
end

循环结构

for 循环变量 = 表达式1:表达式2:表达式3
    循环体
end
% for循环
A = 1:100;
sumA = 0;
for k = 1:100
    sumA = sumA + A(k);
end
while 条件
    循环体
end
%while循环,下面实现输入字符再输入回车继续执行,直接输入回车退出循环
while 1
    c = input('input a character', 's')
    if isempty(abs(c))  %isempty函数判断是否为空,输入回车也是空
        break;
    end 
end

6 MATLAB的编辑器和程序调试

函数文件

function [输出形参] = 函数名([输入形参])
[注释说明]     %用help或lookfor查看函数帮助即显示这部分内容
函数体

函数参数可调标识变量

nargin
nargout
varargin
varargout

function re = add_multi(a, b, c, d)
%输入参数可调的函数范例
if nargin == 4
    re = a + b + c + d;
elseif nargin == 3
    re = a + b + c;
elseif nargin == 2
    re = a + b;
else
    error('wrong');
end
function [a, b] = add_mu(c, d, e, f)
%输出参数可调范例
if nargout == 2
    a = c + d + e + f;
    b = c * d * e * f;
else
    a = c + d + e + f;
end
function re = add_var(a, b, varargin)
%输入参数个数未知范例
if nargin == 2
    re = a + b;
elseif nargin == 3    
    c = varargin{1}; %用元胞数组来操作
    re = a + b + c;
else
    re = a + b;
    for k = 1:(nargin-2)
    re = re + varargin{k};
    end
end

全局变量

调试

7 MATLAB绘图功能(1) 二维高层绘图操作

% 基本绘图操作,绘制一个正弦函数
x = 0:0.01:2*pi;
y = sin(x);
plot(x, y);
% y是矩阵的情况
y1 = sin(x);
y2 = cos(x);
z = [y1; y2];
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);

% 上面是使用了每列进行绘图,这样绘制了很多条曲线。
% 如果想要使用每一行来绘图,
% 那么需要将x和y进行转置,
% 就绘制了一条从0到2π的余弦,
% 一条从-π到π的正弦
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 = linspace(0, 2*pi, 200);
y = sin(x);
plot(y);   %绘出正弦
y2 = cos(x);
y3 = y + i*y2;
plot(y3);  %绘出一个椭圆,坐标轴控制axis equal命令可变成一个圆
% 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含有的曲线选项
plot(x, y, 'k');   %r红色,k黑色,g绿色,y黄色,m品红,b蓝色
plot(x, y, '*');   %用'*'来绘图,是离散的图。同理.是点,'p'是五角星,'<' ,'>'是三角星,'--'虚线,'-.'是线和点,':'很小的虚线
plot(x, y, 'r*');  %颜色和线型的结合
%图形标注
plot(x , y);
xlabel('x');
ylabel('y');
title('正弦');
text(2, 0.3, 'y = sin(x)');  %在某个位置显示字符串
legend('cos', 'sin');  %绘制图例

坐标轴控制

图形保持

窗口分割

%窗口分割
x = 0:0.1:2*pi;
y1 = sin(x);
y2 = cos(x);
y3 = tan(x);
y4 = exp(x);
subplot(2, 2, 1)  %将窗口分成两行两列4格,绘制第一格
plot(x, y1);
subplot(222)  %绘制第二格
plot(x, y2);
subplot(223)
plot(x, y3);
subplot(224)
plot(x, y4);

8 MATLAB绘图功能(2) 二维底层绘图修饰

hl = line('XData', [-pi:0.01:pi], 'YData', sin([-pi:0.01:pi]),...
    'LineWidth', 1, 'LineStyle', ':', 'Color', 'r');
hl = line('XData', [-pi:0.01:pi], 'YData', sin([-pi:0.01:pi]),...
    'LineWidth', 1, 'LineStyle', ':', 'Color', 'r');
set(hl, 'LineWidth', 2, 'Marker', 'p', 'MarkerSize', 15);

底层坐标轴控制

ha = axes;
get(ha)   %获得坐标轴属性
hf = figure;
ha = axes('Parent', hf, 'Unit', 'normalized', 'Position', [.1 .1 .6 .5]);

9 MATLAB Notebook使用简介

10 MATLAB符号运算

a = sym('a');  %符号变量
syms a;        %同上
c = sym('3');  %符号常量
f1 = '3 * x + 4';
class(f1)      %得到类型为char
 
syms x
f2 = 3 * x + 4;
class(f2)      %得到类型为sym
 
f3 = sym('3 * y + 4');
class(f3)      %得到类型为sym
 
f4 = f1 + f2;   %得到f4 = 6*x + 8
class(f4)       %得到类型为sym

符号表达式化简

符号表达式与数值的转化用

符号表达式的分解展开合并

syms a b x y;
f1 = a^3 - b^3;
factor(f1)    %得到[ a - b, a^2 + a*b + b^2]
f2 = (3*x^2 + 8*y^2)*(-x^2 + 3*y);
expand(f2)    %得到- 3*x^4 - 8*x^2*y^2 + 9*x^2*y + 24*y^3
f3 = 3*x^2 + 4*x^2 + 5*x^2*y;
collect(f3)   %得到(5*y + 7)*x^2

符号矩阵

符号函数

syms x
f1 = x^3 - 9;
subs(f1, 3)  %用3来代替原来f1中符号的位置来计算
 
y = (sin(x + a) - sin(x - a)) / x;
limit(y, 0)  %求极限,当x趋于零时,y的值
 
y2 = sqrt(1 + exp(x));
diff(y2)     %求解差分
diff(y2, 2)  %求解2阶导数
diff(y2, 3)  %求解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)  %4个参数意义依次是:第一是通项,第二个规定哪个参数作为求和变量,第三第四参数表示在求和范围
% 泰勒展开
syms x
y = (1 + x + x^2)/(1 - x + x^2);
taylor(y,'order',6)

符号方程求解

% 方程组,可用=号形式,也可移项到等号同意一边,表示等于0
[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', 'x')

参考《MATLAB基础视频》 作者:lskyp

上一篇 下一篇

猜你喜欢

热点阅读