1 scilab - 名古屋大学shinimada/lectures/nana/...1.7 !: scilab p x | * pπ :i s r w !: u ; ^ o m...

29
1 Scilab 1.1 PDF Scilab http://www.isee.nagoya-u.ac.jp/ ~shinimada/ 1.2 Scilab Scilab ( ) MATLAB ( ) MATLAB Windows Scilab linux Mac PC Scilab URL http://www.scilab.org/download/ (Scilab ) 1.3 Scilab 1.3.1 scilab-5.4.1 Scilab 1.1 Scilab scilab scilab-5.4.1 1.1: Scilab 1.3.2 Scilab Scilab ( --> ) “exit” “File” “Exit” ( Scilab ) 1

Upload: others

Post on 01-Aug-2021

1 views

Category:

Documents


0 download

TRANSCRIPT

Mac PC Scilab URL http://www.scilab.org/download/ (Scilab )
1.3 Scilab 1.3.1
“Exit” ( Scilab )
()
--> help plot // plotΛΔ --> help if // if (if then else)ΛΔ
1.5
CΛΔΛΔΔScilabΔ
--> a=1 // a 1ΛΔ a=1 Δ a =
1. // ScilabΟυΕΔ
--> a=1; // η (;)ΛΔΕ
--> a=1, b=2; c=3; A=4 // (,)η (;)Δ a = // (a) (A)ΕΔ
1. A =
--> a // a a =
1.
--> a // aΔ !--error 4 // clearΕ
undefined variable : a // aΕΤοηδΔ
1.6
16.
16.
--> a=1; b=2; c=3; A=4; d=a+b*c-A d =
3.
.*./.ˆτυοτ.ΛΔ1.1 Δ ()ΛΔ 1.9Δ
1.1:
a.*b a./b a.ˆ b
2
--> x = %pi // : %pi x =
3.1415927
3. + 2.i --> real(y) // real yΛ ans =
3. --> imag(y) // imag yΛ ans =
2.
--> e = %eps // 1 + eps > 1 Δ (γΠγΕΔςΩετ p.8) e = // %eps (1/2) 5252 doubleοτ
2.220E-16
5.
--> x = 3.14159265358979323846264338327950288419716 x =
3.1415927 // 8Ε
--> format(14) // -2 ΕΔ --> x x =
3.14159265359 // 12ΕΔ --> format(34) --> x x = 3.1415926535897931159979634685442 // 32ΕΔ16
1.9 τ
--> x = 0:10 // 0Β 10ΛτΛΔ x =
0. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
--> y = 1:3:10 // 1Β 10 ΔτΛΛ3 y =
1. 4. 7. 10.
--> a = y(3) // τ y 3ΛΓ( 1ΒΔ) a =
7.
3

--> a = y(5) // τ y 5ΛΓΔ !--error 21 // 5ΤοηδΔ
invalid index
--> a = y(0) // τ y 0Λ !--error 21 // τ 1ΒΔ0ΤΔ
invalid index
10.
0. 1. 2.
--> d = x(2:3:$) // τ x 2 3Γ d =
1. 4. 7. 10.
--> z = y’ // τ z =
1. 4. 7. 10.
2. 8. 14. 20.
--> sum(y) // τ ans =
166.
--> y’*y // yτ y () ans =
1. 4. 7. 10. 4. 16. 28. 40. 7. 28. 49. 70. 10. 40. 70. 100.
--> y.*y // y (τ) ans =
1. 16. 49. 100.
1.9.2
--> A = [1,2,3;4,5,6] // 2 3η (;)Δ A = // (,)εϖεΔA=[1 2 3; 4 5 6]
1. 2. 3. 4. 5. 6.
--> A = [1,2,3 // ΔΔ --> 4,5,6] A =
1. 2. 3. 4. 5. 6.
--> x = A(2,1) // 2 1ΛΓ( 1ΒΔ) x =
4.
2. 5.
1. 0. 0. 0. 1. 0. 0. 0. 1.
--> C = zeros(2,3) // 2 3 0ΛΔ C =
0. 0. 0. 0. 0. 0.
--> D = ones(2,3) // 2 3 1ΛΔ D =
1. 1. 1. 1. 1. 1.
--> A.*A // A ans =
1. 4. 9. 16. 25. 36.
--> A’*A // A A ans =
17. 22. 27. 22. 29. 36. 27. 36. 45.
--> 2*A // εΧ ans =
5
1.2:
a < b a ! b a > b a " b a = b a #= b and or
Scilab a<b a<=b a>b a>=b a==b a =b or a<>b &
--> C = [1,2;3,4] // 2x2 CΛ A =
1. 2. 3. 4.
7. 10. 15. 22.
--> C.*C // C.*C () ans = // C*C C.*CΔ
1. 4. 9. 16.
1.10.1 if
if then // then ΛΕΕΔ
elseif then
else
Δ 1.2ΑΔ
--> score = 70; --> if score > 80 then --> disp("Well done."); --> elseif score > 60 then --> disp("Good."); --> else --> disp("Be serious."); --> end Good. // 2ΕΔ
1.10.2 for
end
--> s = 0; // ΛΔΛ s=0 --> for i = 1:10 // for i=[1 2 3 ... 10] --> s = s + i; // s iΛ --> end --> s // sΛ s =
55.
6
--> for k=0:2:4 // for k=[0 2 4] --> disp(k); // kΛ --> end
0. 2. 4.
--> for k=3:-1:0 // for k=[3 2 1 0] --> disp(k); // kΛ --> end
3. 2. 1. 0.
--> a = 3; --> while a > 0 --> disp(a); --> a=a-1; --> end
3. 2. 1.
C switch-caseΔΔ
--> n = ceil(4*rand()) // 04ΛΛ 1,2,3,4ΕΛ n --> select n --> case 1 then --> disp("odd number!") // n = 1 Ε odd number! )) --> case 3 then --> disp("odd number!") // n = 3 odd number! )) --> else --> disp("even number!") // n = 2 or 4 even number! )) --> end n = // 2.xxxx n=3
3. odd number! // case 3 Δ odd number!
7
() ϑΝΠΛΔσΟτΔσΟτ n-anaϑΥμΛΓετϑΝΠΛΔΑ(σε τοϑΝΠΛΠϑΝΠΔΔ)
// --- sample.sci ----------- a=10; b=20; x=a*b // ---------------------------------
ScilabετΛΔ “File”χΒ “Change Directory”ΛΔ ΟυΒετϑΝΠΛϑΥμΛϑΥμΔ“File” χΒ “Exec...”ΛετΒετϑΝΠ (sample.sci)Λ “”λΕΑ
--> a=10; --> b=20; --> x=a*b x =
200.
execΛΔΔ
--> exec(’sample.sci’) // ϑΝΠγΥτ’ ’μϒΥτ" "Δ --> a=10; --> b=20; --> x=a*b x =
200.
Scilab// τΕΔΓScilabετϑΝΠϑΝΠ // ΕΕΔ
--> a=1 // a=2 a=2 ΕΔ a =
1.
1.13.1 ( 1) 2Λmultiply ( 2Γ 1)
ϑΝΠmultiply.sci 2Λ ScilabmultiplyΛΔϑΝΠΛ ΔΘΓ
// --- multiply.sci ------------- function z = multiply(x,y) // Γ 1 2 multiply z = x*y // x y Λ endfunction // ΘΓ (endfunction) // ---------------------------------
8
ScilabϑΝΠΛΜΛΔΑΔScilabετϑΝΠ ScilabΟυ “File”χ “Exec...”ΛΔΟυΒ ϑΝΠ (multiply.sci)Λ“”λΛοΕΑΕ multiplyΔΑΔ
--> multiply(10,5)*2 ans =
100.
1.13.2 ( 2) Λ circle ( 1Γ 2)
CΓΔ (ΠλΛΔΔ)Scilab ΓΔ
// --- circle.sci ----------- function [perimeter, area] = circle(r) // 1 Γ 2 circle perimeter = 2 * %pi * r; // 1Λ area = %pi * r * r; // 2Λ endfunction // ΘΓ // ---------------------------------
circleΛϑΝΠΒΜΔΑΔ
--> exec(’circle.sci’) // circle --> [p,a]=circle(3) // 3 a = // ΓΒτ (:[p,a])Δ
28.274334 // a p =
1.13.3 ( 3) 0,1Λ significand ( 1Γ 1)
Δ 1 xΛ (52 οτ) 0,1Λ Δ
// --- significand.sci ----- function bit = significand(x) // 0<x<1 0,1 (52bit)Λ bit = ’’; // Λ bit ΛΔ while x < 1 // x 1Δ x = x*2; // x Λ 2Δ
end x = x - 1; for j = 1:52 // (52)Γ if x >= 0.5 // x 0.5 Ε bit = bit + ’1’; // bit Ζ 1Λ x = x - 0.5; // x Β 0.5 Λ οτΛ) 1Λ)
else // x 0.5 Ε bit = bit + ’0’; // bit Ζ 0Λ
end x = x*2; // xΛγϑτΔ
end endfunction // ---------------------------------
9
−10 −8 −6 −4 −2 0 2 4 6 8 10 −1.0
−0.8
−0.6
−0.4
−0.2
0.0
0.2
0.4
0.6
0.8
1.0
1.2: plot (sin(x))
−10 −8 −6 −4 −2 0 2 4 6 8 10 −1.0
−0.8
−0.6
−0.4
−0.2
0
0.2
0.4
0.6
0.8
1.0
−10 −8 −6 −4 −2 0 2 4 6 8 10 −1.0
−0.8
−0.6
−0.4
−0.2
0
0.2
0.4
0.6
0.8
1.0
1.3: plot2d (sin(x), cos(x))
−10 −8 −6 −4 −2 0 2 4 6 8 10 −15
−10
−5
0
5
10
15
1.14 ϑ
--> x=-10:0.001:10; // x-1010 .0.001 x=[-10 -9.999 -9.998 ... 9.999 10] --> y=sin(x); // y=[sin(-10) sin(-9.999) ... sin(9.999) sin(10)] --> plot(x,y); // sin(x)ϑ ( 1.2). plot(x,sin(x)) OK
--> mtlb_hold off // MATLAB hold (mtlb_ΛΔ MATLABΔΔ) // ϑΔυΔΕΔϑΛ // mtlb_hold on ΕϑΛΘΔ
--> y=sin(x); --> z=cos(x); --> plot2d(x’,[y’ z’]); // sin(x), cos(x)ϑ ( 1.3)
// 2ϑ plot2dΔ // plot2dτΔ (’Λ)
--> mtlb_hold off --> y=sin(x)-x; --> z=2*cos(x); --> plot2d(x’,[y’ z’]); // sin(x)-x, 2cos(x)ϑ ( 1.4)
1.15 ϑ
10
2
ΛΔΛΛ ΔΕΔ
2.1
0Λ (unsigned) Λ (signed) 2Δ
2.1.1
C unsigned char, unsigned short, unsigned int, unsigned long ΕΔ unsigned char 1Πτ (8οτ)unsigned short 2Πτ (16οτ)unsigned int 4Π τ (32οτ)unsigned long 8Πτ (64οτ)0ΛΔunsigned char Ε8 0,1 2 0000000011111111 (10 0255) 256ΛΔ
2.1.2
C char, short, int, longΕΔchar 1Πτ (8οτ) short 2Πτ (16οτ)int 4Πτ (32οτ)long 8Πτ (64οτ) ΛΔcharΕ$128127 256ΛΔ( Δ 1) 2ΕΔΔ 2Λ 2
0 1Λ1Λchar$100Λ 2 100 = 64 + 32 + 4 = 26 + 25 + 22 ΔΒ 2 1100100 0Λ 8 01100100 0 1Λ 10011011Ε 1Λ 10011100 $100 2Δ
2.2
ΑΕΔΛΔ Δ 4Πτ (32οτ)8Πτ (64οτ)Δ
($1)% (1 + 0.)% 2(!λ)
2.2.1
(4Πτ)C floatΔ 1οτ 8οτ 23οτ 32οτ (32) 0,1ΕΔ 0 1Δ 8οτ $127128ΛΔ127λΕ 0 255( 8οτ) ΕΔΓΒ 127ΛΔ 2.2.3ΔΑ 0 ( 0) 255 ( 1)ΓΒΕ
ΔΛ () 1254Γ $126127 (128)ΛΔ 10 $18.3125
$18.3125 = $(16 + 2 + 0.25 + 0.0625) = $(24 + 21 + 2!2 + 2!4) = $(10010.0101)2 = $(1.00100101)2 % 24
11
ΔΒΛ 1, 24 4λ 127Λ 131 2 10000011 1.001001011. 00100101 0 00100101000000000000000ΔΓ 32 οτ 0,1ΓΔ
11000001100100101000000000000000 & $18.3125 float
$32768 = $215 = $(1.0)2 % 215
ΔΒ 1 215 15λ 127Λ 142 2 10001110, 1.0 1.Λ 0Γ 23 0Δ
11000111000000000000000000000000 & $32768 float
Γintfloat 4Πτ (32)Δ 0,1ΔΘΔ
2.2.2
(8Πτ)C doubleΔ 1οτ 11οτ 52οτ 64οτ (64) 0,1Ε (4Πτ) 2 ΑΓΛΔ 0 1 Δ 11οτ $10231024ΛΔ1023λΕ 0
2047( 11οτ) ΕΔΓΒ 1023Λ Δ 2.2.3ΔΑ 0 ( 0) 2047 ( 1)Γ
ΒΕΔΛ () 12046Γ$1022 1023 (1024)ΛΔ
2.2.3 Δ
4ΕΒ 2.1ΑΔ
2.1: Δ

zero Zero 0 1 00 · · · 0 00 · · · 0 ±0 2
οΛΔ
denormal number, Denormal 0 1 00 · · · 0 #= 00 · · · 0 (float2!149 ! |r| < 2!126 )
subnormal number (double2!1074 ! |r| < 2!1022 )
(infty) Inf 0 1 11 · · · 1 00 · · · 0 ±( 2 (Γ)
NaN 0 1 11 · · · 1 #= 00 · · · 0 γφΓ NaN
(not a number) (Λ)
12
3
ΤΠτΛΔΤΠτ !/4 ΛΔ (1.8) (k = 01000000)ΛΒΕΔ !/4 ΛΤΠτ 24ΓΒΕΔΛΔ
3.1 ΤΠτ
(Aitken.sciΒΕΔ)
1 // ================================================================== 2 // pi4.sci: (1.8) nΛ Scilab 3 // ================================================================== 4 function Sn = pi4(n); 5 Sn = 0; 6 for k = n:-1:0 // k = 0:n OK. ΛΛ (nΒ 0)Δ 7 Sn = Sn+((-1)^k)/(2*k+1) 8 end 9 endfunction
3.1.2 ΤΠτ !/4ΛΔ Scilabετ ”Aitken.sci”
1 // ---------------------------------------------------------------------- 2 // (1.8)/4ΛΤΠτ 3 // 4 // 5 // S: (1.19) S_n^(k) (p.10)ΛΔ 2 6 // m: S (m = n + 1) n = 0,1,2,, m = 1,2,3, 7 // h: S (h = k + 1) k = 0,1,2,, h = 1,2,3, 8 // 9 // Scilab 1ΒΔ (C 0ΒΔ) 10 // (1.19)n,k 0ΒΔ0 S 11 // m,h ΛS_n^(k)Λ S(m,h) 12 // ---------------------------------------------------------------------- 13 clear; // Λ ( OK) 14 stacksize(10000000); // αΠζΛ (Γ) 15 16 itr = 1000000; // (1.8)ΛΔ () 17 S_real = %pi/4; // (1.8) /4=0.7853981634 18 exec(’pi4.sci’); // (1.8)ϑΝΠ pi4.sci 19 S_slow = pi4(itr); // (1.8)Λ 20 err1 = abs(S_real - S_slow); // (1.8) 21 // (ΤΠτ) 22 for n=0:itr 23 m = n + 1; // m S (n 0Βm 1ΒΔ) 24 S(m,1) = pi4(n); // p.9 S_n^(0) 25 err2 = abs(S(m,1) - S_real); 26 for k = 0:((n/2)-1) // p.9ΛΒ 27 if err2 <= err1 // Β (break forΒ) 28 break 29 end 30 h = k + 1; // h S (k 0Βh 1ΒΔ)
13

31 m = m - 1; // ΔΛΛ 32 S(m,h+1) = (S(m+1,h)*S(m-1,h)-S(m,h)^2)/(S(m+1,h)+S(m-1,h)-2*S(m,h)); 33 err2 = abs(S(m,h+1) - S_real); // ΤΠτ (1.19) 34 end 35 if err2 <= err1 // Ε (break forΒ) 36 break 37 end 38 end 39 40 format(11); // 9ΛΔΑ (9=11-2) 41 disp(S); // S Λ 42 43 printf( "error1 = %.16f\n", err1 ); // (1.8) 44 printf( "error2 = %.16f\n", err2 ); // ΤΠτ 45 printf( "S_real = %.16f\n", S_real ); // /4 46 printf( "S_slow = %.16f\n", S_slow ); // (1.8) 47 printf( "S(%d,%d) = %.16f\n", m-1, h, S(m,h+1)); // ΤΠτ
3.1.3 Aitken.sci
--> exec("Aitken.sci"); // exec υΛΔ ! 1. 0. 0. 0. ! ! 0.66666667 0.79166667 0. 0. ! ! 0.86666667 0.78333333 0.78552632 0. ! ! 0.72380952 0.78630952 0.78536255 0.78539984 ! ! 0.83492063 0.78492063 0.78541083 0.78539772 ! ! 0.74401154 0.78567821 0.78539282 0.78539831 ! ! 0.82093462 0.78522034 0.78540071 0. ! ! 0.75426795 0.78551795 0. 0. ! ! 0.81309148 0. 0. 0. !
error1 = 0.0000002499997500 error2 = 0.0000001444154701 S_real = 0.7853981633974483 S_slow = 0.7853984133971983 S(5,3) = 0.7853983078129184 // n = 5, k = 3 ( 24)ΒΕΔ
14
4.1 Ψε (Γ)Scilab ”Gauss pivot.sci”
οτ ()Ψε (ςΩετ p.93)Λ
1 // ============================================================================= 2 // Gauss_pivot.sci: Ψε (οτΛ)Λ 3 // ----------------------------------------------------------------------------- 4 // : A : n n 5 // b : n 1 τ 6 // : x : n 1 τ 7 // ============================================================================= 8 function x = Gauss_pivot(A, b) 9 [n, n1] = size(A); // αΠζ (n n1)ΛΔ 10 for i = 1:n-1 // 1n-1Γ 11 [m,k] = max(abs(A(i:n,i))); // i iΛΛ 12 // kΛ ) i+k-1) 13 if k > 1 // ΛΕΔΔ 14 tmp1 = A(i,:); // A iτΛ tmp1Δ 15 tmp2 = b(i); // b iΛ tmp2Δ 16 A(i,:) = A(i+k-1,:); // A iΛΛ i+k-1ΕΔ 17 b(i) = b(i+k-1); // b iΛΛ i+k-1ΕΔ 18 A(i+k-1,:) = tmp1; // A i+k-1Λ iΔ 19 b(i+k-1) = tmp2; // b i+k-1Λ iΔ 20 end 21 22 for h = i+1:n // i+1ΛΔ 23 r = A(h,i)/A(i,i); // hΛΔ 24 A(h,:) = A(h,:) - r * A(i,:); // A hΛΔ(iΛ 0Δ) 25 b(h) = b(h) - r * b(i); // b hΛΔ 26 end; 27 end; // Δ 28 29 x = zeros(n,1); // τ x Λ 0Δ 30 x(n) = b(n) / A(n,n); // (n)Β n x(n)ΛΔ 31 32 for i = n-1:-1:1 // ΒΛ 33 x(i) = (b(i) - A(i,i+1:n) * x(i+1:n,1)) / A(i,i); 34 end // i i x(i)ΛΔ 35 endfunction
--> exec("Gauss_pivot.sci"); --> A = [1 100 3; 1 3 4; 50 1 3]; --> b = [4 3 2]’ --> x = Gauss_pivot(A,b) // Gauss_pivot Ax=b Λ x = - 0.00462146 0.01791463 0.73771939
--> x = A\b // Gauss_pivot \ Ax=b x ΛΒΕΔ x = - 0.00462146 0.01791463 0.73771939
15
4.2 Λ
! "#
"$
(
4.2.1 ΑΔ
x(0) =
16
ΨεβΠσ nΔ x(n) = + x(n) 1 x(n)
2 x(n) 3
x(0) = [ 0 0 0 ]" ΒΓΛΔΑΔ
...
4.3 ΨεβΠσScilab
4.3.1 ΨεβΠσ Scilab ”Seidel.sci”
1 // ============================================================================= 2 // Seidel.sci: ΨεβΠσ Ax=b Λ 3 // ----------------------------------------------------------------------------- 4 // A: A (n n) 5 // b: bτ (n 1) 6 // x0: τ (n 1) 7 // tol: 2 () 8 // itr: 9 // x: xτ (n 1) 10 // ============================================================================= 11 // C: (5.41) a_ij/a_ii ΛΕΔ ( 1,2) 12 // r: (5.41) b_i/a_iiΛΕΔτ ( 3) 13 // S: ΛΔ 14 15 function x = Seidel(A, b, x0, tol, itr) 16 [n, m] = size(A); // αΠζΛνΣο 17 C = -A; // C = -A ) AΛ) 18 for i = 1:n 19 C(i,i) = 0; // CΛ 0
17
20 C(i,1:n) = C(i,1:n) / A(i,i); // CΛ AΔ 21 r(i) = b(i) / A(i,i); // τ bΛ A 22 end 23 24 S = x0; // Λ S 25 x = x0; // Λ x 26 for k = 1:itr // itrΓ 27 for i = 1:n // i=1,2, i x(i)ΛΔ 28 x(i) = C(i,:) * x + r(i); // x(i) x(i+1)ΕΔ 29 end 30 S(:,k+1) = x; // kΔΛ S 31 if norm(S(:,k) - x)^2 < tol // 2Λ 32 break; 33 end 34 end 35 format(7); // Λ 5 36 disp(S’); // Λ (SΛ) 37 38 endfunction
4.3.2 SeidelΛ5ΛScilabετ ”ex5 Seidel.sci”
1 // ----------------------------------------------------------- 2 // Seidel ( 5 Ax=b: 5.2) 3 // ----------------------------------------------------------- 4 clear; // Λ 5 exec(’Seidel.sci’); // Seidel 6 A = [ 10, 3, 1, 2, 1; // Ax=b A 7 1,19, 2,-1, 5; 8 -1, 1,30, 1,10; 9 -2, 0, 1,20, 5; 10 -3, 5, 1,-2,25 ]; 11 b = [-22, 27, 89,-73, 22]’; // Ax=bτ b 12 x0 = [ 0, 0, 0, 0, 0]’; // 13 tol = 1.0e-8; // x 2 14 itr = 100; // Γ 15 x = Seidel( A, b, x0, tol, itr ) // Seidel 16 // η (;)Λ xΕΔ
4.3.3 Scilabετ”ex5 Seidel.sci”
--> exec(’ex5_Seidel.sci’); 0. 0. 0. 0. 0. // ΓΔ x
- 2.2 1.5368 2.8421 - 4.0121 - 0.1260 // Seidel disp(S’)ΕΔ - 2.1302 1.056 3.0362 - 3.9833 - 0.0269 // ςΩετ 5.2 - 2.0211 1.0053 3.0075 - 3.9957 - 0.0035 - 2.0028 1.0005 3.0009 - 3.9994 - 0.0004 - 2.0003 1.0001 3.0001 - 3.9999 - 5.D-05 - 2. 1. 3. - 4. - 6.D-06 - 2. 1. 3. - 4. - 7.D-07
x = // ΔΓ x - 2. // () 1. 3.
- 4. - 7.D-07
5 (δ)
5.1 ΛScilab 1Λ Scilab poly, horner, derivatΔ y
zΛΔ
(roots)ΛΛΔ
y = (x$ 1)(x$ 2)ΛΑΔpoly 1Λ τ [1 2] 2 ( ’x’) 3 ’roots’ΛΕΑ 3σϑΥτ ’roots’ΔΔ
--> y = poly([1 2], ’x’) // y (Λ) y = // y = poly([1, 2], ’x’, ’roots’) (’roots’)
2 2 - 3x + x
1. // 1 2 y 2.
--> z = poly([0 0],’x’) / poly([1 5 -3],’x’) // z (Λ) z =
2 x
----------------- 2 3
ΛΛΔΔ
--> s = y^2 - 1 // y^2 - 1 = {(x-1)(x-2)}^2 - 1 s =
2 3 4 3 - 12x + 13x - 6x + x
--> y * z // y z ans =
2 3 - 2x + x ----------
2 - 15 - 2x + x
19
(coe!cients)ΛΛΔ
y = x2 $ 3x+ 2ΛΛΔ 1ΛΒ τ [2 $ 3 1], 2 ( ’x’) 3 ’coe!’ΛΔ
--> y = poly([2 -3 1],’x’,’coeff’) // y()ΛΔΒ y =
2 2 - 3x + x
--> coeff(y) // yΛ coeffτΛ ans =
2. - 3. 1.
--> z = poly([0 0 1],’x’,’coeff’) / poly([15 -13 -3 1],’x’,’coeff’) // z z =
2 x
----------------- 2 3
15 - 13x - 3x + x
--> coeff(numer(z)) // zΛ numer Λ ans =
0. 0. 1.
--> coeff(denom(z)) // zΛ denom Λ ans =
15. - 13. - 3. 1.
τΛΔΑΛΔΔ
--> x = poly(0, ’x’); // xΛΔΛ --> y = x^2 - 3*x + 2 // y y =
2 2 - 3x + x
--> x = poly(0, ’x’); // xΛΔΛ --> z = x^2 / (x^3-3*x^2-13*x+15) // z z =
2 x
----------------- 2 3
ΔΛΔhorner(φ)ΛΔ
--> horner(y, 5) // y = x^2-3x+2 x 5Λ ans =
12.
--> horner(z,-2) // z = x^2/(x^3-3*x^2-13*x+15) x-2Λ ans =
0.1904762
20


derivatΛΛΔΔ
--> dy = (derivat(y)) // y dy = - 3 + 2x
--> ddy = derivat(dy) // y 2 ddy =
2
225 - 390x + 79x + 108x - 17x - 6x + x
5.2 de!ΑΔ fevalΑΔ ΕΛΔΛ 1ϑΝΠϑΝΠΛ exec
ΜΕde!ΛΔΔΛ Δ fevalΔhornerΔΛΛΕfeval ΔΛΛ
--> deff(’y = f(x)’,’y = x*cos(x)’); // f --> f(2) // f 2Λ ans = - 0.8322937
--> feval(2, f) // f(2) ans = - 0.8322937
--> deff(’y = f(x)’,’y = x^2-3*x+2’); // f --> a = f(5) // f 5Λ ans =
12. --> a = feval(5, f) // f(5) a =
12.
5.3.1 δΛ ”Lagrange.sci”
1 // ================================================================== 2 // Lagrange.sci: δΛΔ 3 // ------------------------------------------------------------------ 4 // x: x 5 // y: y 6 // Γ f: 7 // ================================================================== 8 function f = Lagrange(x, y) 9 f = 0; // fΛ 0 10 for i = 1:length(x) // length(x) x () 11 xi = [x(1:i-1), x(i+1:$)]; // xi xΒ iΛτ 12 f = f + poly(xi, ’x’) * y(i) / prod( x(i) - xi ); // p.17 (2.11)ΛΔ 13 end 14 endfunction
21
5.3.2 LagrangeΛ 1 (p.20)Λετ ”ex1 Lagrange.sci”
1 // -------------------------------------------------------------------------------- 2 // ςΩετ p.20 1 3 // sin(x) 5Β Λδ4 4 // sin(x)ϑΛϑΔετ 5 // -------------------------------------------------------------------------------- 6 clear; // Λ 7 exec(’Lagrange.sci’); // Lagrange 8 9 x = [0, %pi/4, %pi/2, 3*%pi/4, %pi]; // x 10 y = [0, sqrt(2)/2, 1, sqrt(2)/2, 0]; // y 11 f = Lagrange(x, y) // LagrangeδΛΔ 12 13 xx = x(1):0.001:x($); // 0Λ 0.001 (ϑ x) 14 yy = horner(f, xx); // x xx (xx) 15 y_real = sin(xx); // x xx sin(x) (xx) 16 plot2d(xx’, [yy’, y_real’]); // sin(x)Λ (ΓΔ)
5.3.3 ”ex1 Lagrange.sci”
2 3 4 0.9819684x + 0.0582877x - 0.2360955x + 0.0375758x // ΒΕ 4
0 0.4 0.8 1.2 1.6 2.0 2.4 2.8 3.2 0
0.2
0.4
0.6
0.8
1.0
1.2
5.3.4 LagrangeΛ 2 (p.24)Λετ ”ex2 Lagrange.sci”
1 // -------------------------------------------------------------------------------- 2 // ςΩετ p.24 2 3 // 4Β 3Λδ3 20ΛΔετ 4 // -------------------------------------------------------------------------------- 5 clear; // Λ 6 exec(’Lagrange.sci’); // Lagrange 7 8 x = [19.9466, 19.9907, 20.0349, 20.0793]; // x 9 y = [ 2.712, 2.714, 2.716, 2.718]; // y 10 f = Lagrange(x, y) // Lagrangeδ fΛΔ 11 yy = horner(f, 20); // f 20Λ 12 printf("f(20) = %f\n", yy); // 3 20 f(20)
5.3.5 ”ex2 Lagrange.sci”
f(20) = 2.714421 // Β 3 20
22
6
6.1.1 ΑΔΛ ”trapezoid.sci”
1 // =================================================================== 2 // trapezoid.sci: ΑΔΛ 3 // ------------------------------------------------------------------- 4 // f: 5 // a: Γ 6 // b: ΘΓ 7 // N: [a,b] 8 // Γ I: 9 // =================================================================== 10 function I = trapezoid(f, a, b, N) 11 h = (b - a) / N; // 12 x = a:h:b; // Δ x 13 y = f(x); // Δ y 14 I = h * (y(1) + 2 * sum(y(2:N)) + y(N+1)) / 2; // (3.4)ΕΔ 15 endfunction
6.1.2 (3.6)ΛΔετ ”eq36 trapezoid.sci”
1 clear; 2 exec(’trapezoid.sci’); // ϑΝΠ 3 deff(’y=f(x)’,’y=sin(x)’); // f f(x)=sin(x) 4 a = 0; // Γ 5 b = %pi/2; // ΘΓ 6 N = 8; // () 7 format(11); // Λ 9 8 I = trapezoid(f,a,b,N) // ΑΔ (3.6)
6.1.3 ετ ”eq36 trapezoid.sci”
--> exec(’eq36_trapezoid.sci’); I =
6.1.4 ΑΔΛ Scilab
ΑΔΛ Scilab inttrapΔ inttrapΛ(help inttrap Λ)
--> h = %pi/16; // h = /16 --> x = 0:h:%pi/2; // 0/2 /16 --> I = inttrap(x, sin(x)) // ΑΔ I =
0.99678517 // ετ
ΔΑΔ
--> h = %pi/16; --> x = 0:h:%pi/2; --> deff(’y=f(x)’,’y=sin(x)’); // deff f(x)Λ --> I = inttrap(x, f(x)) // 2Λ f(x)Δ I =
0.99678517
23
6.2.1 ΨεΑΔΛ ”GaussLegendre.sci”
1 // ================================================================== 2 // GaussLegendre.sci: ΨεΑΔΛ 3 // ------------------------------------------------------------------ 4 // f: 5 // a: Γ 6 // b: ΘΓ 7 // N: (N 2,3,4,5 ) 8 // Γ I: 9 // ================================================================== 10 function I = GaussLegendre(f, a, b, N) 11 xi = [-sqrt(1/3) -sqrt(3/5) -0.8611363116 -0.9061798459 // p.53 3.3 12 sqrt(1/3) 0 0.3399810436 -0.5384693101 13 0 sqrt(3/5) 0.3399810436 0 14 0 0 0.8611363116 0.5384693101 15 0 0 0 0.9061798459]; 16 17 wi = [ 1 5/9 0.3478548451 0.2369268851 // p.53 3.3 18 1 8/9 0.6521451549 0.4786286705 19 0 5/9 0.6521451549 0.5688888889 20 0 0 0.3478548451 0.4786286705 21 0 0 0 0.2369268851]; 22 23 x = xi(1:N, N-1); // [1,-1] xi ΒΛ 24 x = ((b - a) * x + b + a) / 2; // [a,b]p.51 25 y = f(x); // y = [f(x_1), f(x_2),..., f(x_N)] 26 w = wi(1:N, N-1); // wi ΒΛ 27 I = (b - a) / 2 * (w’ * y); // (3.20)Λ (b-a)/2 [a,b] 28 endfunction
6.2.2 3.4ΨεΑΔΛΔετ ”tab34 GaussLegendre.sci”
1 clear; 2 exec(’GaussLegendre.sci’); // ΨεϑΝΠ 3 deff(’y=f(x)’,’y=(x.*(1-x)).^(3/2)’); // f f(x)= {x(1-x)}^(3/2) 4 a = 0; // Γ 5 b = 1; // ΘΓ 6 for N = 2 : 5 // N = 2,3,4,5 7 S = (128/3) * GaussLegendre(f,a,b,N); // ΨεΑΔ 8 disp(S); // (3.4) Β 4 (N=25)Λ 9 end
6.2.3 ετ ”tab34 GaussLegendre.sci”
--> exec(’tab34_GaussLegendre.sci’);
2.903099 // N = 2 (p.54 3.4 N=25 ) 3.1199473 // N = 3 3.1365993 // N = 4 3.1399284 // N = 5
6.2.4 ΨεΑΔΛ Scilab
ΨεΛ Scilab integrateΔintegrate Λ(help integrate Λ)
--> deff(’y=f(x)’,’y=(x.*(1-x)).^(3/2)’); --> S = (128/3) * integrate(’f(x)’, ’x’, 0, 1) S =
3.1415927 // p.54 3.4 N = 100
24


7.1 χτ (χτϑι)ΑΔ
7.1.1 χτΑΔΛ ”Newton.sci”
1 // ========================================================================== 2 // Newton.sci: χτ (ςΩετ p.72 (4.16))Λ 3 // -------------------------------------------------------------------------- 4 // f: f(x), df: f’(x), x0: 5 // tol: , itr: Γ 6 // ========================================================================== 7 function x = Newton(f, df, x0, tol, itr) 8 x(1) = x0; // x x0Λ x(1)Δ 9 y(1) = f( x(1) ); // x0Δ f(x0)Λ y(1)Δ 10 dy(1) = df( x(1) ); // x0Δ f’(x0)Λ dy(1)Δ 11 12 for k = 1:itr // itrΓ 13 x(k+1) = x(k) - y(k) / dy(k); // (4.16) xΛ 14 y(k+1) = f( x(k+1) ); // xΔ f(x) 15 dy(k+1) = df( x(k+1) ); // xΔ f’(x) 16 if ( abs( y(k+1) ) < tol ) then // (4.17) 17 break; // Β forΒΔ 18 end 19 end 20 format(12) // Λ 10Δ 21 disp([ [0:k]’, x, y ]) // χτΓ x, y Λ 22 endfunction
7.1.2 χτ p.72 2Λετ ”ex2 Newton.sci”
f(x) = x3 +6x2 +21x+32 = 0ΛχτΑετΛΕΑ
1 clear; // 2 deff(’y=f(x)’,’y=x^3+6*x^2+21*x+32’); // f(x) 3 deff(’y=df(x)’,’y=3*x^2+12*x+21’); // f’(x) 4 exec(’Newton.sci’); // χτ 5 Newton(f,df,0,1.0e-10,20); // 0 1.0e-10, 20
7.1.3 ετ ”ex2 Newton.sci”
--> exec(’ex2_Newton.sci’); 0. 0. 32. // x = 0, y = f(0) = 32 1. - 1.523809524 10.39369399 // Γ 1 2. - 2.597508059 0.409107601 // Γ 2 3. - 2.638130209 - 0.003024983 // Γ 3 4. - 2.637834269 - 0.000000168 // Γ 4 5. - 2.637834253 3.55271E-15 // Γ 5. x = -2.637834253
7.2 ΛΔScilab roots f(x) = 0ΛΔ Scilab rootsΔrootsΛ
--> y = poly([32,21,6,1],’x’,’coeff’); // f(x)=x^3+6x^2+21x+32 --> roots(y) // f(x)=0Λ rootsΔ ans = - 2.637834253 // 1 () - 1.681082874 + 3.050430199i // 2 () - 1.681082874 - 3.050430199i // 3 ()
25

8.1 ολΑΔ4
8.1.1 Λολ4 ”RungeKutta.sci”
1 // ================================================================== 2 // RungeKutta.sci: ολ4 (6.42)Λ 3 // ------------------------------------------------------------------ 4 // f: f(x,y) 5 // a,b: [a,b] 6 // y0: 7 // N: 8 // Γ x,y: (x:τ, y:τ) 9 // ================================================================== 10 function [x,y] = RungeKutta(f, a, b, y0, N) 11 h = (b - a)/N; // h 12 x = a:h:b; // x (τ) 13 y = y0 ; // y=y0 14 for i = 1 : N // NΛΔ 15 k1 = h * f( x(i), y(i) ); // (6.42) k1 16 k2 = h * f( x(i) + h/2, y(i) + k1/2 ); // (6.42) k2 17 k3 = h * f( x(i) + h/2, y(i) + k2/2 ); // (6.42) k3 18 k4 = h * f( x(i) + h, y(i) + k3 ); // (6.42) k4 19 y(i+1) = y(i) + (k1 + 2*k2 + 2*k3 + k4) / 6; // (6.42) y(i+1) 20 end 21 endfunction
8.1.2 ολp.1413Λετ4 ”ex3 RungeKutta.sci”
1 // -------------------------------------------------------------------------- 2 // RungeKuttaΛ 3 (p.141)Λετ 3 // -------------------------------------------------------------------------- 4 clear; // 5 exec(’RungeKutta.sci’); // 6 deff(’dy=f(x,y)’,’dy=y-y^2’); // 3 7 a = 0; // Γ 8 b = 20; // ΘΓ 9 y0 = 0.1; // 10 N = 8; [x,y] = RungeKutta(f,a,b,y0,N); plot2d(x,y,1); // N = 8 11 N = 10; [x,y] = RungeKutta(f,a,b,y0,N); plot2d(x,y,2); // N = 10 12 N = 20; [x,y] = RungeKutta(f,a,b,y0,N); plot2d(x,y,3); // N = 20
exec(’ex3 RungeKutta.sci’)ετΛΔ ΕΔ8.1
8.1: 3 (p.141)Λ ολ4 (N = 8, 10, 20)
26
8.2 Scilabode Scilab (ODE; Ordinary Di!erential Equation)Λ odeΔ
odeΛ 1n 1Λ
8.2.1 odeΑΔ 1
odeΛΑΛΔ
y" = f(x, y), : y(x0) = y0 (8.1)
1 y" = x+ y, y(0) = 0
f(x, y) = x+ y, x0 = 0, y0 = 0ΘΛ
y" = x+ y, y(0) = 0 (8.2)
ode 4Β (1) y0(2) x0(3) ΛΔ x x0xN
τ(4)ΑΔ
--> deff(’yd=f(x,y)’,’yd=x+y’); // f(x,y)=x+y --> x0=0; y0=0; // y(0)=0 --> x=x0:0.2:1; // x=[0,1]0.2(x=[0,0.2,0.4,..,1]) --> y=ode(y0,x0,x,f) // odeΛ y = 0. 0.0214028 0.0918247 0.2221188 0.4255409 0.7182819 // odeΑΔ
--> ye = exp(x)-x-1 ye = 0. 0.0214028 0.0918247 0.2221188 0.4255409 0.7182818 // exp(x)-x-1
1 y" = x+ y, y(0) = 2 (Δ)
Λ x0 = 0, y0 = 2ΛΔ
y" = x+ y, y(0) = 2 (8.3)
Λ odeΛΑ
--> deff(’yd=f(x,y)’,’yd=x+y’); // f(x,y)=x+y --> x0=0; y0=2; // Λ y(0)=2 () --> x=x0:0.2:1; // x=[0,1] 0.2 --> y=ode(y0,x0,x,f) // odeΛ y =
2. 2.4642082 3.0754742 3.8663565 4.876623 6.1548466 // odeΑΔ --> ye = 3*exp(x)-x-1 ye =
2. 2.4642083 3.0754741 3.8663564 4.8766228 6.1548455 // 3*exp(x)-x-1
8.2ΒΕ y" = x+ y (y)ΛΔ
8.2: 1 y" = x+ y 2 y(0) = 0, Α y(0) = 2Δ
27
Α n ΛΔ()
y(n) = f - x, y, y", y"", . . . , y(n!1)
. , (8.4)
: y(x0) = "0, y"(x0) = "1, y""(x0) = "2, . . . , y (n!1)(x0) = "n!1
2 (y"" = $0.3y" $ sin(y), y(0) = !/2, y"(0) = 0)
odeΛΒΕΔ 2 (n = 2)Λ
y"" = $0.3y" $ sin(y), (8.5)
: y(0) = !/2, y"(0) = 0
nΛ ode(1)Βτ ["0,"2, . . . ,"n!1]"(2) x0 (3)ΛΔ x x0xN τ(4)ΑΔ u = y, v = y" Δ
--> deff(’ydot=f(x,y)’, [’du=y(2)’, ’dv=-0.3*y(2)-sin(y(1))’, ’ydot=[du;dv]’]) // u’=y’=f(x,u,v), v’=y"=g(x,u,v)
--> x0=0; y0=[%pi/2;0]; // --> x=0:0.1:15; // x=[0,15] 0.1 --> y=ode(y0,x0,x,f); // odeΛ --> plot2d(x,y(1,:)); // yΛοτ --> plot2d(x,y(2,:)); // y’Λοτ ( 8.3)
odeΒΕ y, y"Λ n8.3 (n > 3)ode ΔodeΔ y0de!Δ ydotΛ n τΕΑ
8.2.3 odeΑΔ 1
1ΛτΧςΛΔ
1 (τΧς)
τΧςΛσ y1 y2 ΛΑΔ
y"1 = y1 $ y1y2 $ 1
y1(0) = 2, y2(0) = 1 (8.8)
ΛΑΔΛ ode ΛΔ
--> deff(’ydot=f(x,y)’, [’dy1=y(1)-y(1)*y(2)-y(1)^2/10’, ’dy2=y(1)*y(2)-y(2)-y(2)^2/20’, ’ydot=[dy1;dy2]’]); // y1’, y2’
--> x0=0; y0=[2;1]; // --> x=0:0.01:50; // xΛ --> y=ode(y0,x0,x,f); // Λ --> plot(y(1,:),y(2,:)); // y1, y2οτ ( 8.4)
8.4Α (8.8)ΒΕΔΒ ΔΔΔΔΑα ΠΛΓΔΔΘΔ
28
8.3: 2 8.4: τΧς 8.5: shooting.sci
8.3 γςΟ ()ΑΔ
8.3.1 y!! = p(x)y! + q(x)y + r(x), y(a) = ya, y(b) = yb
ΔΔ 2Δ Δ)ΒΕΓΛΛ) ΔΛγςΟΛ
y"" = 2x
5
3
γςΟΛΔ ”f.sci”
1 // -------------------------------------------------------------------------- 2 // γςΟΛΔΛΔ 3 // -------------------------------------------------------------------------- 4 function dz = f(x,z) 5 dz = [ z(2) // z(1)’= u’= z(2) 6 2 * x./(x^2 + 1).*z(2) - 2/(x^2 + 1).*z(1) + x^2 + 1 // z(2)’= p(x)u’+q(x)u+r(x) 7 z(4) // z(3)’= v’= z(4) 8 2 * x./(x^2 + 1).*z(4) - 2/(x^2 + 1).*z(3) ]; // z(4)’= p(x)v’+q(x)v 9 endfunction
γςΟΛετ 2 ”shooting.sci”
Λ odeΛετΛ
1 // -------------------------------------------------------------------------- 2 // γςΟΑΓΛετ 3 // -------------------------------------------------------------------------- 4 clear; // 5 exec(’f.sci’) // 6 x = 0:0.001:1; // x 7 n = length(x); // x 8 a = 0; b = 1; // [a,b]=[0,1] 9 ya = 2; yb = 5/3; // x=a,bΔ 10 z0 = [ya,0,0,1]’; // 11 z = ode(z0, a, x, f); // odeΛ 12 13 y = z(1,:) + (yb - z(1,n)) * z(3,:)./ z(3,n); // : y(x) = u(x)+(yb-u(b))/v(b)*v(x) 14 plot2d(x,y); xgrid; // ϑου
exec(’shooting.sci’)ετΛΔ 8.5ΕΔ
29