欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Matlab学习笔记(4)——微积分及概率论相关函数讲解

程序员文章站 2024-03-24 23:05:46
...

Matlab学习笔记(4)——微积分及概率论相关函数讲解

练习一—绘制如下图形
Matlab学习笔记(4)——微积分及概率论相关函数讲解
参考实现:

a=[20 -7 5 10];%创建多项式系数矩阵a
b=[0 4 12 -3]; %创建多项式系数矩阵b
c=conv(a,b);   %对a、b求卷积,得到多项式系数相乘的矩阵
d=polyder(c);  %对多项式求微分
x=-2:0.01:1;
y=polyval(c,x); %多项式计算
f=polyval(d,x);  %多项式计算
plot(x,f,'r',x,y,'--','LineWidth',2);
xlabel('x');
ylabel('f(x)');
set(gca,'FontSize',14);

相关知识点:
1.conv():卷积和多项式乘法

w = conv(u,v) ;%返回向量 u 和 v 的卷积。如果 u 和 v 是多项式系数的向量,对其卷
%积与将这两个多项式相乘等效
w = conv(u,v,shape);%返回如 shape 指定的卷积的分段。例如,conv(u,v,'same') 
%仅返回与 u 等大小的卷积的中心部分,而 conv(u,v,'valid') 仅返回计算的没有补零边
%缘的卷积部分

2.polyder():多项式微分

k = polyder(p);%返回 p 中的系数表示的多项式的导数
k = polyder(a,b);%返回多项式 a 和 b 的乘积的导数

3.polyval():多项式计算

y = polyval(p,x);%计算多项式 p 在 x 的每个点处的值。参数 p 是长度为 n+1 的向
%量,其元素是 n 次多项式的系数(降幂排序

执行效果:
Matlab学习笔记(4)——微积分及概率论相关函数讲解
练习二—做出两点的差
Matlab学习笔记(4)——微积分及概率论相关函数讲解
程序实现:

x=[1 2];
y=[5 7];
delta=diff(y)/diff(x);

相关知识点:
1.diff():

Y = diff(X);%计算沿大小不等于 1 的第一个数组维度的 X 相邻元素之间的差分:
%如果 X 是长度为 m 的向量,则 Y = diff(X) 返回长度为 m-1 的向量。Y 的元素是 X %相邻元素之间的差分。
%Y = [X(2)-X(1) X(3)-X(2) ... X(m)-X(m-1)]
%如果 X 是不为空的非向量 p×m 矩阵,则 Y = diff(X) 返回大小为 (p-1)×m 的矩阵,
%其元素是 X 的行之间的差分。
%Y = [X(2,:)-X(1,:); X(3,:)-X(2,:); ... X(p,:)-X(p-1,:)]
%如果 X 是 0×0 的空矩阵,则 Y = diff(X) 返回 0×0 的空矩阵。
Y = diff(X,n);%通过递归应用 diff(X) 运算符 n 次来计算第 n 个差分。在实际操作
%中,这表示 diff(X,2)diff(diff(X)) 相同。
Y = diff(X,n,dim);%是沿 dim 指定的维计算的第 n 个差分。dim 输入是一个正整数标量

执行效果:
Matlab学习笔记(4)——微积分及概率论相关函数讲解
练习三—画出以下图形
Matlab学习笔记(4)——微积分及概率论相关函数讲解
参考实现:

clc;
clear;
x1=0:0.1:2*pi;
x2=0:0.01:2*pi;
x3=0:0.001:2*pi;
y=exp(-x1).*sin(x1.^2/2);
y1=exp(-x2).*sin(x2.^2/2);
y2=exp(-x3).*sin(x3.^2/2);
% y3=exp(-(x+0.001)).*sin((x+0.001).^2/2);
d1=diff(y)./diff(x1);
d2=diff(y1)./diff(x2);
d3=diff(y2)./diff(x3);
plot(x1(1:end-1),d1,x2(1:end-1),d2,x3(1:end-1),d3);
legend('h=0.1','h=0.01','h=0.001',1);

执行效果:
Matlab学习笔记(4)——微积分及概率论相关函数讲解
练习四—代数解下列方程并求逆
Matlab学习笔记(4)——微积分及概率论相关函数讲解
参考程序:

clc;
clear;
syms x a b r y d c;
z=(x-a).^2+(y-b).^2-r.^2;
solve(z,x),%解方程
whos ans;
g=[a,b;c,d];
inv(g),%求逆

相关知识点:
1.solve():求解优化问题或方程问题

sol = solve(prob);%求解优化问题或方程问题 prob。
sol = solve(prob,x0);%从点 x0 开始求解 prob。
示例
除了上述语法中的输入参数之外,sol = solve(___,Name,Value) 还使用一个或多个名
称-值对组参数修正求解过程。
[sol,fval] = solve(___);%还使用上述语法中的任何输入参数返回在解处的目标函数值。

2.inv():矩阵求逆

Y = inv(X);%计算方阵 X 的 逆矩阵

执行效果:
Matlab学习笔记(4)——微积分及概率论相关函数讲解
练习五—迭代法求方程根
Matlab学习笔记(4)——微积分及概率论相关函数讲解
参考程序:

F=@(x) ([2*x(1)-x(2)-exp(-x(1));-x(1)+2*x(2)-exp(-x(2))]);
x0=[-5;-5];
fsolve(F,x0),
%F=@(x) ([x(1)-x(2);x(1)+x(2)-2]);
%x0=[-5;-5];
%fsolve(F,x0),

相关知识点:
aaa@qq.com:函数句柄

.什么是函数句柄?
函数句柄是一种存储指向函数的关联关系的 MATLAB® 数据类型。间接调用函数使您在调用该函数时无需考虑调用位置。函数句柄的典型用法包括:
将一个函数传递到另一个函数(通常称为复合函数)。例如,将函数传递到 integral 和 fzero 等积分和优化函数。
指定回调函数(例如,响应 UI 事件或与数据采集硬件交互的回调)。
构造以内联方式定义而非存储在程序文件(匿名函数)中的函数的句柄。
从主函数外调用局部函数。
您可以使用 isa(h,'function_handle') 来查看变量 h 是否为函数句柄。

二.创建函数句柄
通过在函数名称前添加一个 @ 符号来为函数创建句柄。例如,如果您有一个名为 myfunction 的函数,请按如下所示创建一个名为 f 的句柄:
f = @myfunction;
使用句柄调用函数的方式与直接调用函数一样。例如,假设您有一个名为 computeSquare 的函数,该函数定义为:
function y = computeSquare(x)
y = x.^2;
end
创建句柄并调用该函数以计算 4 的平方。
f = @computeSquare;
a = 4;
b = f(a).匿名函数
您可以创建指向匿名函数的句柄。匿名函数是基于单行表达式的 MATLAB 函数,不需要程序文件。构造指向匿名函数的句柄,方法是定义 anonymous_function 函数主体,以及指向匿名函数 arglist 的以逗号分隔的输入参数列表。语法为:
h = @(arglist)anonymous_function
例如,创建一个指向用于计算平方数的匿名函数的句柄 sqr,并使用其句柄调用该匿名函数。
sqr = @(n) n.^2;
x = sqr(3)

2.fsolve():对非线性方程组求解

x = fsolve(fun,x0);%从 x0 开始,尝试求解方程 fun(x) = 0(由零组成的数组)。
x = fsolve(fun,x0,options);%使用 options 中指定的优化选项求解方程。使用 
%optimoptions 可设置这些选项。
x = fsolve(problem);%求解 problem,其中 problem 是一个结构体,如输入参数中所
%述。通过从 Optimization 工具中导出问题来创建 problem 结构体,如导出您的工作中
%所述。

程序效果:
Matlab学习笔记(4)——微积分及概率论相关函数讲解
练习6——计算积分
Matlab学习笔记(4)——微积分及概率论相关函数讲解
程序参考:

clc;
clear all;
syms x;
y=x.^2*exp(x);
z=int(y),%求y的不定积分,常数项C默认为0
z=int(y)-subs(z,x,0),%subs()求常数项C,利用z(0)=0
k=(x.^2-x+1)./(x+3);
g=int(k,[0 10]),%010的定积分

相关知识点:
1.syms:定义代数变量

syms x;%定义一个名为x的代数变量

2.int():积分函数

F = int(expr);%默认求expr函数关于代数x的不定积分,常数项C默认为0
F = int(expr,var);%求expr函数关于代数var的不定积分
F = int(expr,a,b);%求当积分上限为b,积分下限为a的expr函数关于变量x的定积分,
%int(expr,[a,b])等效于int(expr,a,b)
F = int(expr,var,a,b);%求当积分上限为b,积分下限为a的expr函数关于变量var的定积分,
%int(expr,var,[a,b])等效于int(expr,var,a,b)

3.subs():替代函数

z=subs(s,old,new);%将s函数中old的值替换成new,从而得到z;returns a copy of s, 
%replacing all occurrences of old with new, and then evaluates s.

程序效果:
Matlab学习笔记(4)——微积分及概率论相关函数讲解
4.roots():求多项式的根

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

Matlab学习笔记(4)——微积分及概率论相关函数讲解
练习7—回归方程线性拟合
Matlab学习笔记(4)——微积分及概率论相关函数讲解
参考程序:

clear;
y=[0.025 0.035 0.050 0.060 0.080];
x=[20 30 40 50 60];
b=polyfit(x,y,1),
k=0:0.1:60;
z=polyval(b,k);
hold on;
plot(k,z);
plot(x,y,'.');
hold off;

相关知识点:
1.polyfit():多项式曲线拟合

p = polyfit(x,y,n);%返回次数为 n 的多项式 p(x) 的系数,该阶数是 y 中数据的最佳
%拟合(在最小二乘方式中)。p 中的系数按降幂排列,p 的长度为 n+1
%p(x)=p1*x^n+p2*x^n−1+...+pn*x+pn+1

程序执行效果:
Matlab学习笔记(4)——微积分及概率论相关函数讲解

内插相关函数

Matlab学习笔记(4)——微积分及概率论相关函数讲解
Matlab学习笔记(4)——微积分及概率论相关函数讲解
Matlab学习笔记(4)——微积分及概率论相关函数讲解
Matlab学习笔记(4)——微积分及概率论相关函数讲解
Matlab学习笔记(4)——微积分及概率论相关函数讲解
Matlab学习笔记(4)——微积分及概率论相关函数讲解

统计学相关知识

Matlab学习笔记(4)——微积分及概率论相关函数讲解
Matlab学习笔记(4)——微积分及概率论相关函数讲解
常见统计学概念:1.mean:平均值;2.median:中位数;3.mode:众数;4.prctile:百分位数;5.max:最大值;6.min:最小值;7.std:标准差;8.var:变量

常见绘制图形函数

Matlab学习笔记(4)——微积分及概率论相关函数讲解
1.bar():条形图

bar(y);%创建一个条形图,y 中的每个元素对应一个条形。如果 y 是 m×n 矩阵,则 bar 
%创建每组包含 n 个条形的 m 个组。
bar(x,y);%在 x 指定的位置绘制条形。

2.area():填充区二维绘图

%区域图将 Y 中的元素显示为一个或多个曲线并填充每个曲线下方的区域。如果 Y 为矩
%阵,则曲线堆叠在一起,显示每行元素占每个 x 区间的曲线总高度的相对量。

area(Y);%绘制向量 Y 或将矩阵 Y 中每一列作为单独曲线绘制并堆叠显示。x 轴自动缩放
%1:size(Y,1)。Y 中的值可以是数值或持续时间值。

area(X,Y);%绘制 Y 对 X 的图,并填充 0 和 Y 之间的区域。X 的值可以是数值、日期
%时间、持续时间或分类值。
%如果 Y 是向量,则将 X 指定为由递增值组成的向量,其长度等于 Y。如果 X 的值不增
加,则 area 将在绘制之前对值进行排序。
%如果 Y 是矩阵,则将 X 指定为由递增值组成的向量,其长度等于 Y 的行数。area 将 Y 
的列绘制为填充区域。对于每个 X,最终结果是 Y 行的相应值的和。您还可以将 X 指定为
大小等于 Y 的矩阵。为了避免 X 为矩阵时出现意外输出,请将 X 的列指定为重复列

3.stem():绘制离散序列数据

stem(Y);%将数据序列 Y 绘制为从沿 x 轴的基线延伸的针状图。各个数据值由终止每个针
%状图的圆指示。
%如果 Y 是向量,x 轴的刻度范围是从 1length(Y)%如果 Y 是矩阵,则 stem 将根据相同的 x 值绘制行中的所有元素,并且 x 轴的刻度范
%围是从 1 至 Y 中的行数。
如果 Y 是矩阵,则 stem 将根据相同的 x 值绘制行中的所有元素,并且 x 轴的刻度范围是从 1 至 Y 中的行数。

stem(X,Y);%在 X 指定的值的位置绘制数据序列 Y。X 和 Y 输入必须是大小相同的向量或
%矩阵。另外,X 可以是行或列向量,Y 必须是包含 length(X) 行的矩阵。
%如果 X 和 Y 都是向量,则 stem 将根据 X 中的对应项绘制 Y 中的各项。
%如果 X 是向量,Y 是矩阵,则 stem 将根据 X 指定的值集绘制 Y 的每列,这样 Y 的一
行中的所有元素都是根据相同的值而绘制。
%如果 X 和 Y 都是矩阵,则 stem 将根据 X 的对应列绘制 Y 的列。

4.boxplot():用箱线图可视化汇总统计量

boxplot(x);%创建 x 中数据的箱线图。如果 x 是向量,boxplot 绘制一个箱子。如果 x 
%是矩阵,boxplot 为 x 的每列绘制一个箱子。
%在每个箱子上,中心标记表示中位数,箱子的底边和顶边分别表示第 25 个和 75 个百分
%位数。须线会延伸到不是离群值的最远端数据点,离群值会以 '+' 符号单独绘制。
boxplot(x,g);%使用 g 中包含的一个或多个分组变量创建箱线图。boxplot 为具有相同
%的一个或多个 g 值的各组 x 值创建一个单独的箱子

Matlab学习笔记(4)——微积分及概率论相关函数讲解
Matlab学习笔记(4)——微积分及概率论相关函数讲解

假设检验

Matlab学习笔记(4)——微积分及概率论相关函数讲解
Matlab学习笔记(4)——微积分及概率论相关函数讲解
Matlab学习笔记(4)——微积分及概率论相关函数讲解
1.t检验举例
使用matlab自带的stockreturns作为数据源,对其中两列数据进行假设检验
Matlab学习笔记(4)——微积分及概率论相关函数讲解
Matlab学习笔记(4)——微积分及概率论相关函数讲解
Matlab学习笔记(4)——微积分及概率论相关函数讲解
参考程序:

clc;
clear all;
load stockreturns;%将stockreturns文件中的变量加载进来
x1=stocks(:,3);
x2=stocks(:,10);
boxplot([x1,x2],{'2','10'});%生成箱型图
[h,p]=ttest2(x1,x2),%对x1和先做t检验,判断其均值是否有差异

相关知识点:
1.load():将文件变量加载到工作区中

load(filename);%从 filename 加载数据。
%如果 filename 是 MAT 文件,load(filename) 会将 MAT 文件中的变量加载到 
MATLAB® 工作区。
%如果 filename 是 ASCII 文件,load(filename) 会创建一个包含该文件数据的双精度数组。
load(filename,variables);%加载 MAT 文件 filename 中的指定变量。

load filename;%是该语法的命令形式。命令形式需要的特殊字符较少。您无需键入括号或
者将输入括在单引号或双引号内。使用空格(而不是逗号)分隔各个输入项。
%例如,要加载名为 durer.mat 的文件,以下语句是等效的:
load durer.mat      % command form
load('durer.mat')   % function form
%您可以包括先前语法中介绍的任何输入。例如,要加载名为 X 的变量:
load durer.mat X       % command form
load('durer.mat','X')  % function form
%当有任何输入(例如 filename)为变量或字符串时,请不要使用命令格式。

2.ttest2():双样本 t 检验

h = ttest2(x,y);%使用双样本 t 检验返回原假设的检验决策,该原假设假定向量 x 和 
y 中的数据来自均值相等、方差相同但未知的正态分布的独立随机样本。备择假设是 x 和 
y 中的数据来自均值不相等的总体。如果检验在 5% 的显著性水平上拒绝原假设,则结果 h 
为 1,否则为 0。
h = ttest2(x,y,Name,Value);%返回针对双样本 t 的检验决策,该检验使用由一个或多
%个名称-值对组参数指定的附加选项。例如,您可以更改显著性水平或进行无需假设方差齐性的检验。
[h,p] = ttest2(___);%还使用上述语法中的任何输入参数返回检验的 p 值 p。

程序效果:
Matlab学习笔记(4)——微积分及概率论相关函数讲解
由运行结果可得:h=1且p=0.0423<0.05,说明两个样本期望不相同,且有显著差异。

结尾:

至此matlab学习笔记全部编写完成,作者从基本的矩阵运算到基础绘图再到GUI到图像处理最后介绍了微积分和统计学相关知识,基本比较全面的介绍了Matlab的相关内容,由于作者也是一个初学者,所以更深层次的算法作者为介绍,此系列适合新手入门以及备忘查阅。个人认为Matlab是一个需要不断动手不断尝试的软件,只有不断的尝试写代码,才可以提升的比较快,Matlab的函数众多,这也要求我们不断尝试,这样才能更快、更有效率的学习Matlab,在Matlab的学习过程中要尽可能地接触多的函数,让自己有一个比较深厚的函数积累,这样解决实际问题时才能较快地反应并知道该使用何种函数来解决这个问题。