수치 분석 -Gauss-Legendre 포인트 구하기(Matlab 실현)

5707 단어 수치 분석matlab
2020 4.4
제목: 가우스 구적법으로 포인트를 계산하는 프로그램을 작성하고(가우스 포인트는 1,2,3,4,5를 취하면 된다) 포인트 계산에 사용
∫ 0 1 sin ⁡ x x d x\int_{0}^{1}\frac{\sin x}{x} d x ∫01​xsinx​dx
부분 고스 러장드 구적 공식의 결점과 구적 계수:
n x k A k n x k A k 0 0 2 3 ± 0.8611363116 0.3478548451 1 ± 0.5773502692 1 ± 0.3399810436 0.6521451549 2 ± 0.7745966692 0.5555555555 4 ± 0.9061798459 0.2369268851 0 0.8888888888 ± 0.5384693101 0.4786286705 0 0.568888889\begin{array}{ccc||ccc}\hline n & x_{k} & A_{k} & n & x_{k} & A_{k}\\\hline 0 & 0 & 2 & 3 &\pm 0.8611363116 & 0.3478548451\\1 &\pm 0.5773502692 & 1 & &\pm 0.3399810436 & 0.6521451549\\2 &\pm 0.7745966692 & 0.5555555555 & 4 &\pm 0.9061798459 & 0.2369268851\\& 0 & 0.8888888888 & &\pm 0.5384693101 & 0.4786286705\\& & & &0& 0.568888889\\\hline\end{array} n012​xk​0±0.5773502692±0.77459666920​Ak​210.55555555550.8888888888​n34​xk​±0.8611363116±0.3399810436±0.9061798459±0.53846931010​Ak​0.34785484510.65214515490.23692688510.47862867050.568888889​​
구간 변환과 함수 변환:
구간[a,b]->[-1,1]: x=12(a+b)+12(b-3a)tx=\rac{1}{2}(a+b)+\rac{1}{2}(b-a)tx=21(a+b)+21(b-3-a)t
함수 변환: ∫a b f(x) d x = b -3 a 2 ∫-3 1 1 f [1 2(a + b) + 1 2(b -3 a) t] d t\int{a}^{b} f(x)\mathrm{d} x=\frac{b-a}{2}\int_{-1}^{1} f\left[\frac{1}{2}(a+b)+\frac{1}{2}(b-a) t\right]\mathrm{d} t ∫ab​f(x)dx=2b−a​∫−11​f[21​(a+b)+21​(b−a)t]dt
구체적 실현
function [f1,I] = GaussInt(f,a,b,n)
%     Gauss-Lagendre        
%      ,      ,             
syms t
f1=subs(f,symvar(f),(b+a)/2+(b-a)*t/2)*(b-a)/2;
switch n %            Gauss  
    case 1
    I=eval(2*subs(f1,symvar(f1),0));
    case 2
    I=eval(subs(f1,symvar(f1),0.5773503))+...
      eval(subs(f1,symvar(f1),-0.5773503));
    case 3
    I=0.5555555555*eval(subs(f1,symvar(f1),0.7745966692))+...
      0.5555555555*eval(subs(f1,symvar(f1),-0.7745966692))+...
      0.8888888888*eval(subs(f1,symvar(f1),0));
    case 4
    I=0.3478548451*eval(subs(f1,symvar(f1),0.8611363116))+...
      0.3478548451*eval(subs(f1,symvar(f1),-0.8611363116))+...
      0.6521451549*eval(subs(f1,symvar(f1),0.3399810436))+...
      0.6521451549*eval(subs(f1,symvar(f1),-0.3399810436));
    case 5
     I=0.2369268851*eval(subs(f1,symvar(f1),0.9061798459))+...
      0.2369268851*eval(subs(f1,symvar(f1),-0.9061798459))+...
      0.4786286705*eval(subs(f1,symvar(f1),0.5384693101))+...
      0.4786286705*eval(subs(f1,symvar(f1),-0.5384693101))+...
      0.568888889*eval(subs(f1,symvar(f1),0));
end



구덩이를 밟는 일지
오류:
>> [F,I]=GaussInt(sin(x)/x, 0, 1,1)
              。

   sym/subsref (line 870)
            R_tilde = builtin('subsref',L_tilde,Idx);

이유:
I=2*f1(0);

f1은 하나의 기호 표현식이지 함수가 아니다
오류:
>> [F,I]=GaussInt(sin(x)/x, 0, 1,1)
         'x'。

   GaussInt (line 5)
f1=subs(f,x,(b-a)/2+(b-a)*t/2)*(b-a)/2;

이유:
syms x

작성된 함수에 정의된 변수 x가 없습니다
향상된 기능:
f1=subs(f,symvar(f),(b-a)/2+(b-a)*t/2)*(b-a)/2;

이렇게 하면 변수를 성명하지 않아도 된다
배운 matlab 문법
matlab 코드 주석
%
빠른 속도:
Ctrl +t
Ctrl+ r
switch 다분지 구조
switch n %            Gauss  
    case 1
    I=eval(2*subs(f1,symvar(f1),0));
    case 2
    I=eval(subs(f1,symvar(f1),0.5773503))+...
      eval(subs(f1,symvar(f1),-0.5773503));
    case 3
    I=0.5555555555*eval(subs(f1,symvar(f1),0.7745966692))+...
      0.5555555555*eval(subs(f1,symvar(f1),-0.7745966692))+...
      0.8888888888*eval(subs(f1,symvar(f1),0));
    case 4
    I=0.3478548451*eval(subs(f1,symvar(f1),0.8611363116))+...
      0.3478548451*eval(subs(f1,symvar(f1),-0.8611363116))+...
      0.6521451549*eval(subs(f1,symvar(f1),0.3399810436))+...
      0.6521451549*eval(subs(f1,symvar(f1),-0.3399810436));
    case 5
     I=0.2369268851*eval(subs(f1,symvar(f1),0.9061798459))+...
      0.2369268851*eval(subs(f1,symvar(f1),-0.9061798459))+...
      0.4786286705*eval(subs(f1,symvar(f1),0.5384693101))+...
      0.4786286705*eval(subs(f1,symvar(f1),-0.5384693101))+...
      0.568888889*eval(subs(f1,symvar(f1),0));
    otherwise
   	  disp("    1-5")
end

matlab 함수 작성
MATLAB에서 함수는 별도의 파일에 정의됩니다.파일 함수의 파일 이름은 같아야 합니다.
함수는 여러 개의 입력 매개 변수를 받아들일 수 있고 여러 개의 출력 매개 변수를 되돌릴 수 있다.
함수문의 구문은 다음과 같습니다.
function [out1,out2, ..., outN] = myfun(in1,in2,in3, ..., inN)

예:
mymax라는 함수 파일을 만듭니다.m 및 다음 코드를 입력합니다.
function max = mymax(n1, n2, n3, n4, n5)
%This function calculates the maximum of the
% five numbers given as input
max =  n1;
if(n2 > max)
    max = n2;
end
if(n3 > max)
   max = n3;
end
if(n4 > max)
    max = n4;
end
if(n5 > max)
    max = n5;
end

모든 함수의 첫 줄은 function 키워드로 시작해야 합니다.그것은 함수의 이름과 매개 변수의 순서를 제시했다.
우리의 예에서 mymax 함수는 5개의 입력 매개 변수와 출력 매개 변수가 있다.
줄 문장의 기능을 설명한 도움말 텍스트입니다.입력할 때 다음과 같은 라인을 인쇄합니다.
help mymax

MATLAB는 위의 문을 실행하여 다음 결과를 반환합니다.
This function calculates the maximum of the
 five numbers given as input

이 함수를 호출할 수 있습니다.
mymax(34, 78, 89, 23, 11)

MATLAB는 위의 문을 실행하여 다음 결과를 반환합니다.
ans =
    89

참고: 여러 반환 값을 출력하는 경우:
>> [F,I]=GaussInt(sin(x)/x, 0, 1,2)
 
F =
 
sin(t/2 + 1/2)/(2*(t/2 + 1/2))
 

I =

   0.946041135536224


matlab의 데이터 형식은 길어진 1차원 벡터를 저장할 수 있습니다.
처음에는 결점과 계수를 저장해서 순환으로 대응하는 역행을 하려고 했어요.
A=[1,2,3,4];
B=[5];
C=[6,7];
p={A,B,C}
      :
>> p{1}(1,2)
ans =
2

원포수 그룹

좋은 웹페이지 즐겨찾기