楼主: O(∩_∩)O~!
3520 17

[问答] 请问我的matlab程序哪里有问题? [推广有奖]

  • 0关注
  • 1粉丝

讲师

19%

还不是VIP/贵宾

-

威望
0
论坛币
3994 个
通用积分
13.4290
学术水平
6 点
热心指数
16 点
信用等级
5 点
经验
8892 点
帖子
278
精华
0
在线时间
333 小时
注册时间
2010-8-5
最后登录
2022-8-16

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
大家好!我用下面的程序运行了一个晚上,结果还是没出来,请问问题在哪里?非常感谢!

  1. %直接抽样法%
  2. clear all;
  3. M=1000;
  4. m=1000;
  5. n=5000;
  6. N=5;

  7. t=4.8688;
  8. alpha=0.2;

  9. for N=5:5:20;
  10.     x=random('wbl',15,2,M,N); %产生N个威布尔分布样本:M*N%
  11.     y=log(x);                             %求相应的极值分布样本:1*N%
  12.     w=mean(y);                       %求该极值样本的均值和标准差1*N%
  13.     v=std(y);
  14. for j=1:N
  15. for i=1:n
  16.     for k=1:m
  17.         jz=random('ev',0,1,M,1);
  18.         f1(k)=mean(jz);
  19.         f2(k)=var(jz,1);
  20.     end                                          %f1、f2:1000*1%
  21.     kesai=(log(t)-w(j))*sqrt(f2)/v(j)+f1;
  22.     kesai1=sort(kesai);
  23.     kesaialpha=kesai1(M*(1-alpha));
  24.     rl(i)=exp(-exp(kesaialpha));    %得到一个置信下限值%
  25.     cdfrl(i)=1-weibcdf(rl(i),2,15); %得到每个估计出的分位点的置信水平即覆盖率%
  26. end                                            %此循环得到n个置信下限值,rl为1*5000列的行向量%
  27.     N_rl(j,:)=rl;                             %N_rl为N*n%
  28.     N_mean(j)=mean(rl);             %N_mean为N*1%
  29.     N_var(j)=dot((rl-0.9),(rl-0.9));%N_var为N*1%
  30.     N_cdf(j)=mean(cdfrl);           %N_cdf为N*1%
  31. end
  32. %对每一个威布尔样本计算方差和真实的置信水平,方差为相对于可靠度真值
  33. %即0.9的离散程度,真实的置信水平为在每一个模拟出的分位点处威布尔分布的
  34. %累积概率值%
  35.     fwd(N)=mean(N_mean);      %样本量为N时,最后表格中的分位点取值%
  36.     mean_var(N)=mean(N_var);
  37.     mean_cdf(N)=mean(N_cdf);
  38. end
复制代码
二维码

扫码加我 拉你入群

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

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

关键词:MATLAB程序 MATLAB atlab matla Atl MATLAB 程序

沙发
fuwf120 发表于 2011-5-9 10:18:42 |只看作者 |坛友微信交流群
没有错误  估计矩阵太大了   算起来比较慢吧

使用道具

fuwf120 发表于 2011-5-9 10:18
没有错误  估计矩阵太大了   算起来比较慢吧
谢谢!  可是时间也太长了,我从昨天下午大概6点开始算到现在还没出来,还有一个这样的程序要运行啊

使用道具

板凳
Xaero 发表于 2011-5-9 11:53:06 |只看作者 |坛友微信交流群
先把M等大参数去掉2个0, 然后运行,能够通过的话就没事。
十年一觉扬州梦。
智不足以Academy,才尚不够Industry,情无力于Life。

使用道具

报纸
tulipsliu 在职认证  发表于 2011-5-9 13:41:41 |只看作者 |坛友微信交流群
什么都看不到比较痛苦。
我给你改造了一下。
第一个是函数文件,有两个函数申明,不过你只需要保存为一个就可以,以第一个的声明为名字:Gibbs
保存这个函数名字;
第二个就是简短的脚本。

大概这样的时候,你看着也就觉得能大概估计下时间。不过没提高你代码的效率,还是原来的计算时间。
已有 1 人评分经验 论坛币 学术水平 热心指数 收起 理由
Xaero + 80 + 60 + 1 + 1 我很赞同

总评分: 经验 + 80  论坛币 + 60  学术水平 + 1  热心指数 + 1   查看全部评分

劳动经济学

使用道具

地板
tulipsliu 在职认证  发表于 2011-5-9 13:42:11 |只看作者 |坛友微信交流群
函数文件如下(Gibbs.m)

  1. function [rl,cdfrl]=Gibbs(m,Mt,alpha,n,v,w,t,u)
  2. hwait = waitbar(0,'For Nth sampling ...');
  3. for i=1:n
  4.     i=i;
  5.     [rl,cdfrl]=simpler(m,Mt,alpha,v,w,t,u,i);
  6.     waitbar(i/n); % 这是我设置的waitbar可视化显示
  7. end
  8. close(hwait); % 关闭waitbar

  9. function [rl,cdfrl]=simpler(m,Mt,alpha,v,w,t,u,i)
  10. for k=1:m
  11.         uz=random('ev',0,1,Mt,1);
  12.         f1(k)=mean(uz);
  13.         f2(k)=var(uz,1);
  14. end                                          %f1、f2:1000*1%
  15. kesai=(log(t)-w(u))*sqrt(f2)/v(u)+f1;
  16. kesai1=sort(kesai);
  17. kesaialpha=kesai1(Mt*(1-alpha));
  18. rl(i)=exp(-exp(kesaialpha));    %得到一个置信下限值%
  19. cdfrl(i)=1-weibcdf(rl(i),2,15); %得到每个估计出的分位点的置信水平即覆盖率%
复制代码
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
zyner + 1 + 1 + 1 观点有启发

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

劳动经济学

使用道具

7
tulipsliu 在职认证  发表于 2011-5-9 13:42:48 |只看作者 |坛友微信交流群
脚本文件如下(你随便给它个名字就可以)

  1. %直接抽样法%
  2. clear all;
  3. Mt=1000;
  4. m=1000;
  5. n=5000;
  6. N=5;

  7. t=4.8688;
  8. alpha=0.2;

  9. SS=0;
  10. %%

  11. for N=5:5:20;
  12.     SS=SS+1;
  13.     x=random('wbl',15,2,Mt,N); %产生N个威布尔分布样本:M*N%
  14.     y=log(x);                             %求相应的极值分布样本:1*N%
  15.     w=mean(y);                       %求该极值样本的均值和标准差1*N%
  16.     v=std(y);
  17.    
  18.     for j=1:N
  19.         u=j;   
  20.         [rl,cdfrl]=Gibbs(m,Mt,alpha,n,v,w,t,u);
  21.         
  22.         N_rl(j,:)=rl;                             
  23.         N_mean(j)=mean(rl);             %N_mean为N*1%
  24.         N_var(j)=dot((rl-0.9),(rl-0.9));%N_var为N*1%
  25.         N_cdf(j)=mean(cdfrl);           %N_cdf为N*1%
  26.     end
  27.    
  28. %对每一个威布尔样本计算方差和真实的置信水平,方差为相对于可靠度真值
  29. %即0.9的离散程度,真实的置信水平为在每一个模拟出的分位点处威布尔分布的
  30. %累积概率值%
  31.     fwd(N)=mean(N_mean);      %样本量为N时,最后表格中的分位点取值%
  32.     mean_var(N)=mean(N_var);
  33.     mean_cdf(N)=mean(N_cdf);
  34.    
  35.      fprintf('Finishing the %s  th coculating \n ',SS);
  36. end

  37. %%
复制代码
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
epoh + 1 + 1 + 1 见解精辟,学识丰博.

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

劳动经济学

使用道具

8
O(∩_∩)O~! 发表于 2011-5-10 12:03:39 |只看作者 |坛友微信交流群
7# tulipsliu

非常感谢!没看懂,先好好学习下

使用道具

9
tulipsliu 在职认证  发表于 2011-5-10 13:12:10 |只看作者 |坛友微信交流群
8# O(∩_∩)O~! 我也是随便改,这个程序运行时间太长;
我也常跑金融模型方面的程序。有一个做3因素定价的模型,40个资产标的,从1962年到2005年的时间序列。MATLAB跑了3个多小时候。长时间的等待是痛苦的。

这个函数写得不好,写的再好点会更漂亮的。
刚才看论坛其他人的程序交流,又遇到 epoh。这个人很强哦。不论是用R,还是使用MATLAB,都很不错。
不过我发现很多人学习MATLAB,还是从以前的BASIC语言系列来的。程序过于长,而且阅读不方便。
我一个朋友五一节到我这里讨论空间计量模型。他们更离谱。把数据放在程序文件里,一下就是300行。呵呵

我呢,把他的数据存储在两个文件里(因为除了经济数据,还需要空间数据)。然后写脚本文件只调用很多函数。才40多行就解决了。

好的函数可以提高程序运行的效率,因为一些好的函数要重复使用。然后呢,精简的脚本可以让自己建模时,思路更清晰。

希望有机会继续和大家一起学习,交流。
劳动经济学

使用道具

10
O(∩_∩)O~! 发表于 2011-5-10 13:46:39 |只看作者 |坛友微信交流群
9# tulipsliu
谢谢您!受教了!

您的意思是不是将程序按实现的功能不同,建立不同的文件呢?

使用道具

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

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

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

GMT+8, 2024-4-28 17:29