본문 바로가기
삽질기초/ETC

[MATLAB] 수치해석

by @가을바람 2009. 4. 16.

%(1) 임의의 비선형 함수 f(x)를 설정하고, 이를 어느 한 점 c에서 4차의 Taylor 다항식으로 근사화한 값을 구하시오.

%(2) 위에서 설정한 함수 f(x)를 이용하여 g(x) = f(x) - x - 1 = 0 를 만족하는 해를 이분법 및 Matlab을 사용하여 구하시오.

%답에는 소스 코드와 실행 결과 및 답을 명시하시오.

%(3) h(x) = f(x) - exp(-x) -1 = 0 를 만족하는 해를 Newton 방법 및 Matlab을 사용하여 구하시오.

%답에는 소스 코드와 실행 결과 및 답을 명시하시오.

 

 

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%테일러 다항식%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

 

syms x

c = 0;

val_1 = -10: 1 : 10; % x 입력값

n = 4; %n차까지의 테일러 급수 전개

 

fx = (x^4) -(2.*x^3) -(x^2) +5;% 비 선형 함수 선언.

 

p4 = taylor(fx, n, c); % 4차까지의 테일러 급수 전개, 이때 c=0

 

%그래프 그리기

sol_1 = subs(fx, val_1);

sol = subs(p4, val_1);

 

plot(val_1, sol_1) %fx의 그래프

hold

 

plot(val_1, sol, '-r') %P4 의 그래프

title('fx = x^4 + 2*x^3 - x^2 + 2 // p4 = taylor(fx, 4, 0) n=4, c=0')

grid on

 

axis([-10 10 -500 5000]);

%그래프 모양이 이상한것 같습니다만 각각의 변수의 값을 찾아보면 Y값이 제대로 나오고 있다는 것을 볼 수 있습니다.

 

%결과

fx

p4

 

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%(2) 이분법%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

 

gx = fx - x - 1;

%그래프 그리기

sol_2 = subs(gx, val_1); %gx 에 대입

figure

plot(val_1, sol_2)

title('이분법 gx = fx - x - 1') % x^4-2*x^3-x^2+4-x

grid on

hold

%그래프 끝

 

an = 0; % 구간

bn = 5; % 구간

cn = (an+bn)/2; %중간값

n=0; % 카운트

error = 0.000000001; % 허용되는 오차의 한계

 

while (bn - cn) >= error % bn - cn이 허용하는 오차보다 작을 때 까지(클 때) 계속 반복

 

f_b = subs(gx, bn); %함수에 대입

f_c = subs(gx, cn); %함수에 대입

n = n +1;

plot(bn, subs(gx, bn),'ro')

plot(cn, subs(gx, cn),'bo')


if (f_b * f_c) <= 0 %b와 c의 곱이 음수.

an = cn;

cn = (an+bn)/2; %

else %b와 c의 곱이 양수

bn = cn;

cn = (an+bn)/2;

end

fprintf('나눈 횟수:%2.0f , an:%2.10f, bn:%2.10f, cn:%2.10f 오차:%2.4e \n', n,an,bn,cn,bn-cn)

%2.0f 의 의미 : 2는 소수점 앞의 칸수 0은 수수점 뒤의 자리수.

%값이 이상하게 나오는거 같은데 책에있는 예제소스로 실행 해본 결과 동잏라게 나오는걸 확인할 수있었습니다.

end

 

 

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%NEWTON 방법%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%h(x) = f(x) - exp(-x) -1 = 0 를 만족하는 해를 Newton 방법 및 Matlab을 사용하여 구하시오.

%x_n+1 = x_n - fx/dfx

 

hx = fx - exp(-x) -1; % h(x)=0

dhx = diff(hx); % h(x)의 미분

data = -10:0.1:10;

figure

plot(data, subs(hx, data));

grid on

hold

 

n=0; %카운트

xn = -10; % 초기값 x_n

error = 10^(-5); %오차

sol = 1; %출력오차

 

% xnplus1 x_n+1

% q h(xn)

% dq d hx(xn)

% sol (x_n) - (x_n+1)

 

while sol>=error

n=n+1 ;

q = subs(hx, xn); % xn 대입

dq = subs(dhx, xn); % xn 대입


xn_plus1 = xn - q/dq; % x_n+1 = x_n - fx/dfx

sol = abs(xn_plus1 - xn); % 오차검사 절대값


fprintf('%2.0f 번째 | x_n+1 = %2.10f | h(xn)=%2.4e | (x_n)-(x_n+1)=%2.4e \n', n, xn_plus1, q, sol)

plot(xn, q, '<');

xn = xn_plus1 ; % x_n+1 의 값을 x_n에 대입.

end

title('NEWTON')

 

 

 

 

 

 

 

 

결과

(1) 임의의 비선형 함수 f(x)를 설정하고, 이를 어느 한 점 c에서 4차의 Taylor 다항식으로 근사화한 값을 구하시오.

 

fx = (x^4) -(2.*x^3) -(x^2) +5

 

p4 = 5-x^2-2*x^3

 

(2) 위에서 설정한 함수 f(x)를 이용하여 g(x) = f(x) - x - 1 = 0 를 만족하는 해를 이분법 및 Matlab을 사용하여 구하시오.

 

나눈 횟수: 1 , an:0.0000000000, bn:2.5000000000, cn:1.2500000000 오차:1.2500e+000

나눈 횟수: 2 , an:1.2500000000, bn:2.5000000000, cn:1.8750000000 오차:6.2500e-001

나눈 횟수: 3 , an:1.8750000000, bn:2.5000000000, cn:2.1875000000 오차:3.1250e-001

나눈 횟수: 4 , an:2.1875000000, bn:2.5000000000, cn:2.3437500000 오차:1.5625e-001

나눈 횟수: 5 , an:2.1875000000, bn:2.3437500000, cn:2.2656250000 오차:7.8125e-002

나눈 횟수: 6 , an:2.2656250000, bn:2.3437500000, cn:2.3046875000 오차:3.9063e-002

나눈 횟수: 7 , an:2.2656250000, bn:2.3046875000, cn:2.2851562500 오차:1.9531e-002

나눈 횟수: 8 , an:2.2851562500, bn:2.3046875000, cn:2.2949218750 오차:9.7656e-003

나눈 횟수: 9 , an:2.2851562500, bn:2.2949218750, cn:2.2900390625 오차:4.8828e-003

나눈 횟수:10 , an:2.2900390625, bn:2.2949218750, cn:2.2924804688 오차:2.4414e-003

나눈 횟수:11 , an:2.2924804688, bn:2.2949218750, cn:2.2937011719 오차:1.2207e-003

나눈 횟수:12 , an:2.2937011719, bn:2.2949218750, cn:2.2943115234 오차:6.1035e-004

나눈 횟수:13 , an:2.2943115234, bn:2.2949218750, cn:2.2946166992 오차:3.0518e-004

나눈 횟수:14 , an:2.2946166992, bn:2.2949218750, cn:2.2947692871 오차:1.5259e-004

나눈 횟수:15 , an:2.2946166992, bn:2.2947692871, cn:2.2946929932 오차:7.6294e-005

나눈 횟수:16 , an:2.2946166992, bn:2.2946929932, cn:2.2946548462 오차:3.8147e-005

나눈 횟수:17 , an:2.2946166992, bn:2.2946548462, cn:2.2946357727 오차:1.9073e-005

나눈 횟수:18 , an:2.2946357727, bn:2.2946548462, cn:2.2946453094 오차:9.5367e-006

나눈 횟수:19 , an:2.2946453094, bn:2.2946548462, cn:2.2946500778 오차:4.7684e-006

나눈 횟수:20 , an:2.2946500778, bn:2.2946548462, cn:2.2946524620 오차:2.3842e-006

나눈 횟수:21 , an:2.2946500778, bn:2.2946524620, cn:2.2946512699 오차:1.1921e-006

나눈 횟수:22 , an:2.2946512699, bn:2.2946524620, cn:2.2946518660 오차:5.9605e-007

나눈 횟수:23 , an:2.2946518660, bn:2.2946524620, cn:2.2946521640 오차:2.9802e-007

나눈 횟수:24 , an:2.2946518660, bn:2.2946521640, cn:2.2946520150 오차:1.4901e-007

나눈 횟수:25 , an:2.2946518660, bn:2.2946520150, cn:2.2946519405 오차:7.4506e-008

나눈 횟수:26 , an:2.2946518660, bn:2.2946519405, cn:2.2946519032 오차:3.7253e-008

나눈 횟수:27 , an:2.2946518660, bn:2.2946519032, cn:2.2946518846 오차:1.8626e-008

나눈 횟수:28 , an:2.2946518846, bn:2.2946519032, cn:2.2946518939 오차:9.3132e-009

나눈 횟수:29 , an:2.2946518846, bn:2.2946518939, cn:2.2946518892 오차:4.6566e-009

나눈 횟수:30 , an:2.2946518846, bn:2.2946518892, cn:2.2946518869 오차:2.3283e-009

나눈 횟수:31 , an:2.2946518869, bn:2.2946518892, cn:2.2946518881 오차:1.1642e-009

나눈 횟수:32 , an:2.2946518869, bn:2.2946518881, cn:2.2946518875 오차:5.8208e-010

 

 

 

 

 

 

(3) h(x) = f(x) - exp(-x) -1 = 0 를 만족하는 해를 Newton 방법 및 Matlab을 사용하여 구하시오.

1 번째 | x_n+1 = -9.4197984902 | h(xn)=-1.0122e+004 | (x_n)-(x_n+1)=5.8020e-001

2 번째 | x_n+1 = -9.0811213396 | h(xn)=-2.8697e+003 | (x_n)-(x_n+1)=3.3868e-001

3 번째 | x_n+1 = -8.9743166020 | h(xn)=-5.6773e+002 | (x_n)-(x_n+1)=1.0680e-001

4 번째 | x_n+1 = -8.9650290911 | h(xn)=-4.2177e+001 | (x_n)-(x_n+1)=9.2875e-003

5 번째 | x_n+1 = -8.9649635836 | h(xn)=-2.9335e-001 | (x_n)-(x_n+1)=6.5507e-005

6 번째 | x_n+1 = -8.9649635804 | h(xn)=-1.4492e-005 | (x_n)-(x_n+1)=3.2365e-009

 

'삽질기초 > ETC' 카테고리의 다른 글

데시벨 [ decibel/ dB ]  (0) 2009.04.20
EMC/EMI  (0) 2009.04.20
[MATLAB] 3*3 역행렬  (0) 2009.04.16
웹에서 수식 입력 그리고 이미지로.  (0) 2009.04.14
MOSFET 의 턴온 턴오프.  (0) 2009.04.07