菜鳥之路——數學建模之蒙特卡羅積分(投點法,平均值法)+牛頓法解方程組MATLAB實現

蒙特卡羅方法這裏不再贅述
1,例題
菜鳥之路——數學建模之蒙特卡羅積分(投點法,平均值法)+牛頓法解方程組MATLAB實現
Matlab代碼:

%蒙特卡羅法求積分
N=1000;        %隨機選取1000個點
x=rand(1,N);
y=rand(1,N);
S=sum(y<=sin(x)/x)/N    %比較每一個元素,y<=sin(x)/x則爲1

運行結果:
S = 0.9150
2,例題
菜鳥之路——數學建模之蒙特卡羅積分(投點法,平均值法)+牛頓法解方程組MATLAB實現
Matlab代碼:

N=100000;        %隨機選取100000個點
x=rand(1,N);
y=rand(1,N);
S=sum(exp((x+y).^2))/length(x)   %(1-0)*(1-0)*函數的平均值(也就是長乘寬乘高)

運行結果:
S = 4.9167
3,練習題
菜鳥之路——數學建模之蒙特卡羅積分(投點法,平均值法)+牛頓法解方程組MATLAB實現
1,投點法

N=1000;        %隨機選取1000個點
x=rand(1,N);
y=rand(1,N);
S=sum(y<=sqrt(1-x.^2))/N  

運行結果
S = 0.7940 (半徑爲1 的1/4圓的面積)
2,平均值法

N=10000;        %隨機選取10000個點
x=rand(1,N);
y=rand(1,N);
S=sum(sqrt(1-x.^2))/N   

運行結果
S = 0.7881 (半徑爲1 的1/4圓的面積)

Newton法解二元一次方程
菜鳥之路——數學建模之蒙特卡羅積分(投點法,平均值法)+牛頓法解方程組MATLAB實現
Matlab代碼

function [ x,k,index ] = Newtons( x , eq,it_max )
index=0;
k=-1;
while(k<=it_max)
    x1=x;
    [J,F]=funs(x);
    x=x-(J\F')';
    norm=sqrt((x-x1).^2);
    if(norm<eq)
        index=-1;break
    end
    k=k+1;
end
end

function [ J,F] = funs(x)
F=[x(1)^2+x(2)^2-5,(x(1)+1)*x(2)-(3*x(1)+1)];
J=[2*x(1),2*x(2);x(2)-3,x(1)+1];
end

[x,k,index]=Newtons([0,1],1e-5,100)

計算結果
x =

1.0000 2.0000

k =

4

index =

-1

知識點
1,函數的建立與嵌套
函數嵌套時直接使用即可,不需要考慮不同的m文件裏,需不需要聲明一下。
遇到問題:輸入參數的數目不足。
就是字面意思,仔細檢查一下輸入的參數。
2,二元一次方程的求解,也就是求解雅克比方程時。直接Ax=B,令x=A\B,或者x=B*A^(-1)
當時傻了,還想着找個函數解方程。

例題
菜鳥之路——數學建模之蒙特卡羅積分(投點法,平均值法)+牛頓法解方程組MATLAB實現

    function [ x,k,index ] = Newtons( x , eq,it_max )
index=0;
k=-1;
while(k<=it_max)
    x1=x;
    [J,F]=funs(x);
    x=x-J\F';
    norm=sqrt((x-x1).^2);
    if(norm<eq)
        index=-1;break
    end
    k=k+1;
end

end

function [J,F] = funs(x)
F=[x(1)^2+x(2)^2-1,x(1)^3-x(2)];
J=[2*x(1),2*x(2);3*x(1)^2,1];
end

[ x,k,index ] = Newtons( [-0.8;0.6] , 10^(-3),10000000 )

運行結果

x =
0.8257
0.5642
k =1563483
index = -1

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章