[已解决] 使用trapz函数计算数值积分报错

[复制链接]
Loy-h 发表于 2022-11-19 23:43:44
本帖最后由 Loy-h 于 2022-11-20 01:42 编辑

for n=0.0005:0.0005:6
    i=n/0.0005;
    t=0.0005:0.0005:6;
    B_0V(i,1)=-1/0.0342*trapz(t,e2_0V);
end
[size=13.3333px]>> for n=0.0005:0.0005:6    i=n/0.0005;    t=0.0005:0.0005:6;    B_0V(i,1)=-1/0.0342*trapz(t,e2_0V);end位置 1 处的索引无效。数组索引必须为正整数或逻辑值
[size=13.3333px]其中e2_0V是一个12000x1的矩阵[size=13.3333px]matlab版本R2022a



e2_0V.mat

9.59 KB, 下载次数: 0

最佳答案


TouAkira 发表于 2022-11-20 00:03:36
典型的浮点精度问题,去看《 这帖(超链接,自己点进去看) 》。
简单讲就是,你以为 n / 0.0005 是一系列整数,但这只是你以为。实际上由于浮点存储精度,很多计算结果是 整数 ± 1e-12 这样的非整数。
这种情形应当避免使用 向量 / 步长 去算索引,而应改以索引为循环变量,由索引去算向量元素。比如改为
for Index = 1 : 1 : numel( n ) % 索引为正整数
Current_n = n( Index );
% 其他计算同理
end
回复此楼

4 条回复


TouAkira 发表于 2022-11-20 00:03:36
典型的浮点精度问题,去看《 这帖(超链接,自己点进去看) 》。
简单讲就是,你以为 n / 0.0005 是一系列整数,但这只是你以为。实际上由于浮点存储精度,很多计算结果是 整数 ± 1e-12 这样的非整数。
这种情形应当避免使用 向量 / 步长 去算索引,而应改以索引为循环变量,由索引去算向量元素。比如改为
for Index = 1 : 1 : numel( n ) % 索引为正整数
Current_n = n( Index );
% 其他计算同理
end
回复此楼

Loy-h 发表于 2022-11-20 00:26:31
TouAkira 发表于 2022-11-20 00:03
典型的浮点精度问题,去看《 这帖(超链接,自己点进去看) 》。
简单讲就是,你以为 n / 0.0005 是一系列 ...

您好,我尝试改了一下计算式
for n=1:1:12000
    t=1:1:n;%之前这里我写错了,我想让t一直进行到n
    B_0V(n,1)=-1/0.0342*0.0005*trapz(t,e2_0V);
end
但是系统依然提示错误
错误使用 trapz
点间距必须为指定均匀间距的标量,或者为每个数据点的 x 坐标向量。
请问这是为什么呢?

TouAkira 发表于 2022-11-20 00:43:11
Loy-h 发表于 2022-11-19 12:26
您好,我尝试改了一下计算式
for n=1:1:12000
    t=1:1:n;%之前这里我写错了,我想让t一直进行到n

新手发帖请先仔细看发帖提示和置顶帖子,尤其是《 你知道如何正确提问么?(超链接) 》、《 为什么你的帖子没人回?(超链接)
请先去看一看,想一想,最最基本的"方便你自己、也方便回答者"的几条指南
math 发表于 2010-12-5 21:16:34
帖子正文部分应包含以下内容: 粘贴一个简单的程序.别人可以直接复制运行(尽量避免使用附件,Simulink模型除外)
做到了吗?
你代码里这个 e2_0V 别人又没有,是没法直接运行的。
虽然可以按你说的维度去自己构造,但是这是给帮你的人增加时间成本(而且还是明显本可以省去的时间成本),换位思考一下,你乐意花这种完全没必要的冤枉时间吗?
至于你的提问,e2_0V 维度与每次循环的 t 的维度不匹配。每次循环 t 的长度都发生了变化,那么被积分的 e2_0V 也应该改为同样的维度才行。打个比方,手里有一卷长度足以给一万人做衣服的布匹,但是来裁衣的顾客只有少数几个,这时难道还原封不动地把这么长的整卷布都搬过来用,而不知变通为按人数裁布?

Loy-h 发表于 2022-11-20 01:56:07
TouAkira 发表于 2022-11-20 00:43
新手发帖请先仔细看发帖提示和置顶帖子,尤其是《 你知道如何正确提问么?(超链接) 》、《 为什么你的 ...

实在不好意思,感谢您的帮助,问题解决了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

相关帖子
相关文章
热门教程
站长推荐
快速回复 返回顶部 返回列表