Mathematica程式——計算函數對應映像所圍成的面積

來源:互聯網
上載者:User

 【問題】試求如下曲線所圍成圖形的面積。

x^2 + y^2 ≤ 16; x^2/36 + y^2  ≤ 1; (x - 2)^2 + (y+1) ≤ 9;

第一種演算法:

Area[x1_, x2_, y1_, y2_, step_] :=Block[{nx, ny, i, j, xx, yy, s = 0},    nx = IntegerPart[(x2 - x1)/step];    ny = IntegerPart[(y2 - y1)/step];    For[i = 1, i ≤ nx, i++,      For[j = 1, j ≤ ny, j++, xx = x1 + i*step; yy = y1 + j*step;        If[xx^2 + yy^2 ≤ 16 && xx^2/36 + yy^2 ≤ 1 && (xx -     2)^2 + (yy + 1)^2 ≤ 9, s = s + step^2]]];    Return[s]]

【運行結果】

Area[-2, 6, -2, 2, 0.01]8.8312Area[-1, 4, -1, 1, 0.001]8.83922

第一種方法的思想很簡單,就是細分矩形地區,將落在目的地區域內的小矩形的面積進行累加

面積的近似程度與細分的精度step有關,演算法較為笨拙,計算時間長,演算法複雜度為O(1/step^2)。

第二種方法:基於機率思想的蒙特卡羅演算法的啟迪

AreaMC[x1_, x2_, y1_, y2_, n_] :=Block[{rx, ry, i, s, calin = 0},    For[i = 1, i ≤ n, i++,      rx = Random[Real, {x1, x2}];      ry = Random[Real, {y1, y2}];      If[rx^2 + ry^2 ≤ 16 && rx^2/36 +       ry^2 ≤ 1 && (rx - 2)^2 + (ry + 1)^2 ≤ 9, calin = calin + 1]];    s = (x2 - x1)*(y2 - y1)*N[calin/n];    Return[s]]

 

AreaMC[-2, 6, -2, 2, 1000000]8.85734

 

該演算法是近似演算法,演算法的複雜度依賴於隨機產生的點的個數n,複雜度為O(n)

 

 

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.