上週上機課題目:數值分析 請利用下列公式算出 f ’(8.1) 、 f ’(8.3)...

34
上上上上上上上 上上上上 上上上上上上上上上 f ’(8.1) f ’(8.3) 上上上上 f ’(x 0 )=1/2h [-3f(x 0 )+4f(x 0 +h)-f(x 0 +2 h)] 上上上 f(x) x lnx Note 上上上 上上上上上 :! *
  • date post

    22-Dec-2015
  • Category

    Documents

  • view

    248
  • download

    2

Transcript of 上週上機課題目:數值分析 請利用下列公式算出 f ’(8.1) 、 f ’(8.3)...

Page 1: 上週上機課題目:數值分析 請利用下列公式算出 f ’(8.1) 、 f ’(8.3) 的近似值 f ’(x 0 )=1/2h [-3f(x 0 )+4f(x 0 +h)-f(x 0 +2h)] 這裡的 f(x) 為 x lnx

上週上機課題目:數值分析 請利用下列公式算出 f ’(8.1) 、 f ’(8.3) 的近似值

f ’(x0)=1/2h [-3f(x0)+4f(x0+h)-f(x0+2h)]

這裡的 f(x) 為 x lnx

Note :注意!乘的運算為 *

Page 2: 上週上機課題目:數值分析 請利用下列公式算出 f ’(8.1) 、 f ’(8.3) 的近似值 f ’(x 0 )=1/2h [-3f(x 0 )+4f(x 0 +h)-f(x 0 +2h)] 這裡的 f(x) 為 x lnx

>> a=-3*8.1*log(8.1) ; %-3f(x0)>> b=4*8.2*log(8.2) ; %4f(x0+h)>> c=-8.3*log(8.3); %-f(x0+2h)>> 1/(2*0.1)*(a+b+c) %(1/2h)(a+b+c)ans = 3.09191394208330

Note : 猜猜! 1/(2*0.1) 與 1/2*0.1 有差別嗎?

5 0.05

Page 3: 上週上機課題目:數值分析 請利用下列公式算出 f ’(8.1) 、 f ’(8.3) 的近似值 f ’(x 0 )=1/2h [-3f(x 0 )+4f(x 0 +h)-f(x 0 +2h)] 這裡的 f(x) 為 x lnx

事實上,可以簡化成>>a=8.1;b=0.1;>>z=1/(2*b)*(-3*a*log(a)+4*(a+b)*log(a+b)-…(a+2*b)*log(a+2*b))z= 3.09191394208330

這樣有個好處: 可以隨意的修改 a,b 的值來調整 z 的值

Page 4: 上週上機課題目:數值分析 請利用下列公式算出 f ’(8.1) 、 f ’(8.3) 的近似值 f ’(x 0 )=1/2h [-3f(x 0 )+4f(x 0 +h)-f(x 0 +2h)] 這裡的 f(x) 為 x lnx

數學軟體簡介 PART II

Matlab 介紹

Page 5: 上週上機課題目:數值分析 請利用下列公式算出 f ’(8.1) 、 f ’(8.3) 的近似值 f ’(x 0 )=1/2h [-3f(x 0 )+4f(x 0 +h)-f(x 0 +2h)] 這裡的 f(x) 為 x lnx

今天進度: Matlab 基本環境操作

重複命令與邏輯命令 M 檔案基本二維空間繪圖

Page 6: 上週上機課題目:數值分析 請利用下列公式算出 f ’(8.1) 、 f ’(8.3) 的近似值 f ’(x 0 )=1/2h [-3f(x 0 )+4f(x 0 +h)-f(x 0 +2h)] 這裡的 f(x) 為 x lnx

for 迴圈

最簡單的重複命令是 for 迴圈 其基本形式為:

for 變數 = a:b ; 運算式; end

其中變數的值會被依次設定為 a~b ,來執行介於 for 和 end 之間的運算式。因此,若無意外情況,運算式執行的次數會等於 b-a+1 。

Page 7: 上週上機課題目:數值分析 請利用下列公式算出 f ’(8.1) 、 f ’(8.3) 的近似值 f ’(x 0 )=1/2h [-3f(x 0 )+4f(x 0 +h)-f(x 0 +2h)] 這裡的 f(x) 為 x lnx

例如:>>format long % 算至小數點下 14 位數

>>b = zeros(1,10); %b 是一個 1x10 的零矩陣

>>for i = 1:10; b(i) = 1/(10^i); end>>b0.1 0.01 0.001 0.0001 0.00001 0.000001 0.00000010.00000001 0.000000001 0.0000000001

for 迴圈

Page 8: 上週上機課題目:數值分析 請利用下列公式算出 f ’(8.1) 、 f ’(8.3) 的近似值 f ’(x 0 )=1/2h [-3f(x 0 )+4f(x 0 +h)-f(x 0 +2h)] 這裡的 f(x) 為 x lnx

例如:>>for i=1:10; % i 從 1 到 10a=8.1;h=1/(10^i); % 從 0.1 到 0.0000000001z(i)=1/(2*h)*(-3*a*log(a)+4*(a+h)*…log(a+h)-(a+2*h)*log(a+2*h));end>>zz = 3.09191394208334 3.09186456879100 3.09186406675011 3.09186406168394 3.09186406113326 3.09186405367257 3.09186402702721 3.09186507507775 3.09186809488438 3.

09183789681811

for 迴圈

Page 9: 上週上機課題目:數值分析 請利用下列公式算出 f ’(8.1) 、 f ’(8.3) 的近似值 f ’(x 0 )=1/2h [-3f(x 0 )+4f(x 0 +h)-f(x 0 +2h)] 這裡的 f(x) 為 x lnx

for 迴圈也可以是多層的,下例產生一個 6 x 6的 Hilbert 矩陣 h ,其中 Ai,j 為 : 1/(i+j-1)

>>format rat>>for i = 1:6; for j = 1:6; h(i,j) = 1/(i+j-1); end end

1 1/2 1/3 1/4 1/5 1/6

1/2 1/3 1/4 1/5 1/6 1/7

1/3 1/4 1/5 1/6 1/7 1/8

1/4 1/5 1/6 1/7 1/8 1/9

1/5 1/6 1/7 1/8 1/9 1/10

1/6 1/7 1/8 1/9 1/10 1/11

Page 10: 上週上機課題目:數值分析 請利用下列公式算出 f ’(8.1) 、 f ’(8.3) 的近似值 f ’(x 0 )=1/2h [-3f(x 0 )+4f(x 0 +h)-f(x 0 +2h)] 這裡的 f(x) 為 x lnx

另一個重複命令是 while 迴圈 基本形式為:

while 條件式; 運算式; end

也就是說,只要條件是成立,運算式就會一再被執行。右例是產生一數列 x :

[ 1 1/2 1/3 1/4 1/5 1/6 ]

while 迴圈

>>i = 1; >>while i <= 6,

x(i) = 1/i; i = i+1; end

Page 11: 上週上機課題目:數值分析 請利用下列公式算出 f ’(8.1) 、 f ’(8.3) 的近似值 f ’(x 0 )=1/2h [-3f(x 0 )+4f(x 0 +h)-f(x 0 +2h)] 這裡的 f(x) 為 x lnx

邏輯命令 最簡單的邏輯命令是 if, ..., end 其基本形式為:

if 條件式; 運算式; end

>>if min(x) > 0.02 ; disp('Very Big! '); % disp  印出elsedisp('So tiny! ');end Very Good!

Page 12: 上週上機課題目:數值分析 請利用下列公式算出 f ’(8.1) 、 f ’(8.3) 的近似值 f ’(x 0 )=1/2h [-3f(x 0 )+4f(x 0 +h)-f(x 0 +2h)] 這裡的 f(x) 為 x lnx

M 檔案

Matlab 可以將一連串命令貯存在一個檔案中,以後再將這群指令以你訂的檔案名稱為新指令,集體同時執行。這種可執行的檔案稱為 M-files ,因為其檔案名稱之字尾均以 『 .m 』附檔名。

例如; myfirst.m 即表示其檔案名稱為『 myfirst 』,檔案型式為 M-file ,你只要將目錄指向存放該檔案之檔案夾,就可在指令窗下打入 " myfirst" ,開始執行該檔內之指令群。

Page 13: 上週上機課題目:數值分析 請利用下列公式算出 f ’(8.1) 、 f ’(8.3) 的近似值 f ’(x 0 )=1/2h [-3f(x 0 )+4f(x 0 +h)-f(x 0 +2h)] 這裡的 f(x) 為 x lnx

M- 檔案類型之檔案純為文字檔,故可在任何文書處理軟體中進行編輯或修改。 Matlab 也有一個程式編輯器,可以在此編輯器中偵錯 (Debug) 或編輯,這個編輯器比其他文書處理具有不同的功能。在指令窗中亦可直接打入 type 之指令,觀察該檔案之內容。

M-files 依執行時之實質型式分為兩種,一為敘述檔( script ),二為函數檔( function )。敘述檔為一連串之正常指令之組合,故其名稱亦可作為指令在指令窗中直接執行。例如,有一個敘述檔之名稱為 mylove.m ,則可在 Matlab 指令窗中直接下 "mylove"  這個指令執行這個檔案之內容。

M 檔案

Page 14: 上週上機課題目:數值分析 請利用下列公式算出 f ’(8.1) 、 f ’(8.3) 的近似值 f ’(x 0 )=1/2h [-3f(x 0 )+4f(x 0 +h)-f(x 0 +2h)] 這裡的 f(x) 為 x lnx

敘述檔常用於輸入大量資料,以構成一個新的矩陣,如此可以大大減少輸入時所可能發生之錯誤。設有一個名叫 mydata.m 的資料內容如下:

A=[1 2 3; 4 5 6]A = 1 2 3 4 5 6

以 Matlab 鍵入 mydata 這個指令則會使上項內容被執行,因此一個以 A 為名之矩陣即刻產生,將來有用到它的時候,即會跳出來為你效勞。

注意:大寫 A 與小寫 a 是不同的名稱。

M 檔案

Page 15: 上週上機課題目:數值分析 請利用下列公式算出 f ’(8.1) 、 f ’(8.3) 的近似值 f ’(x 0 )=1/2h [-3f(x 0 )+4f(x 0 +h)-f(x 0 +2h)] 這裡的 f(x) 為 x lnx

函數檔案與敘述檔主要差別是:開頭一行需有一個函數名稱之宣告以及輸入參數,函數名稱前可以有等號,在此等號之左方為其輸出之參數,方位不能弄錯,通式如下:

輸出參數 = 函數名稱 ( 輸入參數 )

特別注意的是這些參數變數,無論是輸入或輸出,均可能代表一個數值或一個矩陣。一般以代表一個矩陣為多。在函數檔案中,其所屬之變數均屬區域性的,除非特別另宣告為整體性參數。

M 檔案

Page 16: 上週上機課題目:數值分析 請利用下列公式算出 f ’(8.1) 、 f ’(8.3) 的近似值 f ’(x 0 )=1/2h [-3f(x 0 )+4f(x 0 +h)-f(x 0 +2h)] 這裡的 f(x) 為 x lnx

例如: function P = prodsqr (A, B)

P = A^2*B^2

此時函數之名稱為 prodsqr ,其輸入參數為A、B。輸出為P。在函數中,A、B、P均為區域性函數,只在這個函數執行期間有效,離開這個函數就不認得了。

由於這是一個函數檔,它是不能自己執行的 ,而且它要能被呼叫,必須在存檔時,以 prodsqr.m儲存,方能對應主程式的呼叫。

M 檔案

Page 17: 上週上機課題目:數值分析 請利用下列公式算出 f ’(8.1) 、 f ’(8.3) 的近似值 f ’(x 0 )=1/2h [-3f(x 0 )+4f(x 0 +h)-f(x 0 +2h)] 這裡的 f(x) 為 x lnx

基本二維空間繪圖

Matlab 不但擅長矩陣相關的數值運算,也適用在各種科學目視表示( Scientific visualization )。這裡介紹Matlab 基本 xy平面及 xyz 空間的各項繪圖命令,包含一維曲線及二維曲面的繪製、列印及存檔。

plot 是繪製一維曲線的基本函數,但在使用此函數之前,我們需先定義曲線上每一點的 x 及 y座標。

Page 18: 上週上機課題目:數值分析 請利用下列公式算出 f ’(8.1) 、 f ’(8.3) 的近似值 f ’(x 0 )=1/2h [-3f(x 0 )+4f(x 0 +h)-f(x 0 +2h)] 這裡的 f(x) 為 x lnx

>>x=linspace(0, 2*pi); % 在 0 到 2π 間,等分取 100 個點(它也是預設值)

y=sin(x); % 對應的 y座標 plot(x,y); % 進行二維作圖

基本二維空間繪圖

Page 19: 上週上機課題目:數值分析 請利用下列公式算出 f ’(8.1) 、 f ’(8.3) 的近似值 f ’(x 0 )=1/2h [-3f(x 0 )+4f(x 0 +h)-f(x 0 +2h)] 這裡的 f(x) 為 x lnx

>> x=linspace(0, 2*pi); >>plot(x,sin(x),x,cos(x));

基本二維空間繪圖

Matlab 在畫出多條曲線時,會自動輪換曲線顏色,以利分辨。

Page 20: 上週上機課題目:數值分析 請利用下列公式算出 f ’(8.1) 、 f ’(8.3) 的近似值 f ’(x 0 )=1/2h [-3f(x 0 )+4f(x 0 +h)-f(x 0 +2h)] 這裡的 f(x) 為 x lnx

plot(x,sin(x), 'bo',x,cos(x), 'y+');

曲線 sin(x)藍色 (b) 及 圓形格式 (o) 曲線 cos(x)黃色 (y) 及 十字格式 (+)

基本二維空間繪圖

Page 21: 上週上機課題目:數值分析 請利用下列公式算出 f ’(8.1) 、 f ’(8.3) 的近似值 f ’(x 0 )=1/2h [-3f(x 0 )+4f(x 0 +h)-f(x 0 +2h)] 這裡的 f(x) 為 x lnx

顏色參數: 黃 (y) 、黑 (k) 、白 (w) 、藍 (b) 、綠 (g) 、紅 (r)

格式參數: 點 (.) 、圓 (o) 、 x(x) 、 +(+) 、 *(*) 、實線 (-) 、點線 (:) 、點虛線 (-.) 、虛線 (--)

基本二維空間繪圖

Page 22: 上週上機課題目:數值分析 請利用下列公式算出 f ’(8.1) 、 f ’(8.3) 的近似值 f ’(x 0 )=1/2h [-3f(x 0 )+4f(x 0 +h)-f(x 0 +2h)] 這裡的 f(x) 為 x lnx

一般而言, plot 會根據所給的座標點來自動決定圖軸的範圍,但也是可以用 axis 指令來指定,其用法如下:

axis([x 最小 ,x 最大 ,y 最小 ,y 最大 ]) 例如: axis([-inf, inf, 0, 1])

inf 並不是指無限大,而是代表以資料點的最大值來取代,此處作用等於 min(x)

基本二維空間繪圖

Page 23: 上週上機課題目:數值分析 請利用下列公式算出 f ’(8.1) 、 f ’(8.3) 的近似值 f ’(x 0 )=1/2h [-3f(x 0 )+4f(x 0 +h)-f(x 0 +2h)] 這裡的 f(x) 為 x lnx

此外, Matlab 也可對圖形加上各種註解與處理:

>>xlabel('Input Value'); % x軸註解 >>ylabel('Function Value'); % y軸註解 >>title('Two Trigonometric Functions'); % 圖形標題 >>legend('y = sin(x)','y = cos(x)'); % 圖形註解 >>grid on; % 顯示格線

基本二維空間繪圖

Page 24: 上週上機課題目:數值分析 請利用下列公式算出 f ’(8.1) 、 f ’(8.3) 的近似值 f ’(x 0 )=1/2h [-3f(x 0 )+4f(x 0 +h)-f(x 0 +2h)] 這裡的 f(x) 為 x lnx

前頁的所有功能加在圖形之後,圖形完整的繪製。

基本二維空間繪圖

Page 25: 上週上機課題目:數值分析 請利用下列公式算出 f ’(8.1) 、 f ’(8.3) 的近似值 f ’(x 0 )=1/2h [-3f(x 0 )+4f(x 0 +h)-f(x 0 +2h)] 這裡的 f(x) 為 x lnx

分割畫面的圖形>>x=0 : 4*pi;>>subplot(2,2,1);plot(x,sin(x));>>subplot(2,2,2);plot(x,cos(x));>>subplot(2,2,3);plot(x, x);>>subplot(2,2,4);plot(x, 2*x);

subplot(m,n,p) 表示將視窗劃分為 m x n 個視窗,而下一個 plot 指令會繪圖於第 p 個區域。

基本二維空間繪圖

Page 26: 上週上機課題目:數值分析 請利用下列公式算出 f ’(8.1) 、 f ’(8.3) 的近似值 f ’(x 0 )=1/2h [-3f(x 0 )+4f(x 0 +h)-f(x 0 +2h)] 這裡的 f(x) 為 x lnx

對於變化劇烈的函數,可用 fplot 來進行較精確的繪圖,會對劇烈變化處進行較密集的取樣,如下例:

>>fplot('sin(1/x)', [0.02 0.2]);[0.02 0.2] 是繪圖範圍

基本二維空間繪圖

Page 27: 上週上機課題目:數值分析 請利用下列公式算出 f ’(8.1) 、 f ’(8.3) 的近似值 f ’(x 0 )=1/2h [-3f(x 0 )+4f(x 0 +h)-f(x 0 +2h)] 這裡的 f(x) 為 x lnx

若要產生極座標圖形,可用 polar :

>>theta=linspace(0, 2*pi); >>r=cos(4*theta); >>polar(theta, r);

基本二維空間繪圖

Page 28: 上週上機課題目:數值分析 請利用下列公式算出 f ’(8.1) 、 f ’(8.3) 的近似值 f ’(x 0 )=1/2h [-3f(x 0 )+4f(x 0 +h)-f(x 0 +2h)] 這裡的 f(x) 為 x lnx

長條圖:當資料點數量不多時,長條圖是很適合的表示方式:

>>close all; >>x=1:10; >>y=abs(sin(x)); >>bar(x,y);

基本二維空間繪圖

Page 29: 上週上機課題目:數值分析 請利用下列公式算出 f ’(8.1) 、 f ’(8.3) 的近似值 f ’(x 0 )=1/2h [-3f(x 0 )+4f(x 0 +h)-f(x 0 +2h)] 這裡的 f(x) 為 x lnx

對於大量的資料,我們可用 hist 來顯示資料的分佈情況和統計特性。下面幾個命令可用來驗證 randn 產生的高斯亂數分佈:

>>x=randn(5000, 1); % 產生 5000 個亂數 >>hist(x,20); %20代表長條的個數

基本二維空間繪圖

Page 30: 上週上機課題目:數值分析 請利用下列公式算出 f ’(8.1) 、 f ’(8.3) 的近似值 f ’(x 0 )=1/2h [-3f(x 0 )+4f(x 0 +h)-f(x 0 +2h)] 這裡的 f(x) 為 x lnx

rose 和 hist很接近,只不過是將資料大小視為角度,資料個數視為距離,並用極座標繪製表示:

>>x=randn(1000, 1); >>rose(x);

基本二維空間繪圖

Page 31: 上週上機課題目:數值分析 請利用下列公式算出 f ’(8.1) 、 f ’(8.3) 的近似值 f ’(x 0 )=1/2h [-3f(x 0 )+4f(x 0 +h)-f(x 0 +2h)] 這裡的 f(x) 為 x lnx

stairs 可畫出階梯圖:

x=linspace(0,10,50); y=sin(x).*exp(-x/3); stairs(x,y);

基本二維空間繪圖

Page 32: 上週上機課題目:數值分析 請利用下列公式算出 f ’(8.1) 、 f ’(8.3) 的近似值 f ’(x 0 )=1/2h [-3f(x 0 )+4f(x 0 +h)-f(x 0 +2h)] 這裡的 f(x) 為 x lnx

stems 可產生針狀圖,常被用來繪製數位訊號:

x=linspace(0,10,50); y=sin(x).*exp(-x/3); stem(x,y);

基本二維空間繪圖

Page 33: 上週上機課題目:數值分析 請利用下列公式算出 f ’(8.1) 、 f ’(8.3) 的近似值 f ’(x 0 )=1/2h [-3f(x 0 )+4f(x 0 +h)-f(x 0 +2h)] 這裡的 f(x) 為 x lnx

stairs 將資料點視為多邊行頂點,並將此多邊行塗上顏色:

>>x=linspace(0,10,50); y=sin(x).*exp(-x/3); fill(x,y,'b'); % 'b' 為藍色

基本二維空間繪圖

Page 34: 上週上機課題目:數值分析 請利用下列公式算出 f ’(8.1) 、 f ’(8.3) 的近似值 f ’(x 0 )=1/2h [-3f(x 0 )+4f(x 0 +h)-f(x 0 +2h)] 這裡的 f(x) 為 x lnx

5/8 上機課

畫出今天教的圖形中的三種: 一般曲線圖、長條圖、極座標圖、階梯圖、針狀圖

試著加上註解,讓圖形更完整