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 产生矩阵元素,x和y分别按照指定的范围和增量来产生
>> [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笔记的主要内容,如果未能解决你的问题,请参考以下文章