MATLAB:函数与数值积分

一、数学函数图像的绘制

clc,clear
fh = @(x)2*exp(-x).*sin(x);
Xrange = [0,8];
gx = @(x)3*exp(-x)*0.8.*sin(x);
fplot(fh,Xrange,'r-*','LineWidth',1.5)
hold on
grid on 
fplot(gx,Xrange,'b-o','LineWidth',1.5)
axis([-0.5,8.5,-0.1,0.85])
legend('fh = @(x)2*exp(-x).*sin(x)','gx = @(x)3*exp(-x)*0.8.*sin(x)')
legend('boxoff')
title('fplot函数绘制示例')
xlabel('X')
ylabel('Y')

function y = eqsfun_fplot(x)
    y(:,1) = 200*sin(x)./x;
    y(:,2) = x.^2 - 3.5*x + 10;
end
clc,clear
fplot(@eqsfun_fplot,[-20,20],'LineWidth',1.5)
grid on
legend('y_1 = 200*sin(x)./x','y_2 = x.^2 - 3.5*x + 10')
legend('boxoff')

二、函数极值 

 一元函数极值

clc,clear
fh = @(x)x - 1./x + 5;
fplot(fh,[-10,10],'b-','LineWidth',1.5)
grid on
% fminbnd: Single-variable bounded nonlinear function minimization.
% exitflag > 0收敛到解,exitflag = 0已达最大迭代次数,exitflag < 0不收敛;
options = optimset('Display','iter','PlotFcns',@optimplotfval,'TolX',1e-6);
[x,fval,exitflag,output] = fminbnd(fh,-10,1,options)

 

fh_min = @(x)2*exp(-x).*sin(x); %最小值匿名函数
fh_max = @(x)-2*exp(-x).*sin(x); %最大值匿名函数,前加负号
[xmin,fmin,exitflag] = fminbnd(fh_min,0,8);
[xmax,fmax,exitflag] = fminbnd(fh_max,0,8);
fplot(fh_min,[0,8])
axis([0 8 -0.1 0.7]) %改变坐标轴的范围
text(xmin+0.1,fmin,['最小值点:',num2str(fmin)])
text(xmax+0.1,-fmax,['最大值点:',num2str(-fmax)])
hold on
plot(xmin,fmin,'ro', xmax,-fmax, 'bo')
grid on

 多元函数的极小值:

% [x,fval,exitflag,output] = fminsearch(@fh, x0, options)
% 此函数使用单纯型法搜索最值。其中𝒇𝒉为待求最值的向量函数,𝒙𝟎为搜索过程开始时自变量的初始值。
% [x,fval,exitflag,output,grad,hessian] = fminunc(@fh,x0 , options)
% 此函数使用牛顿法搜索最值,在效率上有所提高。

% fh = @(x,y)(x.^2-2*x).*exp(-x.^2-y.^2-x.*y);
% fsurf(fh,'ShowContours','on')
x = -5:0.2:5;
y = -5:0.2:5;
[X,Y] = meshgrid(x,y);
Z = (X.^2-2*X).*exp(-X.^2-Y.^2-X.*Y);
mesh(X,Y,Z)
figure(2)
[c,h] = contour(X,Y,Z);
set(h,'ShowText','on')
grid on

fh = @(x)(x(1).^2-2*x(1)).*exp(-x(1).^2-x(2).^2-x(1).*x(2));
options = optimset('Display','iter','PlotFcns',@optimplotfval,'TolX',1e-6);
[x,fval,exitflag,output] = fminsearch(fh,[0.5,-0.5],options)
% [x,fval,exitflag,output] = fminunc(fh,[0.5,-0.5],options)

三、函数求解 

单变量非线性函数求解:

clc,clear
fh = @(t)(sin(t)).^2.*exp(-0.1*t)-0.5*abs(t);
fplot(fh,[-5,5],'r-','LineWidth',1.5)
hold on 
grid on
fplot(@(t)0*t,[-5,5])
x0 = [-2,-0.5,0,0.5,1.6];  % 初值选择
sol = zeros(5,2);
for i = 1:5
    [t,y] = fzero(fh,x0(i));
    sol(i,1) = t;  % 零点
    sol(i,2) = y;  % 函数值
end
plot(sol(:,1),sol(:,2),'co','MarkerFaceColor','c')

[t1,y1,exitflag,output] = fzero(fh,-2)

多元非线性函数求解:

options = optimoptions('fsolve','Display','iter','PlotFcn',@optimplotfirstorderopt,'StepTolerance',1e-12);
[x,fval,exitflag,output] = fsolve(@nlineqs_fun,[0,0,0],options)

四、数值积分 

 矩形区域积分:

fh = @(x)sin(x);
format long
I1 = quad(fh,0,pi/2)
I2 = quadl(fh,0,pi/2)
I3 = quadgk(fh,0,pi/2)
I4 = integral(fh,0,pi/2)
% quad,quadl精度低,在未来的matlab中会被移除

 

fh = @(x)exp(-0.5*x).*sin(x+pi/6);
fplot(fh,[0,3*pi])
I = integral(fh,0,3*pi,'RelTol',1e-8,'AbsTol',1e-12)
x = 0:pi/30:3*pi;
y = fh(x);
h = area(x,y);
h.FaceColor = [0 0.75 0.75];
hold on; 
grid on
fplot(fh,[0,3*pi],'r-','LineWidth',1.5)
axis([-0.5,3*pi+0.5,-0.2,0.8])

y1 = @(x)sin(x);
y2 = @(x)cos(x);
fplot(y1,[-1,2],'r-','LineWidth',1.5)
hold on
fplot(y2,[-1,2],'b-','LineWidth',1.5)
[x0,y0] = fzero(@(x)sin(x)-cos(x),[-0.5,1.5]);
x1 = -0.5:0.01:x0;
x2 = x0:0.01:1.5;
fill([x1,fliplr(x1)],[y1(x1),fliplr(y2(x1))],'c')
fill([x2,fliplr(x2)],[y2(x2),fliplr(y1(x2))],'c')

fh = @(x)abs(cos(x)-sin(x));
S = integral(fh,-0.5,1.5)

可以计算广义积分、含参积分问题、含奇点积分、高震荡积分、不连续积分、分段函数积分、围道积分...

fh = @(x)exp(x.^2).*(x<=2) + 80./(4-sin(16*pi*x)).*(x>2);
I1 = integral(fh,0,4,'Waypoints',[2])
I2 = quadgk(fh,0,4,'Waypoints',[2])

 

fh = @(x)exp(x).*log(x);
I = integral(fh,0,1)

fh = @(x)x.^5.*exp(-x).*sin(5*x);
fplot(fh,[0,100],'r-','LineWidth',1.5)
%积分限中可以有inf,但必须快速收敛
[q,errbnd] = quadgk(fh,0,inf,'RelTol',1e-8,'AbsTol',1e-12)
I = integral(fh,0,inf,'RelTol',1e-8,'AbsTol',1e-12)

Waypoints = [-1-i 1-i 1+i -1+i -1-i];
plot(Waypoints);%绘制积分路径
xlabel('Real axis');
ylabel('Image axis');
axis([-1.5 1.5 -1.5 1.5]);
grid on;
%注意各点间使用直线连接
[Q,errbnd] = quadgk(@(z)1./(2*z - 1),-1-i,-1-i,'Waypoints',[1-i,1+i,-1+i])
[Q2,errbnd2] = quadgk(@(z)1./(2*z - 1),-1-i,-1-i,'Waypoints',Waypoints)
%使用这个的效果也是一样的,就是说始末点可以随便包不包含在Waypoints中
I = integral(@(z)1./(2*z - 1),-1-i,-1-i,'Waypoints',Waypoints)

fh = @(x,alpha)exp(-alpha.*x.^2).*sin(alpha.^2.*x);
alphai = 0:0.1:4;  % 对alpha分点
I = integral(@(x)fh(x,alphai),0,inf,'RelTol',1e-8,'AbsTol',1e-12,'ArrayValued',true);
plot(alphai,I,'r-','LineWidth',1.5)
grid on
title('I(alpha)与alpha的关系曲线')
xlabel('alpha')
ylabel('I(alpha)')
grid on

二重积分:

 

fh = @(x,y)exp(-x.^2/2).*sin(x.^2 + y);
I = integral2(fh,-2,2,-1,1,'RelTol',1e-10)

三重积分: 

fh = @(x,y,z)4*x.*z.*exp(-x.^2.*y-z.^2);
I = integral3(fh,0,1,0,pi,0,pi,'AbsTol',1e-8,'RelTol',1e-12)

向量化积分:

 fh2 = @(x)besselk(0,(1:10).^2*x.^0.5+1);
 I = integral(fh2,0,1,'ArrayValued',true)

离散数据积分:

trapezoid:通过梯形法计算近似积分

x = 0:pi/100:pi/2;
y = sin(x);
S1 = trapz(x,y)

x = -3:0.01:3; 
y = -5:0.01:5; 
[X,Y] = meshgrid(x,y); 
Z = X.^2 + Y.^2;
mesh(X,Y,Z)
%trapz 先对x求积分以生成列向量。然后,y上的积分可将列向量减少为单个标量。
%trapz 稍微高估计确切答案680,因为f(x,y)是凸函数。
V1 = trapz(y,trapz(x,Z,2)) 
V2 = trapz(x,trapz(y,Z,1)) 

x = [0,2,4,5:9,10.5,11.5,12.5,14,16:24];
y = [20,25,30,35,40,50,155,92,60,62,60,43,59,140,120,68,60,80,55,65,20];
plot(x,y,'r-','LineWidth',1.5)
grid on
tf1 = trapz(x,y)
xi = 0:1/60:24;
yi = spline(x,y,xi);
hold on
plot(xi,yi,'b-','LineWidth',1.5)
tf2 = trapz(xi,yi)

pp = spline(x,y); %三次样条插值生成插值点系数矩阵
fh = @(x)fnval(pp,x); %获得系数矩阵函数
tf = integral(fh,0,24) %采用一重积分函数

 

x = [1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 4 4 4 4 4]*1000;
y = [1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5]*1000;
z = -[13.72 25.80 8.47 25.27 22.32 15.47 21.33 14.49 24.83 26.19 23.28...
    26.48 29.14 12.04 14.58 19.95 23.73 15.35 18.01 16.29];
hx = 1000:10:4000;
hy = 1000:10:5000;
[X,Y] = meshgrid(hx,hy);
Z = griddata(x,y,z,X,Y,'cubic');
mesh(X,Y,Z)
V1 = trapz(hy,trapz(hx,Z,2))
n = length(hx);
m = length(hy);
V2 = -10*10*(-5*Z(1,1)-5*Z(1,n)-5*Z(m,1)-5*Z(m,n)+2*(sum(Z(1,:)+Z(m,:))+sum(Z(:,1)+Z(:,n)))+4*sum(sum(Z)))/4

一般区域的二重积分:

fh = @(x,y)sqrt(10000-x.^2);
tic,I1 = quad2d(fh,-100,100,@(x)-sqrt(10000-x.^2),@(x)sqrt(10000-x.^2)),toc
tic,I2 = integral2(fh,-100,100,@(x)-sqrt(10000-x.^2),@(x)sqrt(10000-x.^2)),toc % 一般效率更高

 

fh = @(x,y)exp(sin(x)).*log(y);
tic,I1 = quad2d(fh,10,20,@(x)5*x,@(x)x.^2),toc
tic,I2 = integral2(fh,10,20,@(x)5*x,@(x)x.^2),toc

一般区域的三重积分: 

fh = @(x,y,z)x.*sin(y+z).*(x+z.^2);
xmin = 1;
xmax = 2;
ymin = @(x)sqrt(x); %y的下限
ymax = @(x)2*x; %y的上限
zmin = @(x,y)x.*y; %z的下限,是关于x和y的函数
zmax = @(x,y)2*x + y; %z的上限,是关于x和y的函数
q = integral3(fh,xmin,xmax,ymin,ymax,zmin,zmax)

fhy = @(y)2*y.*exp(-y.^2).*(integral(@(x)exp(-x.^2)./(y.^2+x.^2),-1,1))^2;
I = integral(fhy,0.2,1,'ArrayValued',true)

基本的蒙特卡洛积分法(Monte Carlo):

fhm = @(x)(x(:,1).^4 - 8*x(:,1).*x(:,2) + 2*sin(x(:,2)) - 3);
n = 1000000;
x(:,1) = unifrnd(2,5,n,1);
x(:,2) = unifrnd(0,23,n,1);
ind = (x(:,2) >= 0 & (x(:,2) <= x(:,1).^2 - 2));
% 期望法
fhIm = (5-2)*(23-0)*sum(fhm(x(ind,:)))/n

fh = @(x,y)(x.^4 - 8*x.*y + 2*sin(y) - 3);
fhI = integral2(fh,2,5,0,@(x)(x.^2-2),'RelTol',1e-10)

fh = @(x)(sqrt(x(:,1).*x(:,2)).*log(x(:,3)) + sin(x(:,4)./x(:,2)));
n = 1000000;
x(:,1) = unifrnd(1,2,1,n); %x1上下限
x(:,2) = unifrnd(1,6,1,n); %x2上下限
x(:,3) = unifrnd(1,24,1,n); %x3上下限
x(:,4) = unifrnd(2,98,1,n); %x4上下限
ind = (x(:,2) >= x(:,1) & x(:,2) <= 3*x(:,1)) &...
      (x(:,3) >= x(:,1).*x(:,2) & x(:,3) <= 2*x(:,1).*x(:,2)) &...
      (x(:,4) >= (x(:,1)+x(:,1).*x(:,3)) & x(:,4) <= (x(:,1)+2*x(:,1).*x(:,3)));
fnI = (2-1)*(6-1)*(24-1)*(98-2)*sum(fh(x(ind,:)))/n

等分布序列的蒙特卡洛积分法: 

 

fh = @(x)x(:,1).*sin(x(:,2)+x(:,3)).*(x(:,1)+x(:,3).^2);
n = 100000000;
data = bsxfun(@times, repmat(1:n,3,1),[sqrt(2);sqrt(3);sqrt(6)/3]);
data = mod(data,1);  % 剩下小数部分
x(:,1) = data(1,:)+1;
x(:,2) = 3*data(2,:)+1;
x(:,3) = 7*data(3,:)+1;
ind = (x(:,2)>=sqrt(x(:,1)) & x(:,2)<=2*x(:,1) & x(:,3)>=x(:,1).*x(:,2) & x(:,3)<=2*x(:,1)+x(:,2));
In = (2-1)*(4-1)*(8-1)*sum(fh(x(ind,:)))/n

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/471953.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【笔记】用三角函数拟合数据(最小二乘法)

0.Matlab自带函数拟合 用三角函数拟合数据简单方便,matlab自带的fittype函数即可完成拟合任务,但是fittype函数仅限于matlab,为了搞懂fittype函数的内含,自己写了一套函数用于拟合。 如下图所示,现有一不规则散点,命令用三角函数拟合,拟合的目标频率w0为0.01m^-1 拟合…

模型部署——RKNN模型量化精度分析及混合量化提高精度

模型部署——RKNN模型量化精度分析及混合量化提高精度&#xff08;附代码&#xff09;-CSDN博客 3.1 量化精度分析流程 计算不同情况下&#xff0c;同一层网络输入值的余弦距离&#xff0c;来近似的查看每一层精度损失的情况。具体量化精度分析的流程如下&#xff1a; 3.2 量…

闪存盘上被删除的文件能被回收站恢复吗?

随着数字设备的普及&#xff0c;闪存盘作为一种便携式的存储设备&#xff0c;已经深入到了我们的日常生活和工作中。然而&#xff0c;在使用闪存盘的过程中&#xff0c;我们可能会不小心删除一些重要的文件。这时&#xff0c;很多人会寄希望于回收站来恢复这些文件。但是&#…

Flutter开发入门——路由

什么是路由&#xff1f; 移动端应用开发中&#xff0c;路由技术是一个非常重要的组成部分。路由技术负责管理应用中各个页面之间的跳转、导航以及参数传递等关键功能。在移动端应用中&#xff0c;一个高效、易于维护的路由系统对于提高开发效率和用户体验具有重要意义。 Flut…

基于Java中的SSM框架实现医院院内物资管理系统项目【项目源码+论文说明】

基于Java中的SSM框架实现医院院内物资管理系统演示 摘要 在当今的中国改革开放经济体制下&#xff0c;中国经济正以快速稳健的步伐前行。并且随着经济的发展&#xff0c;各领域的信息化管理也得到了充足的发展&#xff0c;而且愈发普及。现如今&#xff0c;几乎所有的行业中都…

机器学习_自我总结

文章目录 简介优化算法的方法诊断偏差和方差 简介 我只是一个小白,很多东西写不好,也不是很懂只是记一下笔记对自己的映像更深,也希望有人能够指导我学习(谢谢!) 优化算法的方法 (1)修改学习速率,还有各种(可变)参数1.尝试减少特征的数量2.尝试获得更多的特征3.尝试增加多项…

elment-ui el-tabs组件 每次点击后 created方法都会执行2次

先看错误的 日志打印: 错误的代码如下: 正确的日志打印: 正确的代码如下: 前言: 在element-ui的tabs组件中,我们发现每次切换页面,所有的子组件都会重新渲染一次。当子页面需要发送数据请求并且子页面过多时,这样会过多的占用网络资源。这里我们可以使用 v-if 来进行…

科技助力高质量发展:新质生产力的崛起与企业数字化转型

引言 随着科技的飞速发展&#xff0c;我们正逐渐步入数字化智能时代&#xff0c;这个时代不仅为企业带来了无限的机遇&#xff0c;也让其面对前所未有的挑战。在这个快速变革的时代&#xff0c;企业必须不断调整自己的经营策略&#xff0c;适应数字化转型的浪潮&#xff0c;以…

SQL-Labs靶场“32-33”关通关教程

君衍. 一、32关 GET单引号闭合宽字节注入1、源码分析2、宽字节注入原理3、联合查询注入4、updatexml报错注入5、floor报错注入 二、33关 GET单引号addslashes逃逸注入1、源码分析2、联合查询注入3、updatexml报错注入4、floor报错注入 SQL-Labs靶场通关教程&#xff1a; SQL注入…

【Linux】多线程 --- 同步+POSIX信号量+基于环形队列的生产者消费者模型

线程同步 1. 通过条件变量抛出线程同步概念 在上一篇线程互斥博客就说过&#xff0c;在抢票逻辑中&#xff0c;刚释放完锁的线程由于竞争能力比较强&#xff0c;导致其他线程无法申请到锁&#xff0c;那么长时间其他线程都无法申请到锁&#xff0c;只能阻塞等待着&#xff0c…

福克斯2010 1.8L 手动档

老车了记录点东西 好看也便宜 福克斯维修保养费用调查_保养维护_车系文章_空港平行进口汽车交易服务中心 https://tjautoland.net/article-40.html 福克斯自从上市后&#xff0c;凭借其时尚动感的外形、良好的操控性和极佳的驾乘舒适度&#xff0c;在国内紧凑型市场上持续热…

HJDZ-E800静态中间继电器 DC24V 35mm卡导轨安装 JOSEF约瑟

HJDZ静态中间继电器 系列型号&#xff1a; HJDZ-A200静态中间继电器&#xff1b;HJDZ-A110静态中间继电器&#xff1b; HJDZ-A002静态中间继电器&#xff1b;HJDZ-A004静态中间继电器&#xff1b; HJDZ-E112静态中间继电器&#xff1b;HJDZ-E112L静态中间继电器&#xff1b; HJ…

一步将查询功能添加到公众号菜单和文章

易查分如何将查询功能添加到公众号菜单和文章&#xff0c;实现菜单栏、文章、自动回复均可进行查询。本文给大家详细讲解。 &#x1f50e;接入方式&#xff1a; ✅1.公众号菜单栏接入查询网址 ✅2.公众号菜单栏接入查询小程序 ✅3.公众号菜单栏点击发送查询二维码 ✅4.公众…

提升口才与演讲技巧的有效方法

提升口才与演讲技巧的有效方法 口才与演讲技巧在现代社会中扮演着举足轻重的角色。无论是在职场、学校还是日常生活中&#xff0c;我们都需要借助良好的口才和演讲技巧来表达自己的思想&#xff0c;传递信息&#xff0c;并有效地影响他人。因此&#xff0c;提升口才与演讲技巧…

02分布式搜索引擎ES

elasticsearch查询 1.DSL查询文档1.1.DSL查询分类1.2.全文检索查询1.3.精准查询1.4.地理坐标查询1.5.复合查询 2.搜索结果处理2.1.排序2.2.分页2.3.高亮2.4.总结 3.RestClient查询文档3.1.快速入门3.2.match查询3.3.精确查询3.4.布尔查询3.5.排序、分页3.6.高亮 1.DSL查询文档 …

HTML中的常用标签用法总结(持续更新...)

&#x1f31f; 欢迎来到 我的博客&#xff01; &#x1f308; &#x1f4a1; 探索未知, 分享知识 !&#x1f4ab; 本文目录 1. 标题标签2. 段落标签3. 链接标签4. 列表标签5. 图像标签6. 表格标签 1. 标题标签 <h1>至<h6>用于定义标题。<h1>是最大的标题&am…

交叉注意力融合时域、频域特征的FFT + CNN -BiLSTM-CrossAttention电能质量扰动识别模型

往期精彩内容&#xff1a; 电能质量扰动信号数据介绍与分类-Python实现-CSDN博客 Python电能质量扰动信号分类(一)基于LSTM模型的一维信号分类-CSDN博客 Python电能质量扰动信号分类(二)基于CNN模型的一维信号分类-CSDN博客 Python电能质量扰动信号分类(三)基于Transformer…

一款博客网站源码

一款博客网站源码 源码软件库 为大家内置了主题 清爽又强大真正的永久可用的一条源码&#xff0c;该版本为整合版本&#xff0c;内置了Joe主题&#xff0c;搭建后直接启用即可~ 安装环境要求&#xff1a; PHP 7.2 以上 MySQL, PostgreSQL, SQLite 任意一种数据库支持&#xff…

「滚雪球学Java」:内存管理和垃圾回收(章节汇总)

咦咦咦&#xff0c;各位小可爱&#xff0c;我是你们的好伙伴——bug菌&#xff0c;今天又来给大家普及Java SE相关知识点了&#xff0c;别躲起来啊&#xff0c;听我讲干货还不快点赞&#xff0c;赞多了我就有动力讲得更嗨啦&#xff01;所以呀&#xff0c;养成先点赞后阅读的好…

AI:150-基于深度学习的医学数据挖掘与病症关联发现

🚀点击这里跳转到本专栏,可查阅专栏顶置最新的指南宝典~ 🎉🎊🎉 你的技术旅程将在这里启航! 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 ✨✨✨ 每一个案例都附带关键代码,详细讲解供大家学习,希望…