30,419
社区成员
发帖
与我相关
我的任务
分享%% MATLAB 矩阵实验室
%%
%如何打开MATLAB文件代码,打开方式,matlab
%ccfx_base:层次分析基础知识
%ccfx_learn:学习层次分析时用到的,注释多’
%ccfx:最直接的代码
%%
%脚本文件,后缀(.m) 实时脚本文件,后缀(.mlx)
%ctrl+滚动,放大缩小
%运行节,分节符
%%
%在函数文件中编写程序,然后在脚本文件中调用
%函数文件相当于一个工具,以后用到的时候直接调用,(.m)
%有固定格式:function [sigma,theta,x,y,final_res] = Simple(f,a,b,index)
%%
%编辑器——查找和替换,可以替换代码名称等
%%
%% 1.常用键盘
clear %%清除工作区中的所有变量
clc %清除命令行中的所有变量
clear;clc%连起来用,起到初始化的作用防止之前脚本对工作区产生干扰
%ctrl+z 返回上一步操作
%ctrl+s保存
%pgup查看命令行上一行
%加;结果会更新在工作区,但是不会显示在命令行
% ; 区分行的作用
%ctrl+N 新建一个编辑器
%ctrl+R 注释的快捷键
%crtl+T 取消注释
%% 11.变量命令规则
%%
%1.变量名区分大小写
A = 3
a = 3
%%
%2.变量名长度不超过63位
%%
% 3.变量名以字母开头,可以由字母、下划线、数字组成
% 4.命名要简单明了
%% III.MATLAB数据类型
%%
% 1.数字
2 + 4
2 - 4
2 * 3
2 / 4
%%
% 2.字符与字符串string
s = 'a'%用单引号括起来
abs(s)%ASCLL码
char(65)%结果是A
num2str(65)%结果是65
str = 'I Love MATLAB &Machine learning.'
length(str)%字符串长度的计算
%%
% 区分单引号与双引号
%单引号字符,本身文本没有更多意义
DNA = 'GTGGTUGTCCCC';
s = DNA(4);
DNA2 = [DNA,'yyyyyy'];
%双引号字符串,一句话(一个变量,无论多长)写什么,就是什么,看成整体
t = "Brave uncle is not afraid to top ";
%本身带有双双引号,使用双重双引号
tt = "Brave ""uncle"" is not afraid to top";
p = t + "forever";
A = ["a","bb","ccc"]%同时多个
%双引号得到一个string变量,单引号得到多个char变量
%%
% 3. 矩阵(神经网络,无人驾驶汽车)
A = [1 2 3;4 5 6;7 8 9];
B = A';%行列转置
C = A(:);%中间是冒号,前面代字母,表示把行列式竖着拉长了
D = pinv(A);%求出逆矩阵,但是必须是方阵
%不会?警告: 矩阵接近奇异值,或者缩放错误。结果可能不准确。RCOND =2.202823e-18
A * D %A * A逆
E = zeros(10,5,3)%三维,十行五列全是0
E (:,:,1) = rand(10,5)%生成均匀分布的伪随机数。分布在(0到1)之间,十行五列
E (:,:,2) = randn(10,5)%标准正态分布的伪随机数(均值为0,方差为1)
E (:,:,3) = randi(5,10,5)%均匀分布的伪随机整数,rand(imax,m,n)
%%
% 4.元胞数组(铅笔盒,每个格可装任何东西,最后归结为大)
A = cell(1,6)%一行六个小盒子,赋值右侧的值给左侧
A{2} = eye(3)%生成一个三成三的,对角线为一的单位矩阵,2代表第二个小盒子,符号用{}
%{}中的数字从1开始,但是其他软件索引从0开始
A{5} = magic(5)%魔方类似数独,生成n阶幻方
%右边工作区可以看数值
%不会?如何在命令行窗口输出元胞的数值,可以直接换个变量给他赋值
B = A{5}
%%
% 5.结构体(python中的字典)
books = struct ('name',{{'Machine Learning'}},'price',[30,40])%括号中输入结构体内容
%区:值,字符串用{},索引矩阵用[]
books.name%在books选择name的属性
books.name(1)%执行带{},取出来cell
books.name{1}%执行不带,取出来字符串
%% IV.MATLAB的矩阵操作
%%
% 1.矩阵的定义与构造
A = [1 2 3 4 5 6 7 8 9 ]
B = 1:2:9%起始和终点是1和9,2是跳过的数长,1 3 5 7 9
%中间缺少2不可以
C = repmat(B, 3, 1)%重复B三行一列,把B看成一个整体
D = ones(4,4)%生成一个两行四列,同时值均为1
%%
% 2.矩阵的四则运算
A = [1 2 3 4;5 6 7 8]
B = [1 1 2 2;2 2 1 1]
C = A + B
D = A - B
E = A * B'%B'转置相乘必须满足行数和列数相同
F = A .* B%.要靠近乘号 .*是个整体
%.A和B对应相相乘
G = A / B%A*B的逆,inv可求逆
H = A ./ B
%%
%矩阵运算2.0
A = [3 2 1;2 4 1;3 9 2];
B = A';%转置
[D,V] = eig(A)%求特征向量和特征值
E = inv(A)%逆矩阵
F = A * E
%使用矩阵A对方程A*x = b求解,方法是使用\(反斜杠)运算符
%即A的逆矩阵乘以矩阵B
b = [1;3;5]
x = A\b%斜杠或者反斜杠,谁在相对下面的位置,谁就是取
%验证一下
s = A * x -b
%%
%如果一个操作是标量,而另一个操作不是标量
%MATLAB会隐式扩展
H = [1 1 1;2 2 2;3 3 3]
K = 4
L = K * H%运算时,K变成3*3的对角型矩阵,对角线上都是4
M = K + H%运算时,K变成3*3的矩阵,每个元素都是4
%%
%不同维度的行向量和列向量相加
N = [1 2 3 4]
P = [3;6;7]
Q = N +P%少量两行,补两行,写的和现在的一模一样
%一般不要进行不同维度的矩阵运算(只有这个软件用这个思想)
%%
a = [1 4 7 9 6];
b = a + 4;
plot(b);%以索引为横坐标,索引是该数字在矩阵里的“第几个”
grid on;
%%
% 3.矩阵的下标
A = magic(5)
B = A(2,3)%取第二行第三个
C = A(3,:)%:取的是全部,第三行的所有
D = A(:,4)%第四列的全部
[m,n] = find(A > 20)%find 寻找,找到大于20的序号值/矩阵
%% MATLAB逻辑和流称控制
%%
% 1.if...else..end循环结构(有规律的重复)
% for 循环变量 = 初值 :步长:终值
% 执行语句1
% 执行语句2
% end
%求1的平方到五的平方的平方和
sum = 0;%赋初值
for n = 1:1:5%中间的1可以省略
sum = sum +n^2;
end
%%
% 2.for..end 循环语句,for循环中可以嵌套for
%求1到5的阶乘的和
sum = 0;
for i = 1:5
p = 1;%p阶乘的第一个数
for j =1:i%j阶乘的变换的数
p = p * j;
end
sum = sum + p;
end
%设计一个九九乘法表
for i = 1:9
for j =1:9
a(i,j) =i *j;
end
end
%%
% 3.while...end循环结构
%while 条件表达式(表达式成立,才可以进行下去)条件:<>=
% 执行语句
%end
%求1+2.....+10的和(sum可以用s表示)
sum =0;
n =1;
while n <= 10
sum =sum + n;
n = n + 1;
end
%求1到100的奇数和
sum = 0;
n = 1;
while n <= 100
sum = sum +n ;
n = n + 2;
end
%%
% 分支结构(判断真假)都有and
% 1.if...end结构
%if 条件表达式
%语句体
%%
% 2.if...else...end(否则)
% 3.switch...case...end结构(通过与某个表达式比较,比较所有可能性,都没满足otherwise)
%switch 表达式(数值或字符串)
%case 数值或则字符串1
% 语句体1;
%otherwise
%语句n;
%end
%% VII.MATLAB 基本绘图操作
%%
% 1.二维平面绘图%x,y,坐标系,要给初值
x = 0:0.01:2*pi;%(pi是Π的意思)
y = sin(x);
figure%建立一个幕布
plot(x,y,'-.r')%绘制当前的二维平面图,''中可加颜色和线的形式,不能加,
title ('y = sin(x)')%取一个标题
xlabel('x')%x上的标签
ylabel('sin(x)')%y上的标签
xlim([0 2*pi])%使没有尾巴,[]中是x坐标的值
x = 0:0.01:20;
y1 = 200*exp(-0.05*x) .*sin(x);%在y上有不同的取值
y2 = 0.8*exp(-0.5*x) .*sin(10*x);
figure
[AX,H1,H2] = plotyy(x,y1,x,y2,'plot');%绘制plotyy,必须写yy
%不会?上面的语句什么意识
set(get(AX(1),'Ylabel'),'String','Slow Decay')%Y1标签
set(get(AX(2),'Ylabel'),'String','Slow Decay')%Y2标签
xlabel('Time (\musec)')%X标签
title('Multiple Decay Rates')
set(H1,'LineStyle','--')%设置线的格式
set(H2,'LineStyle',':')
%%
% 4种常见的二维图
% 1.1线图
% plot 函数用来创建x和y 值的简单线图
x = 0:0.05:30;
y = sin(x);
plot(x,y,'LineWidth',2) %若(x,y,'LineWitdh',2)可变粗,2
xlabel("横轴坐标")
ylabel("纵轴坐标")
grid on %显示表格
axis ([0 20 -1.5 1.5]) %设置横纵坐标范围
%多组函数显示在一张图
y1 = sin(x);
y2 = cos(x);
plot(x,y1,x,y2);
axis ([0 20 -1.5 1.5]);