matlab的trapz求定积分_matlab求离散点积分

matlab的trapz求定积分_matlab求离散点积分EDA365欢迎您登录!您需要登录才可以下载或查看,没有帐号?注册x(T(B3I-e%Q&H3mtrapz是基于梯形法则的离散点积分函数。调用形式:6H*C!TA0dI=trapz(x,y)g3];x1g(x!w(Kh+R%R3G6`其中x和y分别是自变量和对应函数值,以sin(x)在[0,pi]积分为例:/p…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x

( T( B3 I- e% Q& H3 m

trapz 是基于梯形法则的离散点积分函数。 调用形式:6 H* C! T  A0 d

I = trapz(x,y)g3 ]; x1 g( x! w( K  h+ R% R3 G6 `

其中 x 和 y 分别是自变量和对应函数值,以 sin(x) 在 [0,pi] 积分为例:

/ p- s3 v8 y$ l( [x = linspace(0,pi,1e3);     %生成 [0,pi] 内的一系列离散点$ r1 ~3 ?7 ?, F3 J8 j$ U

y = sin(x);

7 G& A- R% g3 f7 I” M$ G* AI = trapz(x,y)

* V9 [* Y$ s) o, g6 M, e. p” D2 r% K& i% N- F6 o) r( q

浮点数误差: j6 H/ D  K5 ^, N

由于计算机中都是以二进制形式存储数据,当用十进制数进行计算时,就会存在十进制数二进制数的转换。但是某些十进制数转化为二进制数是一个无限位的小数,这时必须对该无限位小数进行截断计算机才能存储,那么此时就会产生误差,即浮点数误差。 8 D( O. `3 V- W’ d# Y# N

例如十进制的0.9,在转化为二进制时是无限循环小数0.1110011001100110011…。此时须对该无限位小数进行截断才能保存在内存当中,截断后再转换回十进制时,0.9就变成了0.90000000000000002,这就是浮点数误差的产生过程。 # w’ A9 Z+ {0 T+ q4 {; O” i% n

由于浮点数误差的存在,当进行数值计算时就会出现一些不可避免的问题,最常见的就是判断两数相等时得到与预期相反的结果。

( J6 }$ B1 @# O( y, Y+ R例:令 a = 0.1+0.2, b = 0.3, 判断 a==b 时,MATLAB 会返回0, 当执行 a-b 时,会发现结果不是精确等于0,而是一个非常小的数5.5511e-17。

4 U$ Q$ o” x2 r: P* Z1 T’ u- F或者在矩阵中寻找数的位置(也相当于是判断两数相等)。0 s% a  J& a+ q& I

%例8 v7 J& e) R3 k, T; F% ~

>> a = 0.1:0.1:0.5

9 ?4 O/ ]* a* x  V2 z) Y1 @. Z’ C5 k% u( a+ p’ X” n/ z! f/ L

a =

6 |3 B0 F” x5 T3 j. y3 C3 e+ R& S, n) v& q

0.1000    0.2000    0.3000    0.4000    0.5000

5 O: S  L0 t* P( X) x, J1 q

( y” i  c+ z6 l: |7 k0 z>> find(a==0.3)

0 m$ C; M8 z/ X3 O

– ~3 k8 R. h( ~2 Q1 p/ }$ V8 Bans =

) A2 H4 I! X# S

/ B; g% Q# @; x  b/ V5 c: C   Empty matrix: 1-by-07 `; x  u2 x% d6 K7 x

由于 a 向量中的 0.3 是由 0.1+0.1+0.1 计算得到,在计算过程中就产生了浮点数误差,这也导致在判断 a==0.3 时结果为false,所以 find(a==0.3) 返回一个空矩阵。 ” I9 H& ~3 @% I* H  |( K

在进行数值计算判断两数相等时,最好不要直接判断,而是设立一个容差值,当两个浮点数的差的绝对值小于给定的容差值时,我们就认为这两个浮点数相等。 – \” Z2 Y. A4 M# {* f  O; K9 j1 w+ d

比如对于上面的例子:8 B% D. b* t” a” Y1 m% q

>> a=0.1:0.1:0.5

7 I+ Q- o! R  ~& T” j. E6 q5 _! p: g’ \: `$ x1 @

a =: z9 L1 y, ]: g1 W! J

6 I( L; R6 e0 T# n, O9 y  0.1000   0.2000   0.3000   0.4000   0.50001 C5 x. ~7 V4 a

$ J  b8 x* ?; R9 r# {” R! ~0 E7 ?6 _* P

>> tol=eps(0.3)*10   %设立容差值,一般比这个点的浮点数误差高一到两个数量级即可。eps函数能够求得该点的浮点数误差值。6 B) q8 X, K, A$ ]

– H0 R9 b2 s! N* M( c3 D* Stol =

( a* N! N* u’ R# B. R* b- o  A

7 O8 k) `! x+ f! `+ t  5.5511e-15

1 G! M; c& R+ K# ` ” L. p( G9 [% ~: K* F, z# a7 n

>> find(abs(a-0.3). ~0 E+ s* e% L) t9 Q

ans = ) m: [6 X9 G  U$ l3 c/ g

( N/ S: ~. L+ m

3, A1 |# y# R6 k

2 V2 V4 K5 m8 F7 G

/ V6 l5 z8 Y( j/ Q  T& p( N生成一系列有规律名变量

– O6 P: o: A+ p4 _: a当循环迭代需要把每次迭代结果进行保存时,如果每次迭代的结果是尺寸不同的矩阵,无法用矩阵进行存储,那么可以利用 eval 和 num2str 这两个函数可以生成一系列例如 a1、a2、a3… 变量对结果进行保存(不推荐这种方法,原因是 eval 这个函数有很多缺点)。 p- s6 X) }* e5 h  Y+ E2 C- n. w

eval::将括号内的字符串视为语句并运行。

$ N( t& C, N, T4 {, Y- wnum2str: 将数值转换为字符串。

* z’ }% H. a1 f” G%例2 B0 G  w, t4 D4 M

for ii=1:10. _8 l/ |4 q& w” O5 R1 D

str=[‘a’,num2str(ii),’=1:’,num2str(ii)];g. g1 o% H, A3 d8 q/ a4 D, Q

eval(str)

# I0 w( N8 n% |$ q( Uend- c: x) u8 ^% g’ t- r7 b

这样可以生成一系列变量 a1、a2…a10 对循环结果进行保存。 , Q$ p# F1 u” j$ Q% k

不推荐使用 eval 函数的原因,帮助文档有详细的解释。

0 o4 z9 q& L3 ^2 M# Q6 U$ lMATLAB® compiles code the first time you run it to enhance peRFormance for future runs. However, because code in an eval statement can change at run time, it is not compiled.’ Q: a& s* Z: V  Q

Code within an eval statement can unexpectedly create or assign to a variable already in the current workspace, overwriting existing data.6 s1 E) w; {2 l8 ]- t

Concatenating strings within an eval statement is often difficult to read. Other language constructs can simplify the syntax in your code.

4 i& v  W5 c, l2 h: fMATLAB 对于这类问题有更好的解决办法,利用元胞数组对结果进行存储。元胞数组是 MATLAB 中的特色数据类型,它的元素可以是任意类型的变量,包括不同尺寸或不同维度的矩阵。 对于上面的例子,利用元胞数组:

! ^” K& n: O$ W4 {% cfor ii=1:10

, l8 t& J2 Y8 s+ l) z. A    a{ii}=1:ii;

” S: ~; S5 X& b# Send# h% U6 L! Y$ L% g/ t% `& Y3 Q6 W

即生成一系列元胞存储循环结果。这样无论是程序的可读性、运行效率还是后续程序对保存结果调用的方便程度,都远胜于 eval 函数。0 |/ _3 z) }/ }8 H, Y1 i

除此之外,在处理符号变量时如果需要生成一系列有规律名符号变量,例如生成一个多项式:+ q: Z6 [- Q* ~” G# M, U) d( \

y = x1+2*x2+3*x3+…+100*x100

Y’ v5 {! k2 Z6 @* heval+num2str 能够实现,但更简便的方法还是利用矩阵:

7 n” ~( G” w4 g, _’ r2 H& qx=sym(‘x’,[1,100]);F3 \4 Q: H3 x, o& W

w=(1:100).*x;% B, g& Z# N5 H* G% M; a. W

y=sum(w)

) L$ Q+ k- _2 i; A9 o- x’ IH0 w; h9 v+ a5 ]. u6 e7 q2 c

‘ Q3 ]/ e’ y& w% O$ }) W

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/230730.html原文链接:https://javaforall.net

(0)
上一篇 2025年6月19日 上午9:22
下一篇 2025年6月19日 上午10:01


相关推荐

  • OpenClaw OpenWrt路由器安装:全家网络变身AI助理中枢

    OpenClaw OpenWrt路由器安装:全家网络变身AI助理中枢

    2026年3月12日
    3
  • 图片介质受写入保护_写入保护

    图片介质受写入保护_写入保护最近使用U盘,突然不能正常使用了,在U盘内新建文件夹,提示“介质受写入保护”无法创建文件,赶紧网上查找解决办法。查找的结果比解释比较全面的就是:方法一:格式化我的电脑(右击)-管理-磁盘管理-选中U盘右键删除后格式化(网上的方法,这招肯定能用,但是适用于没有重要数据的前提下,格式化后之前的数据会全部丢失)方法二:修改注册表1、打开注册表win+R(即开始-运行)键入regedit.exe2、进入如…

    2025年7月16日
    8
  • @RequestParam注解用法

    @RequestParam注解用法RequestParam 将请求参数绑定到你控制器的方法参数上 是 springmvc 中接收普通参数的注解 语法 RequestParam value 参数名 required true false defaultValue value 参数名 required 是否包含该参数 默认为 true 表示该请求路径中必须包含该参数 如果不包含就报错 defaultValue 默认参数值 如果设置了该值 required true 将失效 自动为 false 如果没有传该参数 就使用默认值 R

    2026年3月17日
    1
  • 十进制小数转化为二进制小数[通俗易懂]

    十进制小数转化为二进制小数[通俗易懂]一、二进制数转换成十进制数由二进制数转换成十进制数的基本做法是,把二进制数首先写成加权系数展开式,然后按十进制加法规则求和。这种做法称为”按权相加”法。例如把二进制数110.11转换成十进制数。二、十进制数转换为二进制数十进制数转换为二进制数时,由于整数和小数的转换方法不同,所以先将十进制数的整数部分和小数部分分别转换后,再加以合并。1.十进制整数转换为二进制整数十进制整数转换为二进制整数采用”除2取余,逆序排列”法。具体做法是:用2去除十进制整数,可以得到一个商和余数;再

    2026年3月10日
    3
  • P2P协议简介

    P2P协议简介最近因为有些需要业务大文件分发 传统文件分发策略都是中心化 要么是推送 要么是拉取 中心节点很容易成为瓶颈 而 P2P 的点对点 去中心化能很好的解决这个问题 P2P 协议 P2P 是英文 Peer to Peer 的简称 大家对它并不陌生 找种子下电影 P2P 播放器都是用这种技术 首先 P2P 协议是把一个大的文件 按照固定大小进行分片 比如 2M 一个分片 通过种子中的索引记录每个分片的信息 每个节点互相

    2026年3月26日
    2
  • NHibernate教程

    NHibernate教程 一、NHibernate简介在今日的企业环境中,把面向对象的软件和关系数据库一起使用可能是相当麻烦、浪费时间的。NHibernate是一个面向.Net环境的对象/关系数据库映射工具。对象/关系数据库映射(object/relationalmapping(ORM))这个术语表示一种技术,用来把对象模型表示的对象映射到基于SQL的关系模型数据结构中去。NHibernate除了能将一张表映射为

    2022年7月12日
    23

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号