J.C. Hsu
Exercise(1)-991026
設計一個 M 檔來表示一數之正負符號。
<解>:
function ex1_991026 fprintf('\n')
x=input(' 輸入數值 x = ');
fprintf('\n') if x>0
disp(' ==> x 為正數 ; sign(x)=1') elseif x<0
disp(' ==> x 為負數 ; sign(x)=-1') else
disp(' ==> x 為零 ; sign(x)=0') end
fprintf('\n')
函數檔案:
就是個文字起頭的M檔
用來在同一行中顯示數個不同格式的數值 控制符號:
開始新的一行
將使用者的輸入已一個字回傳
表示迴 轉圈結束的地方
Department of Mechanical Engineering Kun Shan University
J.C. Hsu
Exercise(2)-991026
設計一個 M 檔來表示考試分數之成績等級。
考試分數 成績等級
90 分(含)~100 分(含) A
80 分(含)~90 分 B
70 分(含)~80 分 C
60 分(含)~70 分 D
60 分以下 不及格
<解>:
程式如下:
function ex2_991026 fprintf('\n')
x=input(' 輸入考試分數 x = ');
fprintf('\n')
if x>=90 & x<=100
disp(' ==> 成績等級為 A') elseif x>=80 & x<90
disp(' ==> 成績等級為 B') elseif x>=70 & x<80
disp(' ==> 成績等級為 C') elseif x>=60 & x<70
disp(' ==> 成績等級為 D') else
disp(' ==> 成績為 不及格') end
等於
大於
J.C. Hsu
fprintf('\n')
執行結果:
>> ex2_991026
輸入考試分數 x = 40
==> 成績為 不及格
>> ex2_991026
輸入考試分數 x = 92
==> 成績等級為 A
>> ex2_991026
輸入考試分數 x = 68
==> 成績等級為 D
>> ex2_991026
輸入考試分數 x = 75
==> 成績等級為 C
>> ex2_991026
輸入考試分數 x = 88
==> 成績等級為 B
等於 大於
J.C. Hsu
Department of Mechanical Engineering Kun Shan University
Exercise(1)-991102
設計一個 M 檔來計算指數函數 之真實值、計算值、真實值百分誤差及近似值 百分誤差。
e0.5
<解>:
程式如下:
function ex1_991102(n)
%---
% 計算 exp(0.5)之真實值與計算值
% 公式: exp(x) = 1 + x + x^2/2! + x^3/3! + ...
%--- fprintf('\n')
true=exp(0.5);
fprintf(' 項數 真實值 計算值 真實值百分誤差 近似值百分誤差 \n') fprintf(' --- \n') est1=0;
for i=0:n
est2=est1+0.5^i/fac(i);
erra=abs((est2-est1)/est2)*100;
errt=abs((true-est2)/true)*100;
fprintf(' %2d %8.6f %8.6f %8.6f %8.6f \n',i+1,true,est2,errt,erra) if erra<=0.05,break,end
est1=est2;
end
fprintf('\n')
%---
% 階乘之副程式: n!
%---
function pt=fac(n) k1=1;
if n==0 pt=1;
else
遇到%且發現下一個文字是有關格式的符號
幕數
乘法
小於
加法
:
J.C. Hsu
for i=1:n k1=k1*i;
end pt=k1;
end
執行結果:
>> ex1_991102(10)
項數 真實值 計算值 真實值百分誤差 近似值百分誤差 --- 1 1.648721 1.000000 39.346934 100.000000
2 1.648721 1.500000 9.020401 33.333333 3 1.648721 1.625000 1.438768 7.692308 4 1.648721 1.645833 0.175162 1.265823 5 1.648721 1.648438 0.017212 0.157978 6 1.648721 1.648698 0.001416 0.015795
J.C. Hsu
Department of Mechanical Engineering Kun Shan University
Exercise(2)-991102
設計一個 M 檔來計算指數函數 之真實值、計算值、真實值百分誤差及近似值 百分誤差。
e0.5
注意:不輸入項數 n !
<解>:
程式如下:
function ex2_991102
%---
% 計算 exp(0.5)之真實值與計算值
% 公式: exp(x) = 1 + x + x^2/2! + x^3/3! + ...
% 項數: i
%--- fprintf('\n')
true=exp(0.5);
fprintf(' 項數 真實值 計算值 真實值百分誤差 近似值百分誤差 \n') fprintf(' --- \n')
est1=0;
i=1;
while (1)
est2=est1+0.5^(i-1)/fac(i-1);
erra=abs((est2-est1)/est2)*100;
errt=abs((true-est2)/true)*100;
fprintf(' %2d %8.6f %8.6f %8.6f %8.6f \n',i,true,est2,errt,erra) if erra<=0.05,break,end
est1=est2;
i=i+1;
end
fprintf('\n')
%---
% 階乘之副程式: n!
%--- 幕數
加法
:
J.C. Hsu
function pt=fac(n) k1=1;
if n==0 pt=1;
else
for i=1:n k1=k1*i;
end pt=k1;
end
執行結果:
>> ex2_991102
項數 真實值 計算值 真實值百分誤差 近似值百分誤差 ---
1 1.648721 1.000000 39.346934 100.000000 2 1.648721 1.500000 9.020401 33.333333 3 1.648721 1.625000 1.438768 7.692308 4 1.648721 1.645833 0.175162 1.265823 5 1.648721 1.648438 0.017212 0.157978 6 1.648721 1.648698 0.001416 0.015795
Department of Mechanical Engineering Kun Shan University
J.C. Hsu
Exercise(3)-991102
設計一個 M 檔來計算指數函數 之真實值 、 計算值 、 真實值百分誤差及近似值百 分誤差。
ex
注意:不輸入項數 n !
<解>:
程式如下:
function ex3_991102(x)
%---
% 計算 exp(x)之真實值與計算值
% 公式: exp(x) = 1 + x + x^2/2! + x^3/3! + ...
% 項數: i
%--- fprintf('\n')
true=exp(x);
fprintf(' 項數 真實值 計算值 真實值百分誤差 近似值百分誤差 \n') fprintf(' --- \n')
est1=0;
i=1;
while (1)
est2=est1+x^(i-1)/fac(i-1);
erra=abs((est2-est1)/est2)*100;
errt=abs((true-est2)/true)*100;
fprintf(' %2d %8.6f %8.6f %8.6f %8.6f \n',i,true,est2,errt,erra) if erra<=0.05,break,end
est1=est2;
i=i+1;
end
fprintf('\n')
%---
% 階乘之副程式: n!
%---
控制符號:
開始新的一行
遇到%且發現下一個文字是有關格式的符號
J.C. Hsu
4 7.389056 6.333333 14.287654 21.052632 function pt=fac(n)
k1=1;
if n==0 pt=1;
else
for i=1:n k1=k1*i;
end pt=k1;
end
執行結果:
>> ex3_991102(0.5)
項數 真實值 計算值 真實值百分誤差 近似值百分誤差 ---
1 1.648721 1.000000 39.346934 100.000000 2 1.648721 1.500000 9.020401 33.333333 3 1.648721 1.625000 1.438768 7.692308 4 1.648721 1.645833 0.175162 1.265823 5 1.648721 1.648438 0.017212 0.157978 6 1.648721 1.648698 0.001416 0.015795
>> ex3_991102(2)
項數 真實值 計算值 真實值百分誤差 近似值百分誤差 ---
1 7.389056 1.000000 86.466472 100.000000 2 7.389056 3.000000 59.399415 66.666667 3 7.389056 5.000000 32.332358 40.000000
5 7.389056 7.000000 5.265302 9.523810 6 7.389056 7.266667 1.656361 3.669725 7 7.389056 7.355556 0.453381 1.208459
J.C. Hsu
Department of Mechanical Engineering Kun Shan University
Exercise(1)解答-991116
求解一階微分方程式之 VIP 問題。
+ (tan x ) y = cos
2x ; y ( 0 ) = − 1
dx dy
並畫出 x = 0 ~ 6 ,y 對 x 之圖形。
<解>:
程式碼:
function ex1_991116
%---
% 求解 VIP : y' + (tanx)y = (cosx)^2 ; y(0) = -1
%--- fprintf('\n')
y=dsolve('Dy+tan(x)*y=cos(x)^2','y(0)=-1','x') x=0:0.01:6;
y=subs(y,x);
plot(x,y);title('y 對 x 之圖形');xlabel('x');ylabel('y');
fprintf('\n')
執行結果:
>> ex1_991116
y =
1/2*sin(2*x)-cos(x)
>>
%
J.C. Hsu
0 1 2 3 4 5 6
-1.5 -1 -0.5 0 0.5 1 1.5
y 對 x 之圖形
x
y
此函數可以MATLAB的直指令做出在範圍y=0到6的圖形 平均可以簡單以MATLAB的標準指令求得