请高手帮我看看下面的matlab程序,怎么能提高运行速度,数据也不算大的,但运行了将近两小时!

clc;
clear all;
n=1:1:1000;
f=zeros(size(n));
f1=zeros(size(n));
f=zeros(size(n));
y=1;
g=zeros(size(n));
f2=zeros(size(n));
F1=zeros(size(n));
F2=zeros(size(n));
g1=zeros(size(n));
g2=zeros(size(n));
F3=zeros(size(n));
v=1;
lambda=((2.^(-2./v).*gamma(1./v))./(gamma(3./v))).^(1./2);
g2=@(x)(v.*exp((-1./2).*abs(x./lambda).^v))./(lambda.*2.^(1+1/v).*gamma(1./v));
mu=integral(@(x) x.*g2(x),-inf,inf);
for s=1:numel(n)
x=slicesample(0.5,10000,'pdf',g2);
[M,N]=size(x);
for k=1:M
if x(k)<=y
I=1;
else
I=0;
end
f1(s)=x(k).*I;
f(s)=f(s)+f1(s);
g(s)=f(s)./M;
end
f2(s)=integral(@(x) g2(x),-inf,y);
X(s)=mean(x);
F1(s)=(g(s)-y.*f2(s))./(y-X(s));
g1(s)=integral(@(x) x.*g2(x),-inf,y);
F2(s)=(g1(s)-y.*f2(s))./(y-mu);
F3(s)=F1(s)-F2(s);
end
boxplot(F3)

程序没有大的问题,可以运行。有个问题n=1:1:1000; 的步长太小了,所以运行很长。建议你改一下步长,如n=1:10:1000,用我电脑运行的时间为 237.718235 seconds.

运行结果

追问

主要是对程序里边的F3重复求1000次的,根据得到的1000个数据画图的,请问是不是我这样写的程序有问题?步长改了就得不到那么多的F3了,接着还要对其中的x的分别产生两种不同容量的随机数,同时做三个图,一个都这么慢,三个放一起更不好弄了!

追答

要么用matfile()建立mat文件。然后直接访问和更改 MAT 文件中的变量,而不加载到内存中。这样会提高运行速度。

追问

这个mat文件我不是太会用,可不可以麻烦您说具体一点,比如我的x要分别取100、1000、10000,三种样本量的,重复1000次画图!

温馨提示:答案为网友推荐,仅供参考
相似回答