楼主: 子衿1219
7619 7

[问答] 迭代循环 [推广有奖]

  • 1关注
  • 4粉丝

讲师

70%

还不是VIP/贵宾

-

威望
0
论坛币
60 个
通用积分
1.0023
学术水平
2 点
热心指数
0 点
信用等级
1 点
经验
13521 点
帖子
326
精华
0
在线时间
431 小时
注册时间
2012-3-19
最后登录
2018-7-8

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
我想做的事情如下:
语句1;
语句2;
语句3;
有三个未知数,a 是一个向量,B, C均为矩阵。
首先通过语句1,给定B,C的初值可以得到a,
通过语句2,由上步得到的a和初值B可以得到C
通过语句3,由上步得到的a和初值C可以得到B
一直这样循环迭代,一直到收敛

问题是,如何写这个过程呢?
用while吗?
那while里面判断应该是前后两个相差比较小吗?我想同时让a, B, C收敛。

二维码

扫码加我 拉你入群

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

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

关键词:while Hil 如何写 未知数 如何 未知数

沙发
子衿1219 发表于 2012-12-19 17:07:53 |只看作者 |坛友微信交流群
有没有人在?求解惑啊!!!

使用道具

藤椅
婴儿之道123 发表于 2012-12-19 17:38:31 |只看作者 |坛友微信交流群
同求问~~~

使用道具

板凳
子衿1219 发表于 2012-12-19 19:39:39 |只看作者 |坛友微信交流群
坐等答疑者啊!!!!

使用道具

报纸
子衿1219 发表于 2012-12-19 20:21:28 |只看作者 |坛友微信交流群
或者用repeat ……break语句?

使用道具

地板
jmpamao 发表于 2012-12-19 21:04:45 |只看作者 |坛友微信交流群
size.norm2<-function(s,alpha,d,m){
      t0<-qt(alpha/2,m,lower.tail=FALSE)
     n0<-(t0*s/d)^2
      t1<-qt(alpha/2,n0,lower.tail=FALSE)
     n1<-(t1*s/d)^2
     while(abs(n1-n0)>0.5){
     n0<-(qt(alpha/2,n1,lower.tail=FALSE)*s/d)^2
     n1<-(qt(alpha/2,n0,lower.tail=FALSE)*s/d)^2
}
n1
}

给个例子你,这个是t分布求样本空间的问题, m可以先搞个大点的数 比如1000,再通过迭代,控制while(abs(..)>0)等等,repeat  if ...break应该可以的


你把具体的例子 发出 看看撒

使用道具

7
子衿1219 发表于 2012-12-20 10:44:42 |只看作者 |坛友微信交流群
jmpamao 发表于 2012-12-19 21:04
size.norm2
我写的循环如下:
repeat{
         fr<-function(lm0){
             A<-matrix(rep(0,dm^2),ncol=dm)
                   for(i in 1:dm)
                     {
                       B<-lm0*Kx0[i,]%*%t(Et0[,i])
                       A<-B+A
                      }
         X<-M-B
         norm(X,"F")^2-ln*sum(w*abs(lm0))}
         ###optim通过Kx0,Et0初值得到最优lm0

         lm1<-optim(lm0,fr)
         ###奇异值分解利用lm1与Kx0得到Et1
         Et1<-svd(M%*%Kx0%*%diag(lm1[[1]]))$u%*%t(svd(M%*%Kx0%*%diag(lm1[[1]]))$v)
         ###奇异值分解利用lm1与Et0得到Kx1
         Kx1<-svd(M%*%Et0%*%diag(lm1[[1]]))$u%*%t(svd(M%*%Et0%*%diag(lm1[[1]]))$v)
         ##反复迭代直至收敛
         if(sum(abs(lm0-lm1[[1]]))<=eps)  break
         lm0<-lm1[[1]]
         Et0<-Et1
         Kx0<-Kx1   }
其中lm0,Et0,Kx0,是需要迭代至收敛的向量,矩阵,矩阵。
在程序中,我先控制lm0试了下,可是还是报错了,我eps取1
报错如下:
Error in optim(lm0, fr) : non-finite value supplied by optim

使用道具

8
jmpamao 发表于 2012-12-20 22:16:55 |只看作者 |坛友微信交流群
水平有限 看不懂

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-30 17:27