Inf 为无穷大量
sum函数优先加列
sum(A,2) 是每一行相加,最后输出为一个列向量,2 的含义是二维的意思, 那么1就是默认第一列相加,那么输出的就是行向量。
./ .* .\
对于以上符号, 在实数,单个数的运算之中是没有什么区别的 ,但是在向量和矩阵之间就有了一些区别。比如说, 两个相同的行向量相乘是不可行的, 但是使用了.*就是里面的元素进行相乘, 就可以了, 还有‘/’ ‘\’ ,想象成分式的形式就可以了。
---------------------关于转置的使用-----------------------------------------
matlab默认的矩阵转置是共轭转置,是对复数进行操作的。
求共轭转置矩阵的指令为A’
非共轭转置矩阵的指令为A.‘,相当于conj(A’),即转置。
当A为实数矩阵时,A’和A.‘没有区别,但当A是复数矩阵时,就会有区别,A.‘相当于conj(A’)。一般来说,没有特殊的要求的话,对复数的转置操作都是用A’,
即共轭转置,因为共轭转置更加自然,对于复数做内积,是必须要共轭转置的。
find函数的用法: 查找非零元素的索引和值
把索引求出来, 再套回原来的矩阵 或者向量。 这样的话, 我们的操作空间就是在find函数上添加一些什么样的条件,最后
套回去取值就OK了。
rem函数,
r = rem(a,b) 返回 a 除以 b 后的余数,其中 a 是被除数,b 是除数。此函数通常称为求余运算。
lower()和 upper()函数和Python的用法一样! 但是要输入字符串字母才可以。
input()函数 规定使用字符串方法: input('Please: ', ‘s’)
fix() 函数 返回一个小于输入值的整数!!!
num2cell()可以将数值结构转化为空间结构, num2cell(1:3) ==>> [1] [2] [3]
num2str 将数字转换为字符数组
strcat 函数 水平串联字符串 s = strcat(s1,…,sN) 水平串联 s1,…,sN。每个输入参数都可以是字符数组、字符向量元胞数组或字符串数组. 动手试一试, 比较简单。就是简单的将字符串拼接到一起,输入指定的字符串即可,但是若是直接输入数字,会输出制表符(空格),需要用字符串的形式
int2str 顾名思义, 将整数转化为字符串。和上面的strcat 结合,能够添加一些标号,这在图论中有所应用。
建议函数文件名与函数名统一,倘若不相同, 则matlab自动忽略函数名, 重视与函数文件名对比学习, 与Python不同的是, return语句在matlab中是自动结束函数的执行,这一点需要注意!!它会自动返回。
函数的调用格式:[输出实参表]= 函数名(一般等于文件名)(输入实参表)!!!!!这里实参表可以与定义函数的实参表不同,意思就是在定义函数哪里先定义好空间, 这样在调用时
就可以直接调了!
在定义函数时 ,有:
function 输出形参表=函数名(输入形参表)
这里就涉及到一个理解的问题了, 加上一句, 当我们想要得到的数据(最终结果)多于一个时, ==》》[a,b,c]=f(x)
可以这样理解, 变量名字虽然可以不一样, 但是最后还是和输出形参表等价的。且需要注意, 形参形参, 是需要参与到后面执行的语句之中去的,
即要到群众中去,参考:
function [s,c]=f_oral(r) % r作为形参是调用的输入选项
s =pi*(r^2);
c=2*pi*r; %%% 这里s,c 都要下沉到下面的计算公式中去, 最后的实参作为结果可以与形参不同, 但是这里还是要一致的。
%return
函数调用时输出的结果即将函数调用后赋给的f,即使定义函数时下沉到函数体中的变量。
匿名函数!!!
定义:函数句柄变量=@(匿名函数输入参数)匿名函数表达式。
f=@(x,y)x2+y2
f(3,4)
:::也可以对已有的函数进行操作, 加上@符号后, 属于是把原来已有的函数给操控了。
##%%%@@递归调用, 调用自己可还行。
直接递归。 间接递归: 通过一个媒介函数,在媒介函数中在调用自己。
在命令窗口中 , 也需要定义全局变量。
-------------------我是一条关键的分界线---------------------------------------------------------------------
实战基础与练习与注意事项:
模型整理: ①线性规划模型(Linear Programming):
对于决策变量的理解:从因果关系上来看, 果对应的是决策变量, 即各种原材料, 人工的准备是因 ,最后产出的是果,
这里在现实中有一个时间的跨度, 比如说投资时要考虑一系列影响收益的因素,风险率啊, 收益率啊,等等 ,最后这些都妥了之后
就可以进行资金的投资了, 那么这里投资的不同产品的资产的量就是决策变量, 这是从所谓的因果关系上得到来的结果。
还可以这样理解, 决策变量即是决定变量, 是老大, 一切是为了得到它们, 一切的准备是为了得到这个,就拿产量来举例即可。
并且,产量有了,那么这就能够决定一些准备的材料了, 总之, 决策变量是老大!!
一般步骤:
:决策变量,问题中要解决的未知量;目标函数, 是关于决策变量的函数,由决策变量组成,我们的目的一般是求它的最大值, 最小值;
约束条件:不等式。
MARLAB化:
方法:[x, fval] = linprog(f, A, b) %% 先添加两个约束矩阵的两头。A是约束矩阵, b是列向量。还有f作为决策变量的伴随值,同样作为列向量添加, matlab
会自动转置为行向量和决策变量相乘。 x返回决策变量 ,fval返回最优值。
[x,fval] = linprog(f,A, b, Aeq,Beq) 有就添加, 等式约束矩阵的两头!
% 若还有,在加,具体到时候再看
[x,fval] = linprog(f, A,b ,Aeq, Beq, lb, ub);
总结来说就是 前三个是必须的 , 后面的视情况而定 。
当我们使用[}放置多个约束条件时 ,一定都是同向小于某个数, 不可以一个大于一个小于, 但是单独放置应该可以吧?
------------------------------plot 函数----------------------------------------
title 函数中 Latex 语法:
\geq \leq 大于等于,小于等于, \bf \it \rm 加粗, 倾斜 正体
一般latex语言要加上 {} 符号才行。
x1 x2 > X_{1}{\geq}X_{2}
α=>??
β=> \beta
w====>\omega
pi -----> \pi
--------其他辅助绘图工具--------------------
grid on off 加不加网格线
box on off 加不加边框
axis 自定义坐标轴, 前四个选项是二维取消的xy 的最小最大值的范围。
axis([-0.1,0.1,1,1]);
subplot hold on 两个函数 的用法;
前者是分割, 实际意义更大, 后者是保持上一个图形不被刷新。
找到转折点之后, 我们想要得到具体的投资的金额, 那么就需要用到find()函数了, 前置知识已经讲过了,那么从已经设定好的X中抽取我们需要的最优的x的值, 那么做到这一点就必须在脑子里对X矩阵的形状有大致了解, 从纸上画一下就好
X=[]
xx=sol.x;
X=[X;xx'];
易知sol.x默认是列向量, 那么对xx取转置就好了, 然后灵性的在X中加上一个; 符号, 那么我们可以知道X矩阵是如何生成的了 ,它是一行一行添加的, 每一次的循环都把xx的值添加到了这个矩阵之中。
有了这些知识, 再配合find()函数就可以取出来需要的值了。
算是Dijkstra算法的核心函数, shortestpath()函数, 其作用是
两个单一节点之间的最短路径
P = shortestpath(G,s,t) 计算从源节点 s 处开始到目标节点 t 处结束的最短路径。如果图进行了加权(即 G.Edges 包含变量 Weight),则这些权重用作沿图中各边的距离。否则,所有边距离都视为 1。
[P,d] = shortestpath(___) 还使用上述语法中的任何输入参数返回最短路径的长度 d。这是我们常常使用的调用函数的形式。
s= cellstr(strcat('v',int2str([1:11]')));
G= graph(a,s,'Upper');
[p,d] = shortestpath(G,1,11);
h = plot(G, 'EdgeLabel',G.Edges.Weight); % 绘制无向图
% 突出highlight最短路径
highlight(h,p,'EdgeColor','r','LineWidth',2)
其中highlight函数用时自行查阅即可,十分简单,个人感觉掌握这一种使用方法就可以了,毕竟只是完成求解之后的辅助。而plot函数中的一些参数也就照葫芦画瓢,很容易猜测G.Edges.Weight就是突出无向图的权重,而前面的EdgeLabel就是类似python字典中 的键值对了,前面是属性后面是值或者具体的操作。