楼主: lyjchk
1439 3

[作业] 求求大佬看看我的这段代码有啥错误 [推广有奖]

  • 0关注
  • 0粉丝

高中生

85%

还不是VIP/贵宾

-

威望
0
论坛币
10 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
555 点
帖子
12
精华
0
在线时间
46 小时
注册时间
2021-2-27
最后登录
2022-11-23

楼主
lyjchk 学生认证  发表于 2021-10-26 16:28:40 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
一根棍子正好有一米长。沿着棍子的长度随机选择两个点。棍子在这些地方被切开。让这
三根棒子的长度为 x, y, z,这三根棒子能不能形成一个三角形?让我们执行一个模拟来估计
我们能做到的概率。
(1)用自己学号的后五位数字作为 seed,从(0, 1)的均匀分布里随机抽取 20000 个样
本,保存为 r。将 r 转化为 n×2 矩阵,再次保存为 r,使 r 中的每一行都代表随机切割点。
(2)对于 r 中的每一行,计算他的最小值和最大值,并分别保存为 r1 和 r2(r1 和 r2 应
为长度为 n 的向量)。
(3)计算以 r1 和 r2 中的点为分割点而得到的三根棍子的长度,分别保存为 x,y 和 z(x,
y 和 z 应为长度为 n 的向量)。
(4)已知三根长度为 x, y, z 的棍子,每根都小于 1 米,什么时候可以用它们创造一个三
角形呢?也就是说,找出 x, y, z 必须满足才能形成三角形的不等式。
(5)从 r 中选择所有能够形成一个三角形的情况,并将它们保存为 tri,并且,估计在任
意两个位置切割棍子可以形成一个三角形的概率。
(6)现在试着用数学思维来计算这个概率的理论值。你能解释一下你的理论答案和你的
模拟估计之间的区别吗?
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:seed 均匀分布 三角形 最小值 理论值

沙发
lyjchk 学生认证  发表于 2021-10-26 16:29:27
  1. > set.seed(60409)
  2. > r<-runif(20000, min = 0, max = 1)
  3. > r<-matrix(r,ncol = 2)
  4. > r1<-apply(r,1,max)
  5. > r2<-apply(r,1,min)
  6. > x<-as.vector(r1)
  7. > y<-as.vector(r2)
  8. > z<-as.vector(x-y)
  9. > x<-as.vector(1-x)
  10. > tri<-vector(mode="numeric",length=0)
  11. > n=1
  12. > while(n<10000){
  13. +     
  14. +     if(x[n]+y[n]>0.5|y[n]+z[n]>0.5|x[n]+z[n]>0.5){
  15. +         tri<-c(n)}
  16. +     n=n+1
  17. + }
  18. >
复制代码

藤椅
lyjchk 学生认证  发表于 2021-10-26 16:30:20
求问为什么我循环里基本每一次tri变量都加进去了,而不是满足条件的n加进去了

板凳
C_g_XIang 学生认证  发表于 2021-10-27 09:01:03
两个问题。首先你的判断条件不是很正确,你要限制的其实是三角形的两条边(因为周长固定,确定了两条边,第三边即可得)
所以判断的条件应该是两条不超过1/2的边之和大于1/2,即x+y>0.5且x<=0.5且y<=0.5。
第二你循环里的c()函数是想组合两个元素成为一个向量,但你的只有一个元素(即c(n)),也就是说你告诉了电脑,你的tri里面只有一个元素,所以你想要把你每一个n都放到tri里,应该是tri<-c(tri,n)。

所以
  1. while(n<10000){
  2.   if(x[n]+y[n]>0.5 & x[n]<=0.5 & y[n]<=0.5){tri<-c(tri,n)}
  3.   n=n+1
  4. }
复制代码


您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-19 04:27