matlab數值積分方法求pi的近似值及其比較
求pi的近似值可以說是比較經典的問題了。在各種軟體環境下,用過包括蒙特卡洛等各種方法求過pi的近似值。今天給大家帶來通過數值積分的方法來求pi的近似值,並進行一個簡單的誤差分析
clear;
clc;
m=1000;
n=2*m;%設定劃分個數n
a=0;%積分上限
b=1;%積分下限
h=(b-a)/n;
w_x=1;%設定高斯積分公式的權值
k=10;%高斯公式使用的正交多項式的數目
%ps:積分函式:編寫函式f(x)寫入
%% 復化梯形公式求pi
s=0;
for i=1:n-1;
s=s+f(a+h*i);
end
format long;
Pi_T=4*h*(1/2*f(a)+s+1 /2*f(b));
%% 復化辛普森公式求pi
s1=0;s2=0;
for i=1:m-1
s1=s1+f(a+2*i*h);
s2=s2+f(a+(2*i-1)*h);
end
s2=s2+f(b-h);
Pi_S=4/3*h*[f(a)+f(b)+2*s1+4*s2];
%% 高斯公式求pi(未復化)
p(1)=sym(a);p(2)=sym(b);
for i=3:k+1
syms x;
delta(i)=int(w_x*x*p(i-1)^2,x,a,b)/int(w_x*p(i-1)^2,x,a,b);
gamma2(i)=int(w_x*p(i-1)^2,x,a,b)/int(w_x*p(i -2)^2,x,a,b);
gamma2(3)=0;
p(i)=(x-delta(i))*p(i-1)-gamma2(i)*p(i-2);
end
p(1:k)=p(2:k+1);
p(k+1)=[];
p%正交多項式集合
%p=expand(p)
%做w(x)=1的k個正交多項式存放到陣列p中;
%%
coe=sym2poly(p(k));
xn=sort(roots(coe)');%最高階正交多項式零點
for i=1:k-1
A(i,1:k-1)=subs(p(i),x,xn);
A=double(A);
end%求權重中的係數矩陣A
B=[int(w_x*p(1)^2,0,1);zeros(k-2,1)];%求權重方程組右端項
w(1:k-1)=inv(A)*B;
w=double(w);%求得權重w(i)
Pi_G=double(4*w*subs(1/(1+x^2),xn)' );%高斯公式求得的pi值
%% 復化高斯公式 ( 兩點 w(x)=1 )
s=0;
for i=0:m-1
s=s+f(a+(2*i+1-sqrt(1/3))*h)+f(a+(2*i+1+sqrt(1/3))*h);
end
Pi_GC=4*h*s;
%% 輸出估計值與誤差與視覺化
Pi_T
Pi_S
Pi_G
Pi_GC
error_T=abs(pi-Pi_T)
error_S=abs( pi-Pi_S)
error_G=abs(pi-Pi_G)
error_GC=abs(pi- Pi_GC)
%plot([error_T error_S error_G error_GC])
原理和程式碼都比較簡單,就不做解釋了,學過數值積分的同學都懂。更多問題可以諮詢我的老師宋士蒼。郵箱:[email protected].edu.cn 宋老師是屬於計算數學中有限元分析方向的。當然,假如有工科科研的,做出來偏微分方法解不出來的,也可以找我的老師,他會給你提供一個數值解法。
相關推薦
matlab數值積分方法求pi的近似值及其比較
求pi的近似值可以說是比較經典的問題了。在各種軟體環境下,用過包括蒙特卡洛等各種方法求過pi的近似值。今天給大家帶來通過數值積分的方法來求pi的近似值,並進行一個簡單的誤差分析 clear; cl
matlab數值積分中函式積分的4種方法
1. 採用inline行內函數 Matlab中可以有采用幾種不同的方式來指定被積函式。對於簡單的、長度不超過一行的公式採用inline命令比較方便。例如, 可用下面的語句進行計算 >> f=inline('1/sqrt(1+x^4)') %
matlab數值積分的計算
標籤(空格分隔): matlab 積分 數值 計算 matlab數值積分 1 Gauss-Hermite積分 1.1 測試Gauss-Hermite積分函式gaussHermiteIntegral() clc,clear format long [email&
字元定位--函式指標 + cal(f, a, b)用梯形公式求函式f(x)在[a, b]上的數值積分
字元定位 #include<stdio.h> char *match(char *s, char ch); int main(void){ char ch, str[80],*p = NULL; scanf("%s", str); getcha
程式基本演算法習題解析 求pi的近似值
思路: pi/4 = 1 - 1/3 +1/5 -1/7 + ... 附上程式碼: // Chapter5_3.cpp : Defines the entry point for the application. // 求pi的近似值 #include "stdafx.h"
《計算方法》 李曉紅等 第六章 數值積分 例題 程式碼
#include "stdafx.h" #include <math.h> // 數值積分 // Newton-Cotes積分公式 void NewtonCotesIntegra
matlab的數值積分
matlab實現標準正太分佈表:function zhengtaifenbu syms t x a fun=exp(-t^2/2)/sqrt
MATLAB sort函式應用——求一個矩陣前L個最大值及其在矩陣中的位置
For vectors, sort(X) sorts the elements of X in ascending order. For matrices, sort(X) sorts each column of X in ascending order.For N-D
利用統計方法求π(PI),並可視化顯示求解過程(C++&&OpenCV)
統計方法求π的方式:如果在正方形區域內隨機產生大量的均勻分佈的點,那麼落入內切圓和正方形中的隨機點個數的比值等於它們的面積之比。該比值乘以4,即為PI值。這就是統計方法求π的過程。 視覺化求解過程是指:把產生隨機點的過程在影象中顯示,視覺化過程用到了opencv庫,
玩轉matlab之一維 gauss 數值積分公式及matlab源代碼
tla 定積分 而已 qq 群 matlab UNC 討論 log 數值積分 目錄 標準區間 一般區間 數值實驗 實驗一 實驗二
玩轉matlab之一維 gauss 數值積分公式及matlab原始碼
目錄 標準區間 一般區間 數值實驗 實驗一 實驗二 總結 下節預告 matlab程式碼 在數值分
玩轉 matlab 之二維 gauss 數值積分公式使用及 matlab 原始碼(1)-常量區間
目錄 一. 標準區間 二. 一般區間 三. 數值實驗(沒有程式設計的計算是不完整的) 四. 總結和下節預告 五. matlab原始碼 繼續上一篇一維gauss積分
玩轉 matlab 之二維 gauss 數值積分公式使用及 matlab 源代碼(1)-常量區間
sig 數值 play 太多的 cas setup atl 需要 滿足 目錄 一. 標準區間 二. 一般區間 三. 數值實驗(沒有編程的計算是不完整的) 四. 總結和下節預
單目視覺SLAM:采用逆深度參數化的方法求取深度信息的過程
ive 魯棒性 圖片 lte 有著 研究 tla 一次 攝像機 一種實時的單目視覺SLAM改進算法 該算法采用一個攝像頭作為外部傳感器來提取機器人行進過程中周圍環境的特征信息,用實時性良好的FAST提取環境特征點,結合逆深度參數化進行特征點非延時初始化,用壓縮擴展卡爾曼濾波
傻瓜方法求集合的全部子集問題(java版)
post 分解 ipp targe 找到 creat dojo class length 給定隨意長度的一個集合。用一個數組表示,如{"a", "b","c"},求它的全部子集。結果是{ {a},
[ SHELL編程 ] shell編程中數值計算方法實例
最長 否則 style += int 完整 精度 font pan SHELL編程中經常會涉及到數值的相關計算,有時候對於這些計算命令的時候場景容易忘記或者混淆,這裏針對常用的計算做一個總結。主要包括let、bc、expr、(())等。 1、let 使用格式
三個獲取瀏覽器URL中參數值的方法
() 遇到 col reg object win 瀏覽器 component 般的 這三個是一般的獲取瀏覽器傳的參數值的方法,之前有用unescape()解碼的方法,但是遇到漢字會產生亂碼,所以用decodeURI(); 方法一: function getQueryStr
shell編程基礎一(多種方法求值1+2+..+100)
循環#SHELL編程基礎一(多種方法求值1+2+..+100)##為什麽要學好shell shell腳本語言是實現linux系統管理及自動化運維所必備的重要工具,linux系統的底層及基礎應用軟件的核心大都涉及shell腳本的內容。 每一個合格的linux系統管理員或運維工程師,都需要能夠熟練地編寫shell
下列給定程序中函數fun的功能是:用下面的公式求π的近似值,直到最後一項的絕對值小於指定的數為止,π/4=1-1/3+1/5-1/7+...,例如,程序運行後,輸入0.0001,程序輸出3.1414
print fab stdio.h 運行 return printf main blog 程序 #include <math.h> #include <stdio.h> float fun ( float num ) { int s
定義抽象類Shape,抽象方法為showArea(),求出面積並顯示,定義矩形類Rectangle,正方形類Square,圓類 Circle,根據各自的屬性,用showArea方法求出各自的面積,在main方法中構造3個對象,調用showArea方法。(體現多態)
子類 protected new 都是 package 使用 類指針 3.1 shape 實現多態的三個條件:1.要有繼承2.要有抽象方法重寫3.用父類指針(引用)指向子類對象 重載重寫重定義的區別: 1.重載:在同一個類中進行; 編譯時根據參數類型和個數決定方法調用;