关于一个计算定积分的程序的bug
yuanfeng 2019-10-18数学

18687.png

请问这个的值是多少?


我需要写一个程序计算这个

我怀疑我积错了

这个程序在大部分情况都可以正常工作,但有时候会出错

#include<bits/stdc++.h>
using namespace std;
int main()
{       long double a,b,c,d,l,r;
        //scanf("%0.9f %0.9f %0.9f %0.9f %0.9f %0.9f",&a,&b,&c,&d,&r,&l);
        scanf ("%10Lf %10Lf %10Lf %10Lf %10Lf %10Lf",&a,&b,&c,&d,&r,&l);
  //      printf("%.10f %.10f %.10f %.10f %.10f %.10f",a,b,c,d,r,l);
		long double R=c/a*(a*r+b)+(d-b*c/a)*log(a*r+b);
		long double L=c/a*(a*l+b)+(d-b*c/a)*log(a*l+b);
        printf("%.6Lf\n",(L-R)/a);
        return 0;
}

比如输入0.1 1 1 1 -1 0的时候是对的

输入0.3 -4 -4 0 14 34时也是对的

但输入-2 3.8 2.5 -9 2 3时就错了


所以应该积错了

大佬帮我积下吧

[修改于 5 个月前 - 2019-10-18 15:59:36]

来自:数学物理 / 数学
2019-10-22 11:13:03
1楼

从逻辑来看本身没错,在取第三组数时(a*r+b),(a*l+b)为负值,负数再log一下是虚数(复数).

所以你的库能自动处理这情况么?或者你需要自己重新搞个算法.

不是大佬,帮不了你.

折叠评论
加载评论中,请稍候...
折叠评论
2楼

高中常见的反比例函数平移模型/常数函数

如果是常数,直接秒,return

计算出x方向偏移量,将R和L相对偏移,得到k/x+b形式,如果范围内有复数,单独减掉。其余套公式就A了。

折叠评论
加载评论中,请稍候...
折叠评论
yuanfeng(作者)
3楼
引用 hello1world 发表于 1 楼的内容:
从逻辑来看本身没错,在取第三组数时(a*r+b),(a*l+b)为负值,负数再log一下是虚数(复数.....

是的,是这个问题,谢谢了

折叠评论
加载评论中,请稍候...
折叠评论
yuanfeng(作者)
4楼
引用 hello1world 发表于 1 楼的内容:
从逻辑来看本身没错,在取第三组数时(a*r+b),(a*l+b)为负值,负数再log一下是虚数(复数.....

这个特判一下就行了吧,我去试试

折叠评论
加载评论中,请稍候...
折叠评论
5楼
引用 yuanfeng 发表于 4 楼的内容:
这个特判一下就行了吧,我去试试

没明白你的意思,如果可以的话希望能把最后成功的程序帖出来看看.

第三组数据2-3区间是有积分结果的,约为3.8455274546965374


前面那个UIC回复我也没看明白,现在高中就有这样的题了么,从函数图形来看类似双曲线旋转加平移的图形.


折叠评论
加载评论中,请稍候...
折叠评论
6楼

写成c*((r - l))/a + (a*d - b*c)/a^2*log((a*r + b)/(a*l + b))

[修改于 5 个月前 - 2019-10-22 22:57:48]

折叠评论
加载评论中,请稍候...
折叠评论
7楼

仔细想想好象也确实没什么,可以自己判断一下自己写个log负数的功能,而且对于这个函数来看可以象上面radio的那样写成(a*r + b)/(a*l + b),如果(a*r + b)/(a*l + b)为负说明不存在结果(开区间),至少对于这个积分来说是这样.


折叠评论
加载评论中,请稍候...
折叠评论
2019-10-23 10:11:49
yuanfeng(作者)
8楼
引用 hello1world 发表于 5 楼的内容:
没明白你的意思,如果可以的话希望能把最后成功的程序帖出来看看.第三组数据2-3区间是有积分结果的,约.....

可是按照我积出来的式子来看确实会出现负数的对数的情况,你是怎么积的?


折叠评论
加载评论中,请稍候...
折叠评论
yuanfeng(作者)
9楼
引用 hello1world 发表于 7 楼的内容:
仔细想想好象也确实没什么,可以自己判断一下自己写个log负数的功能,而且对于这个函数来看可以象上面r.....

问题是这个积分存在结果

折叠评论
加载评论中,请稍候...
折叠评论
yuanfeng(作者)
10楼
引用 yuanfeng 发表于 8 楼的内容:
可是按照我积出来的式子来看确实会出现负数的对数的情况,你是怎么积的?

可以了,正确的代码我发下面

折叠评论
加载评论中,请稍候...
折叠评论
yuanfeng(作者)
11楼
#include<bits/stdc++.h>
using namespace std;
int main()
{       double a,b,c,d,l,r,R,L;
        scanf("%lf%lf%lf%lf%lf%lf", &a, &b, &c, &d, &l, &r);
        if(a!=0)
        {R=c*r/a+(d/a-b*c/(a*a))*log(fabs(a*r+b));
        L=c*l/a+(d/a-b*c/(a*a))*log(fabs(a*l+b));}
        else
        {R=((c*r*r)/(2*b)+(d*r)/b);
        L=((c*l*l)/(2*b)+(d*l)/b);    }
//        cout<<(a*r+b)<<" "<<(a*l+b);
        printf("%.6lf\n",(R-L));
        return 0;
}


折叠评论
加载评论中,请稍候...
折叠评论
yuanfeng(作者)
12楼
引用 yuanfeng 发表于 11 楼的内容:
#include<bits/stdc++.h>using namespace&.....

这个是正确的代码,特判一下就行了

折叠评论
加载评论中,请稍候...
折叠评论
13楼
引用 hello1world 发表于 5 楼的内容:
没明白你的意思,如果可以的话希望能把最后成功的程序帖出来看看.第三组数据2-3区间是有积分结果的,约.....

反比例函数(k/x)的学习从初中开始,在高中进行了平移变换。和双曲线转1/4pi是一样的

折叠评论
加载评论中,请稍候...
折叠评论
14楼

此外,高中连极限也不学,就学导数了。。。积分原理类似,但不学。在各大竞赛有所涉及。

折叠评论
加载评论中,请稍候...
折叠评论
15楼
引用 UIC 发表于 14 楼的内容:
此外,高中连极限也不学,就学导数了。。。积分原理类似,但不学。在各大竞赛有所涉及。

这确实是和k/x一样,当初好象不那么重视这个,不大记得了,好象当初高中讲极限,和行列式(矩阵)运算但不讲导数和积分当然那时也没什么竞赛.

折叠评论
加载评论中,请稍候...
折叠评论
16楼
引用 yuanfeng 发表于 11 楼的内容:
#include<bits/stdc++.h>using namespace&.....

基本就这样了,不过a!=0时要判断一下a*r+b!=0,a*l+b!=0,并且a*r+b和a*l+b符号相同(都是正数或都是负数),此时存在积分结果.然后进行下面的计算.

折叠评论
加载评论中,请稍候...
折叠评论
2019-10-24 08:28:41
yuanfeng(作者)
17楼
引用 hello1world 发表于 15 楼的内容:
这确实是和k/x一样,当初好象不那么重视这个,不大记得了,好象当初高中讲极限,和行列式(矩阵)运算但.....

我是搞信竞的,要学这个

折叠评论
加载评论中,请稍候...
折叠评论
18楼
引用 yuanfeng 发表于 17 楼的内容:
我是搞信竞的,要学这个

你是哪里的?我考完初赛,准备退役。。。

折叠评论
加载评论中,请稍候...
折叠评论
2019-10-25 20:30:20
yuanfeng(作者)
19楼
引用 UIC 发表于 18 楼的内容:
你是哪里的?我考完初赛,准备退役。。。

湖南,话说你过了为什么不搞复赛

折叠评论
加载评论中,请稍候...
折叠评论
20楼
引用 yuanfeng 发表于 19 楼的内容:
湖南,话说你过了为什么不搞复赛

目前不知道分数线,应该没过。

而且我要专心搞物理

折叠评论
加载评论中,请稍候...
折叠评论
yuanfeng(作者)
21楼
引用 UIC 发表于 20 楼的内容:
目前不知道分数线,应该没过。而且我要专心搞物理

50以上就够吧。。。

折叠评论
加载评论中,请稍候...
折叠评论
22楼

我浙江的。。这儿都贼高,平均都有68

[修改于 5 个月前 - 2019-10-25 22:31:03]

折叠评论
加载评论中,请稍候...
折叠评论
2019-10-26 17:10:09
yuanfeng(作者)
23楼
引用 UIC 发表于 22 楼的内容:
我浙江的。。这儿都贼高,平均都有68

我67.。。。。

折叠评论
加载评论中,请稍候...
折叠评论

想参与大家的讨论?现在就 登录 或者 注册

插入资源
全部
图片
视频
音频
附件
全部
未使用
已使用
正在上传
空空如也~
上传中..{{f.progress}}%
处理中..
上传失败,点击重试
{{f.name}}
空空如也~
(视频){{r.oname}}
{{selectedResourcesId.indexOf(r.rid) + 1}}
插入表情
我的表情
共享表情
Emoji
上传
注意事项
最大尺寸100px,超过会被压缩。为保证效果,建议上传前自行处理。
建议上传自己DIY的表情,严禁上传侵权内容。
点击重试等待上传{{s.progress}}%处理中...已上传
空空如也~
草稿箱
加载中...
此处只插入正文,如果要使用草稿中的其余内容,请点击继续创作。
{{fromNow(d.toc)}}
{{getDraftInfo(d)}}
标题:{{d.t}}
内容:{{d.c}}
继续创作
删除插入插入
{{forum.displayName}}
{{forum.countThreads}}
篇文章,
{{forum.countPosts}}
条回复
{{forum.description || "暂无简介"}}
ID: {{user.uid}}
{{submitted?"":"投诉"}}
请选择违规类型:
{{reason.description}}
支持的图片格式:jpg, jpeg, png