1、1,9. 工程數學之應用,1. 一階微分方程式2. 二階微分方程式3. 拉氏轉換4. 傅立葉轉換,2,9-1 一階微分方程式,3,9-1-1 方向場,4,cla; % 清除% x與y軸範圍 xmin = -4; xmax = 4; ymin = -4; ymax = 4;% 數據個數 datano = 25;% 步進值 stepx = (xmax-xmin)/datano; stepy = (ymax-ymin)/datano;for i =1:1:datano+1; x = xmin + (i-1)*stepx; for j=1:1:datano+1; y = ymin + (j-1)*st
2、epy; % 方程式 : edit1取得字串並計算數值 z = eval(get(gcbo, String); theta = atan(z); % 線段長 : x方向 dx = 0.4*stepx*cos(theta); % 線段長 : y方向 dy = 0.4*stepy*sin(theta); % 線段集合 : x xx = x-dx x+dx; % 線段集合 : y yy = y-dy y+dy; hold on; line(xx, yy); % 畫線 endend axis(xmin xmax ymin ymax); grid on; xlabel(x); ylabel(y);,5,
3、9-1-2 向量場,6,9-1-3 流線,7,8,clear; cla; % 清除% x與y軸範圍 : 練習改為控制項 xmin = -4; xmax = 4; ymin = -4; ymax = 4;xrange = linspace(xmin,xmax,20); % 數據數量20yrange = linspace(ymin,ymax,20);x, y = meshgrid(xrange, yrange); % 數據陣列化 % 必須修改 u 與 v : dx分量 u = x./x; % dy分量 : edit1取得字串並計算數值 v = eval(get(gcbo, String);% qu
4、iver 語法 quiver(x, y, u, v, LineWidth, 1);% streamline() xrange = linspace(xmin,xmax,10); % 數據數量10yrange = linspace(ymin,ymax,10);x, y = meshgrid(xrange, yrange); % 數據陣列化 % 必須修改 u 與 v : dx分量 u = x./x; % dy分量 : edit1取得字串並計算數值 v = eval(get(gcbo, String); h = streamline(stream2(xrange, yrange, u, v, x,
5、y); set(h, Color, r); % axis(xmin xmax ymin ymax); % 設定軸範圍grid on; xlabel(x); ylabel(y);,9,9-1-4 ode解題器,10,11,clear; cla; % 清除% 取得 x 範圍 xspan = eval(get(findobj(Tag, edit2), String); % 取得 y 起始值 y0 = eval(get(findobj(Tag, edit3),String);% 呼叫 ode23 解題器 x, y = ode23(fcOde23, xspan, y0); plot(x, y, rd-)
6、; xlabel(x); ylabel(y); grid on;,function yd = fcOde23(x, y) yd = eval(get(findobj(Tag,edit1),String);,edit1_Callback,pushbutton1_Callback,12,9-1-5 符號運算,13,14,程式說明:請參考教本p9-11p9-12,15,9-1-6 毆拉法,16,17,18,19,20,% 產生函式:名稱為eulerfc function yd = eulerfc(x, y) yd = eval(get(findobj(Tag,edit1),String);,edit
7、1_Callback,clear; cla; % 清除% 取得x軸最大值 xmax = eval(get(findobj(Tag, edit2), String); % 取得 y 起始值 y0 = eval(get(findobj(Tag, edit3),String);% 毆拉法 : initial condition x0 = 0; h = eval(get(findobj(Tag, edit4),String); % 步幅% 計算 n = (xmax-x0)/h;for i=1:1:n+1 if i = 1 x(i) = x0; y(i) = y0; else x(i) = x0+(i-
8、1)*h; % function eulerfc = f(x,y) y(i) = y(i-1) + h*eulerfc(x(i-1),y(i-1); endend plot(x, y);xlabel(x);ylabel(y); grid on; if min(y)=0 axis(0 xmax 0 round(max(y)+1); else axis(0 xmax round(min(y)-1) round(max(y)+1); end,pushbutton1_Callback,21,9-1-7 休恩法,22,23,%heun% initial condition clear; x0 = 0;
9、y0 = 1; xmax = 4; % x軸最大值 h = 0.25; % 步幅% 計算 n = (xmax-x0)/h;for j=1:1:n+1; x(j) = x0 + (j-1)*h;endy(1) = y0;for i=1:1:n % function yd(x, y) y_star(i) = y(i) + h*yd(x(i), y(i); y1 = yd(x(i), y(i); y2 = yd(x(i+1),y_star(i); y(i+1) = y(i) + 0.5*h*(y1 + y2);end% plot(x, y, r-);xlabel(x);ylabel(y); grid
10、 on; axis(0 xmax 0 round(max(y)+1);,MATLAB視窗程式設計,第9章 工程數學之應用,24,9-1-8 蘭吉庫它法,MATLAB視窗程式設計,第9章 工程數學之應用,25,26,9-1-9 解聯立方程組,27,28,29,30,31,9-2 二階微分方程式,32,33,34,9-2-2 符號運算,35,clear; cla; % 清除% 取得一階微分方程式 yd = (get(findobj(Tag,edit1),String);% 取得 x 範圍 xspan = eval(get(findobj(Tag, edit2), String);% 取得 y 起始
11、值 y0 = (get(findobj(Tag, edit3),String);% 使用dsolve() 語法 y = dsolve(yd, y0, x); ezplot(y, min(xspan), max(xspan); % 使用ezplot() xlabel(x); ylabel(y); grid on; title(); % 清除title,36,9-2-3 數值分析,37,程式碼:,38,39,40,9-3 拉氏轉換,41,42,9-3-1 反拉氏轉換,43,44,clear; cla; % 清除syms s % 宣告符號運算 xspan = eval(get(findobj(Tag
12、, edit2), String); % 取得x範圍 fs = (get(findobj(Tag,edit5),String); % 取得F(s)字串 y = ilaplace(sym(fs); % 將字串轉換為sym, 取反拉氏 ezplot(y, xspan(1), xspan(2); % 使用ezplot()語法繪圖 xlabel(x);ylabel(y); grid on; axis tight;,45,9-5 傅立葉轉換,46,47,9-5-1 fft(),48,49,50,51,52,global h1;global h2;apval=get(gcbo, Value); % sli
13、der取值set(findobj(Tag, text1), String, apval); % 顯示孔徑半寬度n=1*128; % 取樣點數f(1:n)=0; f(n/2-apval:n/2+apval)=1; % 設定孔徑大小axes(h1);x=1:n;plot(x,f, .); % 繪圖孔徑axis tight;axes(h2);F=fft(f); % 一維快速傅立葉轉換Fs=fftshift(F); % 位移處理plot(abs(Fs); % 繪圖一維快速傅立葉轉換振幅大小grid on; title(振幅);axis tight;,53,9-5-2 fft2(),54,55,56,57,58,59,9-5-3 ifft2,60,61,62,63,64,65,9-5-4 符號運算,66,本章結束,67,