MATLAB知识点总结(期末速通)---数学实验

注意使用矩阵乘法和标量乘法

n=sum(x.^2+y.^2<=1);

m=sum(x.^2+y.^2<=1&y-abs(x)>=-1);

r=m/n*pi;

穷举更新最小值

function [val,x]=mengtekalieluo_qimo

rand('seed',1523);

N=1e7;

x1=1+1*rand(1,N);

x2=-2+4*rand(1,N);

val=(1+x1(1)).^3+x2(1);

x=1;

for i=1:N

    if(val>(1+x1(i))^3+x2(i))

        val=(1+x1(i))^3+x2(i);

        x=[x1(i)

            x2(i)];

    end

End//求最大值和所对应的点---只求一个位置。

function test_optim_practnonlinear3

% % 练习题3的MC法

% oldval = -inf;%局部变量,初始化为足够小的数

% s = 1;

% for i=1:1e5 %循环次数足够大

%     均匀投点

%     x1 = unifrnd(0,20);%unifrnd(a,b,m,n)产生均匀随机数

%     x2 = unifrnd(0,20);

%     x3 = unifrnd(0,20);

%     x=[x1 x2 x3];

%     val = fun(x);

%     if val > oldval & mycons(x)<=0 %比以前的函数值更大

%         oldval = val;

%         oldx   = x;%保存/更新

%     end

% end

% oldval

% oldx %近似最优解

% function c = mycons(x)

% c=[10-(2*x(1)+5*x(2)+10*x(3))

%   5*x(1)+x(2)+20*x(3)-300

%   10*x(1)^2+4*x(2)+3*x(3)^2-600];

% function  r = fun(x)

% r=20*(x(1)-1)^2+50*x(2)+40*x(3);

使用find找到符合要求的组,再用min,max

%因为是生成的同样大小的三行随机数,所以用index找到满足条件的组合即可。

N=1e6;

x1=15*rand(1,N);

x2=9*rand(1,N);

x3=fix(25*rand(1,N));

index=find(3*x1+2*x2+6*x3<=20&4*x1+5*x2+2*x3<=21);

x=x1(index);

y=x2(index);

z=x3(index);

minf=min(2*(x-1).^2+3*(y-4).^2+x.*y+(2*z-5).^2)

N=1e6;

x1 = unifrnd(0,20,1,N);

x2 = unifrnd(0,20,1,N);

x3 = unifrnd(0,20,1,N);

index=find(10-(2*x1+5*x2+10*x3)<=0&5*x1+x2+20*x3-300<=0&10*x1.^2+4*x2+3*x3.^2-600<=0);

x=x1(index);

y=x2(index);

z=x3(index);

[mmaxf,m]=max(20*(x-1).^2+50*y+40*z)

%m为最大值处的索引。

x(m)

y(m)

z(m)

param=lsqcurvefit(fun, param0, xdata, ydata)。

function f=curvefun1(coef,xdata)

f = coef(1)+coef(2)*exp(-0.02*coef(3)*xdata)% 其中coef(1)=a,coef(2)=b,coef(3)=k

 xdata = 100:100:1000;

 ydata = 1e-03*[4.54,4.99,5.35,5.65,5.90,6.10,6.26,6.39,6.50,6.59];

 x0 = [2.3,9.09,0.05];//coef的初始迭代值

 x = lsqcurvefit('curvefun1',x0,xdata,ydata)

 f=curvefun1(x,xdata)

 plot(xdata,ydata,'rp',xdata,f)

可以计算出x =0.0070   -0.0030    0.1032-----------系数

求概率:

1.用Y的概率模拟分布生成Y,再用满足条件的数目除以总数。

N=1e4;

x=normrnd(20,2,1,N);

y=rand(1,N)

for i=1:N

     if y(i)<0.2

        Y1(i)=8;

    elseif y(i)<0.5

            Y1(i)=9;

    elseif y(i)<0.9

            Y1(i)=10;

    else

          Y1(i)=11;

     End//根据概率生成N个随机数Y。

end

index=find(x+Y1<=30)

r=length(index)/N

2.只用X的分布,Y只用它的概率参与计算。

 N=1e4;

 x=normrnd(20,2,1,N);

t1=sum(x<=22);

t2=sum(x<=21);

t3=sum(x<=20);

t4=sum(x<=19);

r=0.2*t1/N+0.3*t2/N+0.4*t3/N+0.1*t4/N;

同求概率

创建数组------cell, sparse

M=cell(m,n)

创建 m n 列的元胞数组 M.

S=sparse(A)

返回 A 的稀疏存储格式矩阵 S通过挤出任何零元素将满矩阵转换为稀疏格式。如果矩阵包含许多零,将矩阵转换为稀疏存储空间可以节省内存。

ANY或ALL可以将矢量转为标量。

ezplot('x/exp(1)',[0 C 0 1])

linspace产生等差数列,(x1,x2,n),产生x1到x2之间n个

统计-----

Mean-----A 沿大小不等于 1 的第一个数组维度的元素的均值

Std-----求标准差, A 沿大小不等于 1 的第一个数组维度的元素的标准差

Var------返回 A 中沿大小不等于 1 的第一个数组维度的元素的方差

sort(a,'descend')----降序排序

sort(a,'ascend')-----升序排序

数学函数:

log---对应ln(x),

Log10对应log10(x),

 conj---返回 Z 中每个元素的复共轭, 

Mod---除后的余数(取模运算)

 Rem----返回用a除以b后的余数,rem(a,b)

Real-----返回数组 Z 中每个元素的实部。

 Imag------返回数组 Z 中每个元素的虚部。

Power----计算 A 中每个元素在 B 中对应指数的幂。A.^B===power(A,B)

pow2-----求以 2 为底的幂值并对浮点数字进行缩放.返回数组 X,其元素为 2 的 Y 次幂。

asin, acos, atan, acot----三角反函数

控制语句-----warning

符号

符号表达式-------pretty

simplify(A)----用来化简的函数---需要是符号变量。

符号计算------diff, limit, int, solve, dsolvesubs,taylor---使用符号变量

Limit(f,x,a,left/right)---在a处求极限。

Diff(f,x,n)-----求导n次

表达式化简函数simplify

vpa(s) 计算符号表达式s的数值结果

Solve解线性方程组。--------不能用字符串的形式。

syms u v a b;

eqns=[2*u+a*v==0,b*u-v==1]-----使用等式,多个等式用数组的形式。

eqns = 

s=solve(eqns,[u,v]);----表明待求的变量是什么

s.u%要去读取

ans = 

dsolve解微分方程。

字符表示:

Dy”表示对y的1阶导数,“D2y”表示对y的2阶导数

y=dsolve('Dy=(10-0.02*t)*t','y(0)=4','t')%默认---标明谁是自变量

如果不用字符的形式,方程的等号用双等号==

syms y(x)

y=dsolve(diff(y)==(50-0.01*y)*y,y(0)==4,x)

的根。 x = fzero(fun,x0)。不变号没法求。

矩阵

矩阵操作:

Diagdiag - 创建对角矩阵或获取矩阵的对角元素返回包含主对角线上向量 v 的元素的对角矩阵。

Tril-----返回矩阵 A 的下三角部分。

Triu-----返回矩阵 A 的上三角部分。

解线性方程组 Ax=b,方法:inv(A)*b, A\b

特征值、特征向量----------eig 用法: [V,D]=eig(A), d=eig(A)

矩阵的逆、行列式、秩-----inv, det, rank

删除矩阵的第三四列:

A(:,1)=[];//通过[]来删除元素

A(:,3)=[];%第一列删了,第四列就是第三列了

A=[u,v;

w,u];//维数满足要求矩阵直接拼接。

MA=M(3:9,:);//第三到九行

arr=[arr i];往数组里面增加元素。

数组变列向量A(:)

非线性方程()求根

---rootsfzero, fsolve,牛顿迭代法(切线法)

牛顿迭代法:迭代公式x=x0-f(x0)/df(x0)

f=@(x)(x-3)^2;%这样定义的函数可以直接带值进去

df=@(x)2*(x-3);

maxitr=500;

x0=1;%x0初始迭代点

tol=1e-6;%误差

for i=1:maxitr

x=x0-f(x0)/df(x0);%迭代

if(abs(x-x0)<tol)

itr=i;%实际迭代次数

break;

end

x0=x;%更新x的值。

end

x,itr

Roots:以列向量的形式返回 p 表示的多项式的根。输入 p 是一个包含 n+1 多项式系数的向量,以 xn 系数开头。0系数表示方程中不存在的中间幂。例如:p = [3 2 -2] 代表多项式 3x2+2x−2。

    r = roots(p)

%求方程的根:f(x)=2*x^3-4*x^2+x-100=0

a1 = roots([2 -4 1 -100]);roots(p)---p为各阶系数

Fsolve: x = fsolve(fun,x0)

Fzero:尝试求出 fun(x) = 0 的点 x。也需要x0,此解是 fun(x) 变号的位置 - fzero 无法求函数(例如 x^2)的根。

x = fzero(fun,x0)不变号没法求。

f = @(x)2*x.^3-4*x.^2+x-100;

[x,val]=fzero(f,1) % 在x=1附近找求f(x)的零点

[x2,val2]=fsolve(f,1)%解方程f(x)=0

feval(fun,x1,...,xM) 使用函数的名称或其句柄以及输入参数 x1,...,xM来计算函数的结果。就相当于fun(x1,……,xM)

fsolve解方程组

r=fsolve(@myobj,[1 1]);

function f=myobj(x)

f(1)=x(1).^2+x(2).^2-1

f(2)=(x(1)-1).^2+x(2).^2-1

fsolve(@myobj,[1,1])//

function f=myobj(x)//只能使用一个变量。将xy写为x(1),x(2)

f(1)=x(1).^2+x(2).^2-20;

f(2)=(x(1)-2)*x(2)+6*x(1)+x(2);

拟合

曲线拟合 ---------p=polyfit(xd,yd,n), y=polyval(p,x)

积分

数值积分 ---

矩形法(左矩形法,右矩形法,中矩形法(中间点的函数值))

trapz - 梯形数值积分梯形法(上底加下底乘以高除以2)

通过梯形法计算 Y 的近似积分(采用单位间距)

使用函数句柄

Quad---q = quad(fun,a,b)

Dblquad-----q = dblquad(fun,xmin,xmax,ymin,ymax)

 Integral----- q = integral(fun,xmin,xmax)

integral2------ q = integral2(fun,xmin,xmax,ymin,ymax)

int需要符号变量。输出结果相当于int积分后再vpa()。

quad是对句柄函数积分!!!!

注意乘除都要加点变成标量运算。

欧拉法常微分方程y¢ = f (t, y), y(a) = b. ---实质是求积分

t=linspace(0,10,200);%节点

y = zeros(size(t));%存储

y(1)=1;

h=t(2)-t(1);%步长

for j=2:200

y(j)=y(j-1)+h*(t(j-1)-2*y(j-1));%按照导数逐个累加

end

y(200)

ans = 4.7500

plot(t,y,'o')

常微分方程:ode23, ode45

[t,y] = ode23(odefun,tspan,y0), y'=f(t,y) 从 t0 到 tf 的积分,初始条件为 y0

% function exp3

% [T,Y]=ode23(@model,0:0.1:10,10)

% plot(T,Y,'o')

% Y(10)

% function r=model(t,y)

% r=0.02*(1-0.001*y)*y;

极值

一元函数极值 ----fminbnd----只能找最小值,而且需要区间范围。通常先用ezplot画图找区间。所以如果是求最大值可以在前面加一个负号。

ezplot(f,[0,9])%找出区间大概在[7,9]

ezplot(fun,[xmin,xmax])

ezplot(fun2,[xmin,xmax,ymin,ymax])

[x,y]=fminbnd(f,7,9);---------fminbnd(f,xmin,xmax)

多元函数极值 -----fminsearch(使用无导数法计算)fminsearch是在点附近迭代,所以需要输入一个初始的点。y=fminsearch(f,[x(1),x(2)]);x = fminsearch(fun,x0);---变量都用单个x

解线性规划 -----将最优化问题转为线性规划模型, 求解函数 linprog

[x,val,flag]=linprog(c,A,b,[],[],lb,ub)

解非线性规划 -----将最优化问题转为非线性规划, 求解函数 fmincon

nonlcon = @circlecon;

x = fmincon(f,x0,A,b,Aeq,beq,lb,ub,nonlcon)-----x0初始迭代点

function [c,ceq] = circlecon(x)

c = 2*x(1).^2 + 4*x(2)^2 - 1000;

ceq = [];

随机数

rand,rand(m),rand(m,n) 产生(0,1)区间均匀分布

unifrnd(a,b),unifrnd(a,b,m),unifrnd(a,b,m,n)产生区间[a,b]上均匀分

布随机数

a=randn; A=randn(m);A=randn(m,n); 产生标准正态分布随机数用法

a=normrnd(mu,sigma),A=normrnd(mu,sigma,m),

A=normrnd(mu,sigma,m,n) 产生一般正态分布随机数

利用几何概率建立模型,设计实现求解一些问题

直方图---------hist, histogram

cell,sparse,fprintf,warning,tril,triu,dblquad,intergral,integral2

fsolve,fminsearch,fmincon,unifrnd,normrnd.

 如果 A 是矩阵,则 cumsum(A) 返回包含 A 每列的累积和的矩阵

s=unifrnd(0,5,1,100)

for i=1:100

    U=cumsum(s(1:i));//逐个累加的效果。U的格式是矩阵,1*100.

end

plot(1:100,U,'.')

需要N组x(1),x(2),x(3)时,可以直接rand分配(N,3),这样每行,x(i,:)都是包含三个数字的。

sum的输出是向量、矩阵。

对于有多个维度的“矩阵”,比如m*n*l*s这样的,sum输出只是比输入少一个维度,变成n*l*s的.

所以当我们的计算是n*n的矩阵时,要求和,需要使用两次sum。

复合计算函数

compose(f, g) 返回复合函数f(g(y)),其中f=f(x),g=g(y).

s=solve([a*x+b*y==10,a*x-b*y==20],[x,y]);

solve([eqn],[x])

semilogy - 半对数图此MATLAB 函数使用 y 轴的以 10 为基数的对数刻度和 x 轴的线性刻度创建一个绘图。它绘制 Y 的列对其索引的图。

interp1 - 一维数据插值(表查找)向量 x 包含样本点,v 包含对应值 v(x)。向量 xq 包含查询点的坐标。

vq = interp1(x,v,xq)-----通过已知的点来预测未知的点的值是多少。

Fuhao.mlx

Lin.mlx-----难

mengtekalieluo

分段函数,求不同的x(i)对应不同的val(i)

save svl.mat a b t

clear

whos

load svl.mat

常用函数:min,max,sum,mean-----均值,std----标准差,var----反差

find查找

strfind找字符

hist - 直方图

找拐点——近似二阶求导。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

唐果然

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值