蒙特卡羅模擬基於MATLAB與c語言混合編程

來源:互聯網
上載者:User

 

代碼如下:

function y=carlo(n,k)
%n is the number of simulations
%k is the number of trails
%y is the reslut of every trails
y=sum(sign(0.51-rand(n,k)));
hist(y);

---------------------------------------------------------------------------------------------------------------------------------------------

#include "stdio.h"
#include "stdlib.h"
#include "carlo.h"

void disp(const mxArray *);

void main(int argc,char *argv[])
{
    double n,k;
    if (argc==1||argc==2)
    {
        printf("please enter two num,n and k");
        exit(1);
    }
    else
    {
        n=(double)atoi(argv[1]);
        k=(double)atoi(argv[2]);
    }

    if(!mclInitializeApplication(NULL,0))
    {
        printf("can't InitializeApplication");
        exit(1);
    }
    if(!carloInitialize())
    {
        printf("can't InitializeLibary");
        exit(1);
    }

    mxArray *N,*K,*Y=NULL;
    N=mxCreateDoubleScalar(n);
    K=mxCreateDoubleScalar(k);

    mlfCarlo(1,&Y,N,K);
    disp(Y);

    mclWaitForFiguresToDie(NULL);
    mxDestroyArray(N);
    mxDestroyArray(K);
    mxDestroyArray(Y);
    carloTerminate();
    mclTerminateApplication();

}

void disp(const mxArray *in)
{
    int i,j,r,c;
    double *data;

    data=mxGetPr(in);
    r=mxGetM(in);
    c=mxGetN(in);
   
    printf("the result is/n");
    for(i=0;i<r;i++)
        for(j=0;j<c;j++)
            printf("%.0lf/t",data[i*c+j]);

}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.