[size=13.3333px]这个程序的主要思想就是求参数的模拟值,使得模拟值d(1,j)与真值a1的误差项是ep.不知道,问题出现在哪里,老觉得if语句没有用上。
n=10000;
R=5;
m1=0.01;
m2=10^(-4);
ep=10^(-3);
a1=2;
C=zeros(1,R);
d=zeros(1,R);
for(j=1:R)
w1=zeros(1,n);
w2=zeros(1,n);
dt=1;
for i=1:n
w1(1,i)=cumsum(dt^0.5.*randn(1,1));
w2(1,i)=cumsum(dt^0.5.*randn(1,1));
end
x=zeros(1,n);
y=zeros(1,n);
x(1,1)=1;
y(1,1)=1;
for(i=2:n)
x(1,i)=-(a1/m1)*x(1,i-1)*m2+(1/m1)*sin(y(1,i-1))*m2+(1/sqrt(m1))*(w1(1,i)-w1(1,i-1));
y(1,i)=x(1,i-1)*m2+(w2(1,i)-w2(1,i-1));
end;
A=zeros(1,n);
z=zeros(1,n);
sum1=zeros(1,n);
sum2=zeros(1,n);
for(k=2:n)
sum1(1,1)=sqrt(m1)*x(1,1)*(w1(1,2)-w1(1,1))+x(1,1)*sin(y(1,1))*m2;
sum2(1,1)=x(1,1).^2*m2;
z(1,k)=x(1,k)*sqrt(m1)*(w1(1,k)-w1(1,k-1))+x(1,k)*sin(y(1,k))*m2;
A(1,k)=x(1,k)^2*m2;
sum1(1,k)=sum(1,k-1)+z(1,k);
sum2(1,k)=sum(1,k-1)+A(1,k);
end;
C(1,j)=sum1(1,n)/sum2(1,n);
d(1,j)=C(1,j);
if abs(a1-d(1,j))<=ep
d(1,j);
else
end;
end;