c语言fmin最小公倍数,matlab小函数
8种机械键盘轴体对比
本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?
(记得按字母序索引)
矩阵向量化操作
A(:)
拉成一个向量 ($a_{11},a_{21},…$),注意先列后行
repmat用途:创建由小型矩阵重复组合成的矩阵,比如各行向量相同的矩阵
例子1A = repmat(1:5, 5, 1)运行结果:
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
find用途:把满足find条件的下标揪出来. 当返回值只有一个时返回全下标,两个时则返回下标对 .
注意这里的全下标是指先数列再数行,如在3*3矩阵中,$a_{13}$的全下标为3,$a_{31}$的全下标为7.
例子1
2
3
4A = [1,-3,-4;4,3,-9];
B = find(A > 0);
C = find(mod(A, 2)==0);%揪出偶数
[r,c] = find(A > 0);
运行结果
A =
1 -3 -4
4 3 -9
B =
1
2
4
C =
2
5
r =
1
2
2
c =
1
1
2
(即(1,1),(2,1),(2,2)元素为所找元素)
reshape用途:把给定矩阵(通常是向量)按自己需要的方式(具体指行列维数)重新塑造成矩阵 .
例子1A = reshape(1:10,2,5);
运行结果:
A = 1 3 5 7 92 4 6 8 10
inv用途:矩阵求逆 .
注意:不可逆矩阵用inv时会显示inf矩阵
randn用途:生成正态分布随机矩阵
例子1A = randn(3,4);
A = 0.5377 0.8622 -0.4336 2.76941.8339 0.3188 0.3426 -1.3499
-2.2588 -1.3077 3.5784 3.0349
rand用途:生成 [0, 1] 均匀分布的矩阵
例子1A = rand(3,4);
A= 0.9572 0.1419 0.7922 0.03570.4854 0.4218 0.9595 0.8491
0.8003 0.9157 0.6557 0.9340
randi用途:rand integer,即生成指定区间的整数的均匀分布的随机矩阵
例子1A = randi([0,3], 3, 3)
A = 2 1 23 2 0
2 0 1
对矩阵元素排序1
2
3
4
5A = [5,1,7;2,8,6;9,3,4];
A1 = sort(A); %列升序
A2 = sort(A,'descend') %列降序
A3 = sort(A,2) %行升序
A4 = reshape(sort(A(:)),3,3); %全部元素排序
矩阵幂运算与矩阵函数
胞元数组
内容援引:a{k}=5, b{k}=’r’
援引:显示胞元类型,a(k)=double, b(k)=string
符号矩阵分析
A.’(转置)与A’(共轭转置)
共轭矩阵
conj(A)
det(A)
求行列式
diag(A)当A为向量,则生成矩阵 $diag(a_1,dots a_n)$;
当A为矩阵,则提取其对角元构成向量。
expm(A)
计算A的指数矩阵(将其对角化后取指数再复原)
A的最大维度大小(若A为向量,则返回长度)
length(A)
ndims(A)
返回A的维数
A所含元素总数
numel(A)
每一维大小(行*列)
size(A)
rank(A)
计算A的秩
化为下三角矩阵
tril(A)
[V, D] = eig(A)
返回特征值,特征向量 (默认显示所有特征值和特征向量,特征值的顺序是乱的)
eigs(A)1
2
3
4
5
6
7
8rng default;
A = rand(4);
[~,D2] = eigs(A,3,'lm'); %绝对值最大的3个特征值
[~,D3] = eigs(A,3,'sm'); %绝对值最小的3个特征值
[~,D4] = eigs(A,3,'lr'); %实部最大的3个特征值
[~,D4] = eigs(A,3,'sr'); %实部最小的3个特征值
[~,D4] = eigs(A,3,'li'); %虚部最大的3个特征值
[~,D4] = eigs(A,3,'si'); %虚部最小的3个特征值
poly(A)
返回方阵 A 的特征多项式!
[V, J] = jordan(A)
返回特征值,jordan标准形(等式左边为一个返回值时,返回前面那一个,即特征值)
满足 $V^{-1}AV=J$
[U, S, V] = svd(A)
奇异值分解,$S=U^*AV$
[L, U] = lu(A)
LU分解
[Q, R] = qr(A)
QR分解
求雅可比矩阵
jacobian(f, v) 求函数(向量) f 关于变量(向量)v 的雅可比矩阵 .
注意!这里的 f, v 一般不是一个变量,而是变量向量,示例如下:1
2syms x y z
jacobian([x*y*z, y^2, x + z], [x, y, z])
稀疏矩阵
生成n阶单位稀疏矩阵
speye(n)
基于三元组表示法将大矩阵转化为稀疏矩阵
B=sparse(A)
翻转矩阵
上下翻转(以中间行为镜子,上下对应的行交换位置)
flipud(A) (即flip up down)
左右翻转(以中间列为镜子,左右对应的列交换位置)
fliplr(A) (即flip left right)
逆时针旋转 $90^o$的整数倍
rot(A, 2) 即旋转两个90°
方程(组)符号解
线性方程组可直接Ab
解线性方程组 AX=b
一般方程组:solve
solve(eqn_1,…eqn_k, x, y)
前面是符号表达式的方程(若为仅为表达式则默认等于解Eqn=0),后面是希望解出来的变量
代码示例:
解方程 $x^2+y^2=1,xy=2$1
2
3
4syms x y;%需要定义符号变量
eqn1 = x^2+y^2==1;
eqn2 = x*y==2;
[x,y] = solve(eqn1,eqn2,x,y);
两种调用方式:solve(f == 1, x)
solve(f - 1, x)
多项式求根
求 $x^3+4x+5=0$ 的根:1
2
3
4
5
6
7
8p = [1,0,4,5];
R = roots(p);
%若需要求实根
syms x real
f = x^3+4*x+5;
R1 = solve(f);
%也可以
R_real = R(imag(R==0))
绘图
逐点绘图
meshgrid用途:生成一组配对的(x, y)点,供绘图采样用. (也可以生成三维点)
相当于x轴方向划几条线,y轴方向画几条线,以交点为采样点
例子:1[X,Y] = meshgrid(1:3,10:15);
X =
1 2 3
1 2 3
1 2 3
1 2 3
1 2 3
1 2 3
Y =
10 10 10
11 11 11
12 12 12
13 13 13
14 14 14
15 15 15
plot
符号绘图
各种例子详见第四课课件
ez 系列可以字符串绘图也可以符号表达式绘图;f 系列不支持字符串,只能符号表达式绘图。
二维平面(符号)绘图:ezplot, fplot, ezpolar
三维曲线(符号)绘图:ezplot3
空间曲面(符号)绘图:ezsurf(c), ezmesh(c), fsurf(c)。 加 ‘c’ 表示底面加等位线
fplot VS ezplot : fplot无bug;ezplot 可能有 bug。但是后者有自动title, 坐标范围会自动调整,前者默认[-5,5]。
ezplot(y)
ezplot(f(x,y), [a, b], [c, d]) %隐函数 $f(x,y)=0$
ezplot(x(t), y(t) , [a, b])
ezmesh , ezsurf, fsurf 大致相同,且都画不了隐函数
ezmesh(z(x, y), [a, b, c, d])
ezmesh(z(x, y), [a, b]) 注意是 $x,yin[a,b]$
ezmesh(x(s, t), y(s, t), z(s, t))
plot3(x(t), y(t), z(t), ‘b-‘)
数值微分
diff输入:一个 n 维列向量(即函数值的n个采样点)
输出:一个 n-1 维列向量(由于使用向前差分,所以得到的差值点的列向量中,少了最后那个点的导数)
原理:向前差分。即 diff(y) 等价于 y(2:end) - y(1:end-1)
例子1
2
3
4
5d = pi/100; %选用的步长最好整除区间长度,否则最后那个点有点尴尬
x = 0:d:pi;
y = sin(x);
dx = diff(y);
dydx = dx/d; %得到导数值列向量
gradient输入:与 diff 完全一样
输出:一个 n 维列向量(第一个点用向前差分,最后一个用向后差分,其余点用中心差分)
原理:中心差分。gradient(y) 等价于 $frac{ y(3:end) - y(1:end-2)}{2}$
例子1
2
3
4
5d = pi/100; %选用的步长最好整除区间长度,否则最后那个点有点尴尬
x = 0:d:pi;
y = sin(x);
dx = gradient(y);
dydx = dx/d; %得到导数值列向量
符号微分
diff
diff(f, v, n) 计算 f 关于 v 的n阶导数.
符号极限
limit(符号表达式,极限变量,极限值,’left’) : 左极限
数值求和
sum输入:矩阵或行(列)向量
输出:若输入为行(列)向量,则输出为向量元素之和;若输入为矩阵,则输出为各列求和得到的的行向量(sum(A, 1)),或各行求和得到的的列向量(sum(A, 2))
符号求和
symsumsymsum(符号表达式(求和通项),求和变量,下界,上界)
代码示例:
计算 $Sigma_{k=0}^{n} a^kb^{n-k}$1
2
3
4syms a b n k;
x = a^n;
y = b^n;
s = symsum(subs(x,n,k)*subs(y,n,n-k),k,0,n);%经常要结合subs使用
数值积分
常用方法及适用场景:梯形公式:
辛普森公式:
蒙特卡洛法:高维积分(概率算法,精度较低,但复杂度低)
trapz输入:trapz(y) ,y 是函数值采样点的行(列)向量;trapz(x, y),多加的 x 是对应 y 的自变量采样点的向量
输出:前者输出$Sigma[ f(x_i)+f(x_{i+1}) ]$的结果(第一个和最后一个只加了一次);后者直接输出积分结果
原理:梯形积分
代码示例:1
2
3
4d = pi/1e5;
t = 0:d:pi; %1e5+1个采样点
yt = t./sin(t).^3;
yt_int = trapz(t,y); % 或者trapz(y)*d
integral
integral (fun, xmin, xmax)1
2
3
4
5
6fx=@(x)exp(-abs(x)).*abs(sin(x));
a1=integral(f,-5.*pi,10.*pi,'RelTol',1e-6,'AbsTol',1e-9);%相对误差为默认的10^(-6)
a2=integral(f,-5.*pi,10.*pi,'RelTol',1e-8,'AbsTol',1e-9);%相对误差为10^(-8)
a3=integral(f,-5.*pi,10.*pi,'RelTol',1e-10,'AbsTol',1e-9);%相对误差为10^(-10)输入:匿名函数句柄,积分下限及上限(支持广义积分),(可选)相对误差控制,绝对误差控制
输出:数值积分值
原理:商业机密,不可见
数值微分方程(差分方程)
符号微分方程
dsolve
计算定解问题 $xy^{‘’}-3y’=x^2, y(1)=y(5)=0 .$1
2
3
4syms y(x)
eqn = diff(y,x,2)*x-3*diff(y,x)==x^2;
cond = [y(1)==0,y(5)==0];
solu = dsolve(eqn,cond)
上面的例子中,eqn 也可以是一个方程组 [eq1, eq2, …]
三大变换
傅里叶变换fourier(f(t), t, s)
ifourier(F(s), s, t)
拉普拉斯变换
用法与傅里叶变换一致
Z变换Z变换定义:$F(z)=Sigma_{n=0}^{infin}f(n)z^{-n}$
Z变换的逆变换定义:$f(z)=int_Gamma F(z)z^{n-1}dz$
意义:描述了离散序列 f(n) 的复频率域信息
用途:可以将差分方程转化为代数方程(对应于傅里叶,拉普拉斯变换将微分方程转化为代数方程)
代码示例:(Z变换求离散卷积)1
2
3
4
5
6syms a b n k w z
assume(a~=b);assumeAlso(a~=0);assumeAlso(b~=0);
%a 与 与 b 不为 0 的显示更加简练(其实 a 或 或 b 为 为 0 也应该对的,这是 MATLAB 处理不到位)
X=ztrans(a^k,k,z);
H=ztrans(b^k,k,z);
w=iztrans(H*X,z,k);
Taylor展开
taylor( f ) :返回 f 在 0 点的 5 阶麦克劳林展开。
taylor( f, x, a, ‘Order’, 10):返回 f 在 x = a 的 9 阶 Taylor 展开 。
注意!需要先定义符号变量 syms
函数极值
fminbnd
[x, fval, exitflag] = fminbnd(fun, x1, x2)
功能:求一元函数 fun 在区间[x1, x2] 内的极小值
参数:x 为极小值点;fval为极小值;exitflag>0 为找到极小值标志
fminsearch
[x, fval, exitflag]=fminsearch(fun, x0)
功能:求多元函数从 x0 出发的局部极小值
注意!多元函数的输入要用向量 x(1), x(2) 而不是 x, y,如以下代码:1
2
3
4
5
6ff=@(x)(100*(x(2)-x(1)^2)^2+(1-x(1))^2);
% 函数句柄 ,@(x)的 x 为输入的向量, 利用两个元素分别进行计算
syms x y,ezsurfc(ff([x1,x2]),[-2,2,-2,2]) % 将横纵坐标x1,x2 认定为
ff 二维自定义变量,即可进行surfc
x0=[-5,-2,2,5;-5,-2,2,5]; % 设立 4 种不同的搜索起点 ( 每一种为列向量
[sx,sfval,sexit,soutput]=fminsearch(ff,x0)
结果:1
2
3
4
5
6
7
8
9
10
11% 收敛到了四种不同的解 , 但仅有第一个x=1,y=1是正确的
sx = 0.99998 -0.68971 0.41507 8.0886
0.99997 -1.9168 4.9643 7.8004
%sfval 显示所有极小值中最小的一个
sfval = 2.4112e-10
sexit = 1
soutput =
iterations: 384
funcCount: 615
algorithm: 'Nelder-Mead simplex direct search'
message: '优化已终止:…’
fminunc
功能,用法与fminsearch 相同,效果通常好于后者
最速梯度下降法
【例】用梯度下降法求
c语言fmin最小公倍数,matlab小函数相关推荐
- matlab把向量转化为矩阵,MATLAB小函数:将列向量转化为0-1矩阵
MATLAB小函数:将列向量转化为0-1矩阵 将列向量转化为0-1矩阵,例如 A = 1 2 1 5 3 4 1 4 3 转换为: B = 1 0 0 0 0 0 1 0 0 0 1 0 0 0 0 ...
- c语言fmin最小公倍数,已知函式f(x)=2分之1cos的平方x加2分之根号3sinxcosx加1,X属于R 。求在[π/12,π/4]上的最大最小值...
已知函式f(x)=2分之1cos的平方x加2分之根号3sinxcosx加1,X属于R .求在[π/12,π/4]上的最大最小值以下文字资料是由(历史新知网www.lishixinzhi.com)小编为 ...
- c语言不用死等的延时函数,matlab延时函数怎么写
1. c语言延时函数delay,怎么算延时 下面是delay 函延迟函数里执行的都是空语句,也就是说通过循环执行空语句来达到延迟的目的.每执行一条语句,即使是空语句都要耗费电脑一些处理时间的,就是因为 ...
- C语言_公倍数、最小公倍数_调用函数求最大公因数最小公倍数
公倍数:两个或两个以自然数共同的倍数. 最小公倍数:两数(多个数)相乘除以两数(多个数)的最大公约数. //最小公倍数 #include<stdio.h> int main() {int ...
- 如何将matlab代码转为C语言(2)--在C++中调用matlab的函数
如何将matlab代码转为C语言(2)–在C++中调用matlab的函数 在上一条博文中提供了一种直接在matlab操作中的方法,下面提供一种新的调用方法,即在C++中调用matlab中的dll文件. ...
- Matlab mod函数 对应C语言 函数
Matlab mod函数 对应C语言 函数 2010-09-10 23:43 Matlab中的mod函数,不同于C语言中的"%",在C中没有专门对应的函数. Matlab的mod函 ...
- 编写C语言的最简单小程序Hello world和函数使用
编写C语言的最简单小程序Hello world 一.示例一 1.编写demo.c程序 #include<stdio.h> int main() {printf("Hello wo ...
- C语言设计函数求最大公约数,C语言程序设计课程设计--编写函数求取两个整数m,n的最大公约数和最小公倍数.doc_在线文库www.lddoc.cn...
C语言程序设计课程设计--编写函数,求取两个整数m,n的最大公约数和最小公倍数.doc C语言程序设计课程设计C语言程序设计课程设计评语考勤(10)纪律(10)过程(40)设计报告(30)答辩(10) ...
- xml文件c语言读取函数,读写xml文件的2个小函数
#region 读写xml文件的2个小函数,2005 4 2 by hyc public void SetXmlFileValue(string xmlPath,string AppKey,strin ...
最新文章
- 劣质代码评析——《写给大家看的C语言书(第2版)》附录B之21点程序(一)
- 在ThoughtWorks工作两个多月的总结
- python typing typescript_将 python 数据转化为 TypeScript 格式
- Kinect开发笔记之四检测并调试Kinect设备
- SpringMVC在使用Jackson2时关于日期类型格式化的问题
- python 循环播放音乐_python gstreamer实现视频快进/快退/循环播放功能
- 开启IIS的WebGarden、WebFarm和StateServer之旅
- 个人整理的常用python脚本【很好用】
- VS2013 Qt Unable to find a Qt Build 及 LINK1112错误
- oracle数据库应用中实现汉字“同音”查询(转)
- 李宏毅20212022机器学习
- 代码版本控制用SVN还是Git好?
- wei.getA()
- semantic_slam环境配置
- 【第十四篇】Flowable事件-错误事件
- 【数据挖掘·总复习】第三章-关联规则挖掘||Apriori||详细整理||知识点+例题||考点有
- 科学,宗教和信仰,以及神
- React18升级和React18新特性
- 2008文件服务器没有写入权限,2008文件服务器权限设置
- 获取Android 设备的WIFI IPv4地址