楼主: 201441000058
966 3

[有偿编程] R语言求解非线性不等式组 [推广有奖]

  • 0关注
  • 0粉丝

大专生

26%

还不是VIP/贵宾

-

威望
0
论坛币
673 个
通用积分
0.4500
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
986 点
帖子
3
精华
0
在线时间
101 小时
注册时间
2016-9-21
最后登录
2024-10-17

楼主
201441000058 发表于 2023-2-23 18:24:22 |AI写论文
100论坛币
问题见图片附件,急求 解出该非线性不等式组 的R语言程序!!
【初步求解思路:首先选定个较小的n (如n=2),利用二分法查找出第一个公式在等式成立时C0的值:再将上述值代入第二个式子,以验证所求得的C0是否满足第二个式子; 如不满足,则样本量n的值加 1,直到第一个式子解出的n和C0也满足第二个式子】
【初步程序(报错):
f_C1<-function(t){
  (pchisq((n-1)*((3*C1+1)*sqrt(n)-t)^2/(9*n*C0^2),df=n-1))*(dnorm(t+sqrt(n))+dnorm(t-sqrt(n)))}
f_C2<-function(t){
  (pchisq((n-1)*((3*C2+1)*sqrt(n)-t)^2/(9*n*C0^2),df=n-1))*(dnorm(t+sqrt(n))+dnorm(t-sqrt(n)))}
C1 <- 4/3; C2 <- 1; alpha <- 0.05; n <- 2
#二分法求解方程的根
S <- function(C0){integrate(f_C1,lower=0, upper=(3*C1+1)*sqrt(n))$value-(1-alpha)}
x0 <- 0.5; x1 <- 2
while(abs(x0-x1)>1e-5){
  if(S(x0)*S(x1)>0){
    print("no root")
    break
  }
  x2 = (x0+x1)/2
  if(S(x2)==0){cat(x2);break}
  if(S(x0)*S(x2)<0){
    x1 = x2
  }else{
    x0 = x2
  }
}
##此时报错:Error in pchisq((n - 1) * ((3 * C1 + 1) * sqrt(n) - t)^2/(9 * n *  : object 'C0' not found                                                                                                                  




5207bdd8ba0f7c84204ce885f427116.jpg (1.9 MB)

5207bdd8ba0f7c84204ce885f427116.jpg

关键词:R语言 非线性 不等式 R程序 非线性不等式 卡方分布 正态分布 定积分

沙发
oliyiyi 发表于 2023-2-24 08:58:49
在程序中,C0是待求解的未知量,没有事先给定值,因此无法在函数中直接使用。可以通过将C0作为参数传递给函数来解决这个问题。另外,为了避免后面的函数定义中对n和C0的使用报错,需要将这两个变量的定义放到前面。
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
Sunknownay + 3 + 3 + 3 热心帮助其他会员

总评分: 学术水平 + 3  热心指数 + 3  信用等级 + 3   查看全部评分

藤椅
oliyiyi 发表于 2023-2-24 08:59:13
  1. C1 <- 4/3
  2. C2 <- 1
  3. alpha <- 0.05
  4. n <- 2

  5. f_C1 <- function(t, n, C0, C1) {
  6.   (pchisq((n - 1) * ((3 * C1 + 1) * sqrt(n) - t)^2 / (9 * n * C0^2), df = n - 1)) *
  7.     (dnorm(t + sqrt(n)) + dnorm(t - sqrt(n)))
  8. }

  9. f_C2 <- function(t, n, C0, C2) {
  10.   (pchisq((n - 1) * ((3 * C2 + 1) * sqrt(n) - t)^2 / (9 * n * C0^2), df = n - 1)) *
  11.     (dnorm(t + sqrt(n)) + dnorm(t - sqrt(n)))
  12. }

  13. # 二分法求解方程的根
  14. S <- function(C0, n, C1, alpha) {
  15.   integrate(f_C1, lower = 0, upper = (3 * C1 + 1) * sqrt(n), n = n, C0 = C0, C1 = C1)$value - (1 - alpha)
  16. }

  17. x0 <- 0.5
  18. x1 <- 2

  19. while (abs(x0 - x1) > 1e-5) {
  20.   if (S(x0, n, C1, alpha) * S(x1, n, C1, alpha) > 0) {
  21.     print("no root")
  22.     break
  23.   }
  24.   x2 <- (x0 + x1) / 2
  25.   if (S(x2, n, C1, alpha) == 0) {
  26.     cat(x2)
  27.     break
  28.   }
  29.   if (S(x0, n, C1, alpha) * S(x2, n, C1, alpha) < 0) {
  30.     x1 <- x2
  31.   } else {
  32.     x0 <- x2
  33.   }
  34. }
复制代码
已有 1 人评分论坛币 收起 理由
cheetahfly + 10 热心帮助其他会员

总评分: 论坛币 + 10   查看全部评分

板凳
201441000058 发表于 2023-2-24 20:04:47
oliyiyi 发表于 2023-2-24 08:59
感谢大神解惑!
能否请大神再帮忙写出循环程序,如【初步求解思路】所述,解出能同时满足两个公式的n和C0?
还有就是,不熟悉页面,不小心点踩了,抱歉。。。。

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-2-8 13:20