matlab笔记

Posted 会思考的浣熊

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了matlab笔记相关的知识,希望对你有一定的参考价值。

第一章 matlab环境

format compact

format = format loose

辨析:

    clc
    clear

留有空格是好的

a除以b    
    写作:a / b    右除,斜杠

b除以a    
    写作:a \\ b    左除,反斜杠  

右除运算级高于左除

who
显示所有变量的名称

whos
显示的更多

...
省略号表示续行输入 = shift + enter

四位 short(默认)

format long

format bank(财务)

format short e 科学计数法

format rat  比值

pi

exp(1)

sqrt()

log(x) = ln(x)

log10(x) = lg(x)

cos(pi / 4)

atan(pi / 3)

i

% example1.m
% script file example1.m to compute exponential of a set of numbers
x = [1:2:3:4];
y = exp(x)
>> example1

exit

quit

第二章 向量与矩阵

向量 一维数组

列向量
a = [2; 1; 4]

数乘
b = 3 * a

行向量
v = [2 0 4]
v = [2, 0, 4]

转置
y = a'

从已存变量创建大变量
D = [A; B] % 由列向量创建
T = [R, S] % 由行向量创建

创建等差元素向量
x = [0:2:10]

    y = exp(x)
    y = x.^2    % 必须加上点号???
`y = [100:-5:80]`
% 创建等差元素向量
    linspace(a, b)      % 默认100个
    linspace(a, b, n)   % n个

对数值间隔相同
    logspace(1, 3, 3)
    10      100     1000    

特征化向量

最长的部分元素数目
length(A)

最大元素
max(A)

最小元素
min(A)

向量的模
sqrt(sum(J.*J))

向量的共轭复数向量
v = conj(u)

复数向量的模
sqrt(sum(v.*u))

向量的数量积和向量积
点乘
dot(a, b)
叉乘
cross(A, B) % 至少三维???

引用向量元素

    v(i)            % v[i]
    v(:)            % 列出向量的所有元素
    A(4:6)          % 部分复制出一个新向量

矩阵的基本操作

转置会自动计算复数的共轭值

转置矩阵而不计算共轭值(.')
D = C.'

矩阵的数乘(.*)
C = A .* B

矩阵相乘(m*p,p*n)
A*B

把一个数加到向量上
2 + A

等长数组右除
A ./ B

等长数组左除
A .\\ B

数组元素平方
B .^2

特殊类型矩阵

n*n单位矩阵
eye(n)

零矩阵
zeros(n), zeros(m, n)

全一矩阵
ones(n), ones(m, n)

引用矩阵元素
A(2, 3)

第i列所有元素
A(:, i)

第i, j之间所有元素
A(:, i:j)

删除第i行
A(i, :) = []

复制A矩阵的第1行4次创建一个新矩阵
E = A([1, 1, 1, 1,], :)

引用两次A的第1行创建新矩阵
F = A([1, 2, 1], :)

行列式与线性方程组求解

计算矩阵的行列式
det(A)

计算方程必须是左除 (Ax = b)
A \\ b

求矩阵的秩
rank(A)

当且仅当rank(A) = rank(Ab)时方程组有解.如果秩等于n,那么方程组有唯一解,如果秩小于n,那么方程组有无数解。

增广矩阵
[A b]

矩阵的逆A^(-1)
inv(A)
如果det(A)=0,那么逆矩阵不存在,c称该矩阵为奇异矩阵。

若Ax = b, x = inv(A)*b

(广义逆矩阵)方程数比未知数个数少
x = pinv(A)*b

简化阶梯矩阵
rref(A)

魔方矩阵(n*n,1~n^2,行元素之和等于列元素之和)
magic(5)

矩阵分解
    LU(三角),QR(正交三角),SVD(奇异值)
    [L, U] = lu(A)
    x = U\\(L\\b)

第三章 绘图与图形

2D绘图基础

     x = [0:0.1:10];
     y = cos(x);
     plot(x, y)

为坐标轴添加标签
    xlabel('x')  
    plot(x, y), xlabel('x'),ylabel('cos(x)')

更多2D绘图选项

fplot绕过间隔,尽可能的绘制精确的图像
格式
fplot(‘function string’, [xstart, xend])

标题
title(‘string’)

!!当一个函数是有两个或者更多函数相乘构成时,不要忘记在相乘时加上"."以便告诉matlab是对两个数组相乘。
fplot不用考虑这个问题

网格
grid on

坐标轴命令
axis equal,x轴y轴间隔相等

在同一图像中显示多个函数
f = exp(-t);
g = exp(-2*t);
plot(t, f, t, g, ‘–’)

- 实线 '-'
- 虚线 '--'
- 虚点线'-.'
- 点线 ':'
添加图例
    >> plot(x,y, x,z, '-.'), xlabel('x'), ylabel('Potential') 
    >> legend('sinh(x)','cosh(x)')  

设置颜色
    >> x = [-5:0.01:5];
    >> y = sinh(x);
    >> z = cosh(x);
    >> plot(x, y, 'r', x, z, 'b--')

设置坐标比例

设置绘图范围
    axis([xmin xmax ymin ymax])

     >> x = [0:0.01:5];
     >> y = sin(2*x+3);
     >> plot(x, y), axis([0 5 -1 1])

数组相乘记号
    y = sin(5*x).^2

子图
    subplot(m, n, p)
    子图有m行和n列,p表示放在哪一部分

    >> x = [0:0.01:5];
    >> y = exp(-1.2*x).*sin(20*x);
    >> subplot(1, 2, 1)
    >> plot(x, y), xlabel('x'), ylabel('exp(-1.2x*sin(2-x))'), axis([0 5 -1 1])
    >> y = exp(-2*x).*sin(20*x);
    >> subplot(1, 2, 2)
    >> plot(x, y), xlabel('x'), ylabel('exp(-2x)*sin(20x)'),axis([0 5 -1 1])

    subplot告诉matlab放置在哪里

图像重叠和linspace命令
    >> x = linspace(0, 2*pi);
    >> plot(x, cos(x)), axis([0 2*pi -1 1])
    >> hold on
    >> plot(x, sin(x)), axis([0 2*pi -1 1])

极坐标和对数图像

极坐标
    >> a = 2;
    >> theta = [0:pi/90:2*pi];
    >> r = a*theta;
    >> polar(theta, r), title('阿基米德螺线')

    >> theta = [0:pi/90:6*pi];
    >> r = 1 + 2*cos(theta);
    >> polar(theta, r, 'r-.')
对数
    >> RC = 0.25;
    >> s = [1:100]*i;
    >> F = abs(1./(1+RC*s));
    >> loglog(imag(s), F), grid, xlabel('频率(rad/s)'),ylabel('输出/输入比'),title('频率响应')

loglog  x轴使用直接值,y轴使用对数值

semilogx    x轴使用对数值,y轴使用直接值
semilogy    x轴使用直接值,y轴使用对数值

离散数据绘图
使用bar绘制带有标签和标题图像的命令
    >> x = [1:5];
    >> Y = [50, 98, 75, 80, 98];
    >> y = [50, 98, 75, 80, 98];
    >> bar(x,y), xlabel('学生'), ylabel('分数'),title('期末测试')

针状图
    >> t = [0:5:200];
    >> f = exp(-0.01*t).*sin(t/4);
    >> plot(t, f),xlabel('时间(秒)'),ylabel('弹簧响应')
    >> stem(t, f),xlabel('时间(秒)'),ylabel('弹簧响应')

等高线

    meshgrid    产生矩阵元素,xy分别按照指定的范围和增量来产生

    >> [x, y] = meshgrid(-5:0.1:5, -3:0.1:3);
    >> z = x.^2 + y.^2;
    >> contour(x, y, z)
    >> [C, h] = contour(x, y, z)
    >> [C, h] = contour(x, y, z);
    >> set(h, 'ShowText', 'on', 'TextStep', get(h, 'LevelStep')*2)

    contour3()

    >> [x, y] = meshgrid(-2:0.1:2);
    >> z = y.*exp(-x.^2-y.^2);
    >> contour(x, y, z), xlabel('x'),ylabel('y')
    >> contour3(x, y, z, 30)
    >> surface(x, y, z, 'EdgeColor', [.8 .8 .8], 'FaceColor', 'none')
    >> grid off
    >> view(-15, 20)

三维图像
    >> [x, y] = meshgrid(-2*pi:0.1:2*pi);
    >> z = cos(x).*sin(y);
    >> mesh(x,y,z),xlabel('x'),ylabel('y'),zlabel('z')
    mesh是plot(x,y)在三维上的扩展

表面带有渐变颜色的图像(surf, surfc)
    >> surf(x, y, z), xlabel('x'), ylabel('y'),zlabel('z')
    surfc留下投影
    surfl光照表面

    >> surfl(x,y,z),xlabel('x'),ylabel('y'),zlabel('z');
    >> shading interp;
    >> colormap(gray);

第四章 统计和matlab编程介绍

创建柱状图
>>  x = [55, 63, 69, 70, 75, 78, 82,84, 85, 88, 90, 96,100];
>> y = [1, 2, 1, 6 ,4 ,7, 2, 1, 3, 2, 4 ,2, 1];
>> bar(x, y)

bar(a, b)
bar3(a, b)
bar3h(a, b)

x = [54.5, 64.5, 74.5, 84.5, 94.5];
garcia = [0; 3; 18; 13; 10];
simpson = [3; 5 ;20; 10; 5];
smith = [1; 2; 15; 17; 8];
y = [garcia simpson smith];
bar(x, y), xlabel('考试分数'), ylabel('学生人数'), legend('加西亚', '辛普森', '史密斯')

编写matlab函数
function ave = myaverage(x, N)
sizex = size(x);
sizeN = size(N);
if sizex(2) ~= sizeN(2)
    disp('error: data must has a same dimish')
else
    total = sum(N);
    s = x.*N;
    ave = sum(s) / total;
end

使用for循环编程
for i = 1: num(2)
    sumx = sumx + x(i);
end

计算标准差和中位数
均值 mean()
中位数 median()
标准差 std()

更多编程要点

r = input('输入半径:')
while
switch

第五章 代数方程求解和其他符号工具
一个变量的代数方程及解
处理超越函数,三角函数和双曲函数
处理复数

 x = solve('a*x + 5 = 0')
 solve('a*x+5', 'a')

 二次方程求解
 s = solve('x^2 - 6*x - 12 = 0')
 答案以s(1),s(2)形式保存

>> d = 'x^2 + 9*x - 7 = 0';
>> solve(d)

ans =

   109^(1/2)/2 - 9/2
 - 109^(1/2)/2 - 9/2

 符号方程绘图
 使用ezplot产生符号方程图像
>> d = 'x^2 - 6*x - 12';
>> ezplot(d)
指定范围
ezplot(f, [x1, x2])
ezplot(f, [x1, x2, y1, y2])

>> f = 'x^3 + 3*x^2 -2*x -6';
>> solve(f)

ans =

       -3
  2^(1/2)
 -2^(1/2)

>> ezplot(f, [-8, 8, -8, 8]),grid on

解方程组
>> s = solve('5*x+4*y = 3', 'x-6*y=2');
>> s.x

ans =

13/17

>> eq1 = 'w+x+4*y+3*z=5';
>> eq2 = '2*w+3*x*y-2*z = 1';
>> eq3='w+2*x-5*y+4*z = 3';
>> eq4 = 'w-3*z=9';
>> s = solve(eq1, eq2, eq3, eq4);
>> s.w

方程展开与合并
展开
>> syms x
>> expand((x-1)*(x-4))

>> syms x
>> syms y
>> expand(cos(x+y))

ans =

cos(x)*cos(y) - sin(x)*sin(y)

分配多项式
>> syms x
>> collect(x*(x^2-2))

因式分解
>> syms x; syms y;
>> factor(x^2-y^2)

同一个命令分解多个因式
>> syms x;syms y;
>> factor([x^2-y^2, x^3+y^3])

化简
>> syms x;
>> simplify((x^4 - 81)/(x^2 - 9))

使用指数和对数函数求解方程

函数的级数表示
泰勒展开
>> syms x
>> s = taylor(sin(x))

第六章 基本符号演算和微分方程
极限,导数
解微分方程

极限计算
x->0,limit f(x)
>> syms x
>> limit ((x^3+1)/(x^4+2))

x->a,limit (f, a)
>> syms x;
>> f = (2*x+1)/(x-2);
>> g = x^2+1;
>> F1 = limit (f, 3)
>> limit(f*g, 3)

>> h = f^g
>> limit (h, 3)

使用isequal检查两个量是否相等,如果两个量不相等,isequal返回0

limit (f, inf)
x->无穷
>> syms x;
>> limit (sqrt(x^2+x)-x, inf)

左右极限
给limit传递“left”和“right”作为最后一个参数计算函数的左右极限
>> a = limit(f, x, 3, 'left')   % 一定要加x


获得渐近线
>> syms x;
>> f = 1/(x*(x-1));
>> ezplot(f);
>> g = x*(x-1);
>> s = solve(g)

s =

 0
 1

>> ezplot(1/g);
>> hold on;
>> plot(double(s(1))*[1 1], [-1 2], '--')
>> plot(double(s(2))*[1 1], [-1 2], '--')
>> hold off
>> 

导数计算(diff)
>> syms x t 
>> f = x^2;
>> g = sin(10*t);
>> diff(f)

ans =

2*x

>> diff(g)

ans =

10*cos(10*t)

获得n阶导数
diff(f, n)

pretty(f)
使表达式整齐

subs(f, 0)
代入函数中的某个值

使用dsolve求解符号微分方程
desolve(‘equal’)
导数用D表示,更高阶的导数通过在D后面带上阶数数字表示。

>> equal = 'D2y + 2*Dy = 5*sin(7*x)'
>> dsolve(equal)

常微分方程(ODE)求解

>> s = dsolve('Dy = a * y')
>> C5 = 2; a = 4;
>> f = subs(s)

初始条件还可以用引号放在方程后面
>> dsolve('Dy = y*t/(t - 5)', 'y(0) = 2')


方程组和相平面图
>> s = dsolve('DX= Y', 'DY = -X', 'X(0) = -1', 'Y(0) = 2')
>> ezplot(s.X), set(findobj('Type', 'line'), 'Color', 'r')
>> h = get(gca, 'child')


>> ezplot(s.p, [0 10])
>> title('动量')

>> ezplot(s.x, s.p, [-5 5])
>> axis([-8 8 -25 20])

>> tvalues = (0:0.1:10);    % 时间间隔参数
>> xval = subs(s.x, 'x', tvalues);

第七章 常微分方程(ODE)的数值解

使用ODE23和ODE45求解一阶方程
.m文件

function ydot = eq1(t, y)
ydot = cos(t);

[t, y] = ode23('func_name', [start_name, end_time], y(0))

>> [t, y] = ode23('eq1', [0, 2*pi], 2);

>> plot(t, y, 'o', t, f),xlabel('t'),ylabel('y(t)'),axis([0 2*pi 0 4])
>> ode45('eq1', [0 2*pi], 2);

第八章 积分
求解积分符号
数值积分

int 命令
int(f),f一个表达式

第九章 变换

第十章 曲线拟合

polyfit(x, y, n)        % n表示多项式次数

handicap

>> handicap = [6:2:24]

handicap =

  Columns 1 through 8

     6     8    10    12    14    16    18    20

  Columns 9 through 10

    22    24

>> Ave = [3.94, 3.8, 4.1 , 3.87, 4.45, 4.33, 4.12, 4.43, 4.6, 4.5];
>> p = polyfit(handicap, Ave, 1);
>> m = p(1)

m =

    0.0392

>> b = p(2)

b =

    3.6267
>> x = [6:0.1:24];
>> y = m*x + b;
>> subplot(2, 1, 2);
>> plot(handicap, Ave,'o', x, y), xlabel('差点'),ylabel('平均成绩')
>> 

第十一章 使用特殊函数
伽马函数

MATLAB中的伽马函数

>> y = gamma(x);
>> surface = @(n, r) r^(n-1)*2*(pi^(n/2))/gamma(n/2)

与伽马函数相关的函数

>> x = 0.2;
>> n = 0.3;
>> y = x^n;
>> z = gammainc(x, n)

贝塞尔函数

贝塔函数

特殊积分
幂积分

勒让德函数

以上是关于matlab笔记的主要内容,如果未能解决你的问题,请参考以下文章

codevs2205等差数列

如何用matlab求解常微分方程?matlab解常微分方程之符号解法介绍

怎么用matlab解方程啊?

matlab中如何求解齐次线性方程组(代数矩阵)的非零解

matlab微分方程的解?

如何用matlab求解微分方程并画图