Matlab蒙特卡洛法计算圆周率怎么写最快

Matlab蒙特卡洛法计算圆周率怎么写最快,第1张

function piva = PiMonteCarlo(n)

% PiMonteCarlo(n),用随机投点法模拟圆周率pi,作出模拟图 n为投点次数,可以是非负整数标量

% 或向量

% piva = PiMonteCarlo(n),用随机投点法模拟圆周率pi,返回模拟值piva 若n为标量(向

% 量),则piva也为标量(向量)

x = 0;y = 0;d = 0;

m = length(n); % 求变量n的长度

pivalue = zeros(m,1); % 为变量pivalue赋初值

% 通过循环用投点法模拟圆周率pi

for i = 1:m

x = 2rand(n(i),1)-1; % 随机投点的横坐标

y = 2rand(n(i),1)-1; % 随机投点的纵坐标

d = x^2+y^2;

pivalue(i) = 4sum(d <= 1)/n(i); % 圆周率的模拟值

end

if nargout == 0

% 不输出圆周率的模拟值,返回模拟图

if m > 1

% 如果n为向量,则返回圆周率的模拟值与投点个数的散点图

figure; % 新建一个图形窗口

plot(n,pivalue,'k'); % 绘制散点图

h = refline(0,pi); % 添加参考线

set(h,'linewidth',2,'color','k'); % 设置参考线属性

text(105n(end),pi,'\pi','fontsize',15); % 添加文本信息

xlabel('投点个数'); ylabel('\pi的模拟值'); % 添加坐标轴标签

else

% 如果n为标量,则返回投点法模拟圆周率的示意图

figure; % 新建一个图形窗口

plot(x,y,'k'); % 绘制散点图

hold on;

% 绘制边长为2的正方形

h = rectangle('Position',[-1 -1 2 2],'LineWidth',2);

t = linspace(0,2pi,100); % 定义一个角度向量

plot(cos(t),sin(t),'k','linewidth',2); % 绘制单位圆

xlabel('X'); ylabel('Y'); % 添加坐标轴标签

title(['Pi的模拟值: ' num2str(pivalue)]); % 添加标题

axis([-11 11 -11 11]); axis equal; % 设置坐标轴属性

end

else

piva = pivalue; % 输出圆周率的模拟值

end

=============================================

p=PiMonteCarlo([1000:5000:50000])'

p =

Columns 1 through 7

32200 31093 31280 31328 31286 31500 31428

Columns 8 through 10

31427 31452 31472

clear;

close all;

Fd=1;%消息序列的采样速率

Fs=3Fd;%以调信号的采样速率

M=4;%4比特调制,qpsk

SNR=0:12;%去信噪比从0到12

SNR1=0:01:12;%步进为01

for n=1:length(SNR)%对每一snr计算一次

Eb_N0=10^(SNR(n)/10);%换算10进制

sgma=sqrt(1/(4Eb_N0));%噪声信号的平方差开根号

x=randint(10000,1,M);%产生10000个输入符号

y=dmodce(x,Fd,Fs,'psk',M);%调制

ynoise=y+sqrt(Fs/Fd)sgma(randn(length(y),1)+1irandn(length(y),1));%经过信道加噪声

z=ddemodce(ynoise,Fd,Fs,'psk',M);%解调

[numbers,pm(n)]=symerr(x,z);&求误符号率

end

for m=1:length(SNR1)%此循环用于画出理想的误符号率曲线

Eb_N0=10^(SNR1(m)/10);

pm1(m)=erfc(sqrt(log2(M)Eb_N0)sin(pi/M));

end

semilogy(SNR,pm,'-',SNR1,pm1);%纵坐标取对数

xlabel('信噪比SNR/db');

ylabel('误码率(pe)');

legend('仿真误码率曲线','理论误码率曲线');

以上就是关于Matlab蒙特卡洛法计算圆周率怎么写最快全部的内容,包括:Matlab蒙特卡洛法计算圆周率怎么写最快、求matlab大神解读 详细分析下下面这个程序吧 是关于QPSK蒙特卡洛仿真的、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9502843.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存