수치 분석 -Gauss-Legendre 포인트 구하기(Matlab 실현)
제목: 가우스 구적법으로 포인트를 계산하는 프로그램을 작성하고(가우스 포인트는 1,2,3,4,5를 취하면 된다) 포인트 계산에 사용
∫ 0 1 sin x x d x\int_{0}^{1}\frac{\sin x}{x} d x ∫01xsinxdx
부분 고스 러장드 구적 공식의 결점과 구적 계수:
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} n012xk0±0.5773502692±0.77459666920Ak210.55555555550.8888888888n34xk±0.8611363116±0.3399810436±0.9061798459±0.53846931010Ak0.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 ∫abf(x)dx=2b−a∫−11f[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
원포수 그룹
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
guass method텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.