第一篇:電子電路上機(jī)報(bào)告三-差動(dòng)放大器分析與設(shè)計(jì)
電子電路上機(jī)實(shí)驗(yàn)報(bào)告
班級(jí): 學(xué)號(hào): 姓名: 實(shí)驗(yàn)三 差動(dòng)放大器分析與設(shè)計(jì)
一、電路設(shè)計(jì)
二、直流工作點(diǎn)分析
由Multisim7仿真結(jié)果如下:(1)直流工作點(diǎn):
V5=-656.58368mv;V6=9.75915v;V9=-9.92162mv 因此有:UC=9.759V UB=-0.0099V UE=-0.6596V 由于發(fā)射結(jié)正偏,集電結(jié)反偏,由此可以判斷三極管處在放大區(qū)。
三、測(cè)量電流源供給差放的靜態(tài)工作電流
在鏡像電流源輸出端串接一個(gè)萬用表來測(cè)量靜態(tài)工作電流的值
測(cè)得:I=4.502mA
四、輸入輸出電阻測(cè)量
輸入電阻:測(cè)量方法為伏安法,方案見下圖
Ri=Ui/Ii=11.12kΩ
輸出電阻:將輸入電壓源短路,同時(shí)在輸出端串接電壓源,然后如圖所示分別測(cè)量電壓電流
Ro=Uo/Io=1.95kΩ
五、測(cè)單端差模放大倍數(shù)
儀表連接如下圖:
分別測(cè)量輸入和輸出交流電壓,可知Av=-1.83*1000/91.872=-19.9
五、利用波特儀測(cè)幅頻相頻特性
(一)幅頻特性測(cè)定 雙端:
單端:
(二)相頻特性測(cè)定 雙端:
單端:
六、交流分析測(cè)幅頻與相頻特性:
七、利用溫度掃描功能給出工作溫度從0攝氏度到100攝氏度變化時(shí),輸出波形的變化
測(cè)量結(jié)果如下圖所示:
八、設(shè)計(jì)如下電路,利用溫度掃描功能給出工作溫度從0攝氏度到100攝氏度變化時(shí),輸出波形的變化
選擇溫度掃描分析,得到曲線如下圖:
由七和八中兩電路溫度特性的對(duì)比,可以得出結(jié)論:差放電路具有強(qiáng)烈的抑制溫度漂移的優(yōu)點(diǎn)。
九、測(cè)量以下電路差模放大倍數(shù)
測(cè)得:Av=-595.361/8.729=-68.2
十、仿真實(shí)驗(yàn)心得體會(huì)
了解到了差動(dòng)放大器器的特性,對(duì)以后的電路設(shè)計(jì)有很大幫助;
進(jìn)一步熟悉了Multisim的電路分析功能。
第二篇:電力電子電路建模與分析大作業(yè)
XX大學(xué)
研究生課程論文/研究報(bào)告
課程名稱:電力電子系統(tǒng)建模與分析
任課教師:
完成日期:
2016
年
X
月
X
日
專
業(yè):
電力電子與電力傳動(dòng)
學(xué)
號(hào):
姓
名:
同組成員:
成績(jī):
題目要求
某用戶需要一直流電源,要求:直流輸出24V/200W,輸出電壓波動(dòng)及紋波均<1%。用戶有220V交流電網(wǎng)(±10%波動(dòng)變化)可供使用:
(1)
設(shè)計(jì)電源主電路及其參數(shù);
(2)
建立電路數(shù)學(xué)模型,獲得開關(guān)變換器傳函模型;
(3)
設(shè)計(jì)控制器參數(shù),給出控制補(bǔ)償器前和補(bǔ)償后開環(huán)傳遞函數(shù)波特圖,分
析系統(tǒng)的動(dòng)態(tài)和穩(wěn)態(tài)性能;
(4)
根據(jù)設(shè)計(jì)的控制補(bǔ)償器參數(shù)進(jìn)行電路仿真,實(shí)現(xiàn)電源要求;
(5)
討論建模中忽略或近似因素對(duì)數(shù)學(xué)模型的影響,得出適應(yīng)性結(jié)論(量化
性結(jié)論:如具體開關(guān)頻率、具體允許擾動(dòng)幅值及頻率等)。
主要工作
本次設(shè)計(jì)主要負(fù)責(zé)電源主電路及其參數(shù)的的設(shè)計(jì),以及建立電路數(shù)學(xué)模型并獲得開關(guān)變換器傳函模型這兩部分內(nèi)容,具體如下:
(1)
本次設(shè)計(jì)電源主電路及其參數(shù),采用從后向前的逆向設(shè)計(jì)思想。首先根據(jù)系統(tǒng)輸出要求,設(shè)計(jì)了后級(jí)DC/DC型Buck電路的參數(shù)。接著設(shè)計(jì)了前級(jí)不控整流電路以及工頻變壓器的參數(shù)。考慮到主電路啟動(dòng)運(yùn)行時(shí)的安全性,在主電路中加入了軟啟動(dòng)電路;
(2)
本次DC/DC變換器的建模并沒有采用傳統(tǒng)的狀態(tài)空間平均方法,而是采用更為簡(jiǎn)單、直觀的平均開關(guān)建模方法,建立了Buck變換器小信號(hào)交流模型。最后,推到出了開關(guān)變換器的傳遞函數(shù)模型,并給出了Buck電路閉環(huán)控制框圖。
設(shè)計(jì)主電路及其參數(shù)
1.1主電路設(shè)計(jì)
根據(jù)題目要求,系統(tǒng)為單相交流220V/50Hz輸入,直流24V/200W輸出。對(duì)于小功率單相交流輸入的場(chǎng)合,由于二極管不控整流電路簡(jiǎn)單,可靠性高,產(chǎn)生的高次諧波較少,廣泛應(yīng)用于不間斷電源(UPS)、開關(guān)電源等場(chǎng)合。所以初步確定本系統(tǒng)主電路拓?fù)錇椋呵凹?jí)AC-DC電路為電源經(jīng)變壓器降壓后的二極管不控整流,后級(jí)DC-DC電路為Buck斬波電路,其中Buck電路工作在電感電流連續(xù)模式(CCM),前后級(jí)之間通過直流母線和直流電容連接在一起。系統(tǒng)主電路結(jié)構(gòu)如圖1-1所示。
圖1-1
系統(tǒng)主電路結(jié)構(gòu)圖
1.2主電路參數(shù)設(shè)計(jì)
本次設(shè)計(jì)電源主電路參數(shù),采用從后向前的逆向設(shè)計(jì)思想。先對(duì)后級(jí)DC/DC型Buck電路的參數(shù)進(jìn)行設(shè)計(jì),接著對(duì)前級(jí)不控整流電路以及工頻變壓器的參數(shù)進(jìn)行設(shè)計(jì)。下面分別對(duì)后級(jí)的Buck電路和前級(jí)經(jīng)變壓器降壓后的不控整流電路各參數(shù)進(jìn)行分析設(shè)計(jì)。
1.2.1
輸出電阻計(jì)算
根據(jù)系統(tǒng)電路參數(shù):,可計(jì)算:
輸出電流:
(1-1)
負(fù)載等值電阻:
(1-2)
1.2.2
BUCK電路占空比及開關(guān)頻率選擇
根據(jù)Buck電路占空比計(jì)算公式:
假定占空比,可得:
(1-3)
由于開關(guān)頻率越低,低頻擾動(dòng)頻率的選擇范圍越小,濾波電感的體積越大,整體裝置的體積和重量越大。開關(guān)頻率高,可以用更小的電感來濾除高次諧波,但是開關(guān)頻率過高會(huì)導(dǎo)致開關(guān)管功耗變大,發(fā)熱量顯著增加,電路效率變低,散熱器體積也更大。因此要折中效率、體積選擇開關(guān)頻率,本次設(shè)計(jì)選擇MOSFET開關(guān)頻率。
1.2.3
BUCK電路濾波電感選擇
由BUCK電路電感電流連續(xù)的臨界條件:
可得要保證電路工作在CCM模式下,則電感應(yīng)滿足:
(1-4)
根據(jù)開關(guān)頻率,則
(1-5)
假定電感紋波電流為輸出負(fù)載電流額定值的30%,此時(shí)電感值應(yīng)為:
(1-6)
保留一定余量,本系統(tǒng)實(shí)取。
1.2.4
BUCK電路濾波電容選擇
電容容值越大,輸出電壓將近似為恒定,但電容越大,裝置體積和成本也相應(yīng)增大,因此本系統(tǒng)根據(jù)輸出電壓的紋波要求選取電容。本設(shè)計(jì)按輸出電壓紋波不超過輸出電壓的1%進(jìn)行計(jì)算:
(1-7)
保留一定余量,本系統(tǒng)實(shí)取。
1.2.5
開關(guān)管MOSFET選擇
開關(guān)導(dǎo)通時(shí)MOSFET端電壓近似為0V,開關(guān)關(guān)斷時(shí)MOSFET承受最大電壓為:
(1-8)
一個(gè)開關(guān)周期內(nèi)流過開關(guān)管的電流最大值等于電感電流最大值,即:
(1-9)
綜上,考慮裕量,選擇MOSFET的型號(hào)為IRF650A,其額定參數(shù)為。
1.2.6
整流后直流側(cè)電容選擇
直流母線電壓通過單相橋式整流而來故每個(gè)周期發(fā)生2次脈動(dòng),單相工頻電壓的周期為T=0.02s,在T/2周期內(nèi)電容完成一個(gè)充電和放電的周期。直流側(cè)電容的選擇依據(jù)有:
(1)
有依電流為依據(jù)的,例如:每0.5A電流1000uF
(2)
有依RC時(shí)間常數(shù)為依據(jù)的,例如:?jiǎn)蜗嗖豢卣麟娐?/p>
其中,T為交流電源周期
則:
(1-10)
(3)還有一種經(jīng)驗(yàn)數(shù)據(jù):
負(fù)載電流(A)
2A
1A
0.5-1A 0.1-0.5A
<0.1A?。?.05A
濾波電容(μF)4000
2000
1000
500
200-500 200
根據(jù)直流側(cè)電壓平均值為48V,則直流側(cè)的等效電流約為,由經(jīng)驗(yàn)數(shù)據(jù)可大概估算直流側(cè)電容為10000uF。本系統(tǒng)實(shí)際選擇100V/100uF
CL20型金屬化聚脂膜電容器,采用10只并聯(lián)。
1.2.7
整流二極管選擇
(1)確定整流二極管的耐壓值
根據(jù)全橋整流電路中每個(gè)二極管所承受的反向電壓:
可得整流二極管耐壓值為:
(1-11)
其中,為整流橋輸入電壓有效值,1.1為電壓波動(dòng)系數(shù),為安全系數(shù)。
則二極管耐壓值為:
(1-12)
(2)確定整流二極管的額定電流值
流過每個(gè)二極管的平均電流為直流側(cè)電流的一半,取電流波動(dòng)系數(shù)取1.1,安全系數(shù),則整流二極管額定電流值為:
(1-13)
根據(jù)上述參數(shù)選擇二極管型號(hào)為P600D,查其參數(shù)手冊(cè)可知二極管的通態(tài)壓降為,則每個(gè)二極管額通態(tài)損耗為:
(1-14)
1.2.8
變壓器選擇
電壓比:
變壓器電壓比的計(jì)算原則是電路在最大占空比和最低輸入電壓的條件下,輸出電壓能達(dá)到要求的上限。根據(jù)公式:
其中,為二極管整流橋輸出電壓最小值;為最大占空比,取0.9;為
考慮管壓降和線壓降,取2V;為最高輸出電壓。
實(shí)際根據(jù)單相二極管不控整流電路的輸入輸出關(guān)系,可得不控整流的輸入側(cè)電壓,即變壓器二次側(cè)電壓為:
(1-15)
則變壓器電壓比為:
(1-16)
容量:
根據(jù)系統(tǒng)輸出功率,考慮電路損耗及效率,變壓器容量選擇為300VA。
鐵芯截面積:
鐵芯截面積是根據(jù)變壓器總功率P確定的,根據(jù)變壓器次級(jí)功率為P2=200W。計(jì)算變壓器輸入功率P1(考慮變壓器效率η=0.9)P1=P2/0.9=222.2w。
則鐵芯截面積為:
(1-17)
匝數(shù):
變壓器匝數(shù)的選擇(工頻變壓器)
根據(jù)變壓器最高輸出電壓,電源周期,鐵心截面積,鐵心材料所允許的最大磁通密度的變化量,則變壓器二次側(cè)繞組匝數(shù)為:
(1-18)
則變壓器一次側(cè)繞組匝數(shù):
(1-19)
繞組導(dǎo)體截面:
根據(jù)流過每個(gè)繞組的電流值和預(yù)先選定的電流密度,即可計(jì)算出繞組導(dǎo)體截面:
(1-20)
其中,導(dǎo)體電流密度選。
1.2.9
主電路軟啟動(dòng)設(shè)計(jì)
由于二極管不控整流后直流側(cè)電容上的初始電壓為零,在輸入電路合閘的瞬間,會(huì)形成很大的瞬時(shí)沖擊電流,主電路軟啟動(dòng)電路不僅可以防止合閘時(shí)電路受到浪涌電流的沖擊,它還能使電路緩慢的啟動(dòng),減小了變換器和輸出電容上的電流最大值,軟啟動(dòng)電路性能的好壞,會(huì)直接影響到電源的工作性能,元器件的壽命,所以很重要。常用的軟啟動(dòng)有:采用功率熱敏電阻電路、采用SCR、R電路、繼電器與電阻構(gòu)成的回路、采用定時(shí)觸發(fā)器的繼電器與限流電阻的電路等等。根據(jù)系統(tǒng)實(shí)際的需要為了避免系統(tǒng)啟動(dòng)可能引起系統(tǒng)內(nèi)浪涌問題,采用加入軟啟動(dòng)環(huán)節(jié)進(jìn)行處理,如下圖1-2所示。先通過電阻R對(duì)輸入濾波環(huán)節(jié)的濾波電容進(jìn)行預(yù)充電,充電完成后接入時(shí)間繼電器KT使電阻R短路。加入了軟啟動(dòng)環(huán)節(jié)后,避免了瞬時(shí)大電壓及大電流的沖擊,保證了系統(tǒng)工作安全及元器件安全。
圖1-2
軟啟動(dòng)電路結(jié)構(gòu)圖
建立電路數(shù)學(xué)模型,獲得開關(guān)變換器傳函模型
由于狀態(tài)空間平均方法建模純粹基于數(shù)學(xué),計(jì)算推導(dǎo)比較繁瑣、模型不直觀。而平均開關(guān)建模方法,是直接通過電路變換得到電力電子電路小信號(hào)交流模型,更直觀、使用更方便,所以本次DC/DC變換器建模采用平均開關(guān)方法建模。
2.1建立電路數(shù)學(xué)模型
任一DC/DC變換器可分割成兩個(gè)子電路,一個(gè)子電路為線性定常子電路,另一個(gè)為開關(guān)網(wǎng)絡(luò)子電路。線性定常子電路無需進(jìn)行處理,關(guān)鍵是通過電路變換將非線性的開關(guān)網(wǎng)絡(luò)子電路變換成線性定常電路。如圖2-1所示,為Buck變換器電路。圖2-2給出了Buck變換器的開關(guān)網(wǎng)絡(luò)子電路,開關(guān)網(wǎng)絡(luò)子電路用二端口網(wǎng)絡(luò)表示,端口變量為。
圖2-1
Buck變換器電路
圖2-2
Buck變換器開關(guān)網(wǎng)絡(luò)子電路
根據(jù)開關(guān)管導(dǎo)通時(shí),開關(guān)管關(guān)斷時(shí)。將上述開關(guān)網(wǎng)絡(luò)子電路用受控源替代,如圖2-3所示。且替代后,受控源網(wǎng)絡(luò)端口與開關(guān)網(wǎng)絡(luò)子電路端口的電量波形應(yīng)保持一致。將替代后的開關(guān)網(wǎng)絡(luò)的受控源電路與原來的線性定常子電路組合一起,得到含有受控源的等效Buck電路如圖2-4所示。
圖2-3
受控源替代開關(guān)網(wǎng)絡(luò)子電路
圖2-4
受控源替代開關(guān)網(wǎng)絡(luò)的Buck電路
應(yīng)用開關(guān)周期平均的概念,對(duì)圖2-4等效電路中的各個(gè)電量作開關(guān)周期平均運(yùn)算:
(2-1)
得到以開關(guān)周期平均值表示的等效電路如圖2-5所示,該電路仍是一個(gè)非線性電路。
圖2-5
經(jīng)開關(guān)周期變換后的Buck變換器
采用擾動(dòng)法,對(duì)上述等效電路中的各個(gè)電量引入小信號(hào)擾動(dòng),即令:
(2-2)
得到有小信號(hào)擾動(dòng)作用的等效電路如圖2-6所示。
圖2-6
小信號(hào)擾動(dòng)的Buck電路
其中:
(2-3)
將圖2-6等效電路各個(gè)電量中含有的二次項(xiàng)忽略(主要是受控源電量)
:
(2-4)
得到線性近似、受控源表示的小信號(hào)等效電路如圖2-7所示。
圖2-7
忽略二次項(xiàng)影響的小信號(hào)擾動(dòng)的Buck電路
進(jìn)一步用理想變壓器替代受控源,得到線性近似、理想變壓器表示的小信號(hào)等效電路如圖2-8所示。
圖2-8
用理想變壓器表示的小信號(hào)等效Buck電路
2.2開關(guān)變換器傳遞函數(shù)模型
由上述建立的Buck電路小信號(hào)交流平均開關(guān)模型可推出變換器的傳遞函數(shù)為:
輸入至輸出的傳遞函數(shù):
(2-5)
控制至輸出的傳遞函數(shù):
(2-6)
Buck電路閉環(huán)控制框圖如圖2-9所示。
圖2-9
Buck電路閉環(huán)控制框圖
其中:
(1)
為需要設(shè)計(jì)的控制器;
(2)
為PWM調(diào)制器傳遞函數(shù);
(3)
為輸出電壓對(duì)占空比的傳遞函數(shù);
(4)
為反饋環(huán)節(jié)的傳遞函數(shù)。
設(shè)計(jì)中取,將計(jì)算數(shù)值帶入閉環(huán)控制框圖,可得本系統(tǒng)Buck電路閉環(huán)控制框圖如圖2-10所示。
圖2-10本系統(tǒng)
Buck電路閉環(huán)控制框圖
其中原始回路增益為:
(2-7)
設(shè)計(jì)控制器參數(shù)
沒有加控制器補(bǔ)償前變換器原始回路增益函數(shù):
(3-1)
其伯德圖如圖3-1所示。
圖3-1
原始回路增益伯德圖
利用超前—滯后補(bǔ)償網(wǎng)絡(luò)來校正系統(tǒng),設(shè)計(jì)的補(bǔ)償網(wǎng)絡(luò)的傳遞函數(shù)為:
(3-2)
相應(yīng)的補(bǔ)償網(wǎng)絡(luò)的伯德圖如圖3-2所示。
圖3-2
補(bǔ)償網(wǎng)絡(luò)伯德圖
補(bǔ)償后系統(tǒng)開環(huán)傳遞函數(shù)伯德圖如圖3-3所示。
圖3-3
補(bǔ)償后系統(tǒng)伯德圖
由圖可以看出此時(shí)系統(tǒng)的相位余量為67.5°,幅值余量為20.3dB。
電路仿真
根據(jù)以上設(shè)計(jì)的主電路以及控制器參數(shù),在PSIM中搭建仿真電路,并進(jìn)行仿真驗(yàn)證,仿真模型以及仿真結(jié)果如下所示:
圖4-1
主電路仿真模型
圖4-2
控制電路仿真模型
系統(tǒng)輸出電壓Uo與輸出電流Io的波形如圖4-3和4-5所示。
圖4-3
輸出電壓波形圖
圖4-4
輸出電壓有效值
圖4-5
輸出電流波形圖
圖4-6
輸出電壓局部放大圖
由圖4-6可知,輸出電壓穩(wěn)態(tài)值為24V,波動(dòng)約為0.02%<1%,滿足設(shè)計(jì)要求,超調(diào)量為12.5%,調(diào)節(jié)時(shí)間大約為3ms。
圖4-7
突加100%負(fù)載輸出電壓波形圖
由圖4-7可知,在0.04s時(shí)加入100%的負(fù)載擾動(dòng),輸出電壓依然穩(wěn)定在24V,且滿足1%的紋波設(shè)計(jì)要求。
圖4-8
輸出電路電壓、電流波形圖
圖4-9
輸出電路電壓、電流有效值
由圖4-9中輸出電壓、電流有效值計(jì)算,輸出功率約為P=U*I=24*8.3=199.2W,輸出功率基本滿足設(shè)計(jì)要求。
建模中忽略或近似因素對(duì)數(shù)學(xué)模型的影響
(1)開關(guān)頻率對(duì)電路模型的影響
開關(guān)頻率越低,低頻擾動(dòng)頻率的選擇范圍越小,濾波電感的體積越大,整體裝置的體積和重量越大。開關(guān)頻率高,可以用更小的電感來濾除高次諧波,但是開關(guān)頻率過高會(huì)導(dǎo)致開關(guān)管功耗變大,發(fā)熱量顯著增加,電路效率變低,散熱器體積也更大,更加因此要折中效率、面積選擇開關(guān)頻率。
電路模型的開關(guān)頻率越大,輸出結(jié)果越接近數(shù)學(xué)模型,一般開關(guān)頻率可以取截止頻率的100倍。
(2)擾動(dòng)頻率對(duì)數(shù)學(xué)模型的影響
擾動(dòng)頻率過高:如果高于開關(guān)頻率,由于一般使用正弦信號(hào)模擬擾動(dòng),在一個(gè)開關(guān)周期內(nèi)擾動(dòng)信號(hào)正負(fù)分量相互抵消,小信號(hào)擾動(dòng)失去意義。
擾動(dòng)頻率過低:如果擾動(dòng)頻率過低,在多個(gè)開關(guān)周期內(nèi)擾動(dòng)信號(hào)基本為恒定值,相當(dāng)在給定電壓上疊加了一個(gè)幾乎不變的直流量,不能很好地體現(xiàn)其為小信號(hào)“動(dòng)態(tài)”模型。
綜上,擾動(dòng)頻率的選擇應(yīng)在一個(gè)合適的范圍內(nèi),這樣既可以方便地對(duì)電路進(jìn)行分析和控制,又不失動(dòng)態(tài)建模的意義。
(3)擾動(dòng)幅度的影響
小信號(hào)擾動(dòng)的幅值應(yīng)遠(yuǎn)小于穩(wěn)態(tài)工作點(diǎn)的各量的幅值。根據(jù)仿真結(jié)果可得隨著擾動(dòng)幅度增大,數(shù)學(xué)模型的輸出電壓變化幅度較小。擾動(dòng)幅值不超過±5V時(shí),輸出電壓紋波仍滿足1%的設(shè)計(jì)要求。
(4)其他影響
實(shí)際電路中存在電感的等效電阻、開關(guān)管的開通關(guān)斷時(shí)間、管壓降等都會(huì)對(duì)電路模型的輸出產(chǎn)生影響,這些量的大小也會(huì)影響小信號(hào)建模的準(zhǔn)確性和適用性。
參考文獻(xiàn)
[1]
裴云慶,等.開關(guān)穩(wěn)壓電源的設(shè)計(jì)和應(yīng)用[M].北京:機(jī)械工業(yè)出版社,2010.[2]
王兆安,等.電力電子技術(shù)[M].5版.北京:機(jī)械工業(yè)出版社,2009.[3]
林渭勛.現(xiàn)代電力電子技術(shù)[M].北京:機(jī)械工業(yè)出版社,2006.[4]
張崇巍.PWM整流器及其控制[M].北京:機(jī)械工業(yè)出版社,2003.[5]
徐德鴻.電力電子系統(tǒng)建模及控制[M].北京:機(jī)械工業(yè)出版社,2006.[6]
張占松
蔡宣三.開關(guān)電源的原理與設(shè)計(jì)(修訂版)[M].電子工業(yè)出版社,2006.
第三篇:電子電路CAD設(shè)計(jì)實(shí)驗(yàn)報(bào)告一、二、三
實(shí)驗(yàn)項(xiàng)目一:Altium Designer 10.0軟件的安裝以及熟悉軟
件開發(fā)環(huán)境
一、實(shí)驗(yàn)?zāi)康模?/p>
1.體會(huì)Altium Designer 10.0的基本操作,熟悉各元器件的應(yīng)用技巧。2.學(xué)會(huì)繪制電路原理圖的基本步驟以及方法與技巧。3.掌握原理圖元件的屬性設(shè)置
二、實(shí)驗(yàn)儀器:
計(jì)算機(jī)、Altium Designer軟件
三、實(shí)驗(yàn)學(xué)時(shí):4學(xué)時(shí)
四、實(shí)驗(yàn)的主要步驟:
一、創(chuàng)建原理圖設(shè)計(jì)文件
1)創(chuàng)建項(xiàng)目文件。執(zhí)行選單命令“FileNewPCB Project”。
2)通過“另存為”命令將創(chuàng)建的項(xiàng)目文件重命名。執(zhí)行選單命令“FileNew Save Project”或“FileNewSave Project As”。
3)創(chuàng)建原理圖編輯文件。執(zhí)行選單命令FileNewSchematic。4)執(zhí)行選單命令FileSave。
二、設(shè)置圖樣參數(shù)
在原理圖設(shè)計(jì)窗口單擊右鍵,屏幕上出現(xiàn)快捷選單,單擊“Document Options…”,出現(xiàn)“文件選項(xiàng)”對(duì)話框。在“Standard ”欄選擇右邊的選項(xiàng),將默認(rèn)的圖樣幅面“B”改為“A4”
三、載入元件庫
四、放置元件
單擊“Wiring” 工具欄內(nèi)的放置元件
按鈕,會(huì)出現(xiàn)“Place Part”對(duì)話框。也可在選單欄單擊“PlacePart…”;還可以在原理圖設(shè)計(jì)畫面上單擊鼠標(biāo)右鍵,在出現(xiàn)的快捷選單中選擇“Place Part…”
五、編輯元件屬性
雙擊要編輯的元件符號(hào),會(huì)彈出元件屬性“Component Properties”對(duì)話框。
六、放置電源和接地符號(hào)
執(zhí)行選單命令Place Power Port命令,光標(biāo)變?yōu)槭譅?,并拖有一個(gè)電源或地符號(hào),按下Tab鍵,彈出的“Power Port”對(duì)話框進(jìn)行編輯設(shè)置。
七、放置連線和節(jié)點(diǎn)
執(zhí)行選單命令Place wire和PlaceJunction,也可按工具欄中的按鈕操作。
八、放置網(wǎng)絡(luò)標(biāo)號(hào)
單擊“Wiring”工具欄內(nèi)的放置網(wǎng)絡(luò)標(biāo)號(hào)
按鈕,光標(biāo)變?yōu)槭譅睿⑼现粋€(gè)網(wǎng)絡(luò)標(biāo)號(hào)字符串,按下鍵盤上的Tab按鈕,在彈出的“Net Label”對(duì)話框中進(jìn)行修改,然后單擊“OK”按鈕,再將光標(biāo)移到要放置網(wǎng)絡(luò)標(biāo)號(hào)的的導(dǎo)線上,單擊鼠標(biāo)左鍵即可定位,從而完成電路一個(gè)網(wǎng)絡(luò)標(biāo)號(hào)的放置。
九、畫圖案和放置文字可單擊實(shí)用工具欄下拉“Drawing”命令中單擊
按鈕,光標(biāo)變成十字狀,并在其右上角有一個(gè)虛框,這時(shí)再按下Tab鍵,在對(duì)話框“Text”欄中填入文字“ZDQ.SCHDOC”,通過編輯文字對(duì)話框“Font”欄中“Change…”可以改變編輯文字的字體和大小。將光標(biāo)移到合適的位置單擊左鍵,完成文字放置,然后單擊右鍵退出放置圖形狀態(tài)。
五、實(shí)驗(yàn)結(jié)果:
六、實(shí)驗(yàn)心得:
實(shí)驗(yàn)過程中,有一些電路元器件不知道在哪里找,這是因?yàn)閷?duì)Altium Designer軟件不熟練所致,只有熟練掌握軟件操作才能流暢地完成實(shí)驗(yàn)。另外注意保存的文件名稱。
實(shí)驗(yàn)項(xiàng)目二:繪制原理圖及原理圖元件
一、實(shí)驗(yàn)?zāi)康模?/p>
1.了解自頂向下的設(shè)計(jì)方法。2.掌握繪制層次原理圖的方法和流程
二、實(shí)驗(yàn)儀器:
計(jì)算機(jī)、Altium Designer軟件
三、實(shí)驗(yàn)學(xué)時(shí):6學(xué)時(shí)
四、實(shí)驗(yàn)的主要步驟:
1.根據(jù)新建工程文件的方法,新建工程文件,并在指定目錄下保存為“本人名字-實(shí)驗(yàn).PrjPCB”;在該工程文件中新建原理圖文件,.SchDoc”。
2.從菜單選擇Design → Document Options,在此唯一需要修改的是將圖紙大?。╯heet size)設(shè)置為標(biāo)準(zhǔn)A4格式。
3.下面將介紹從默認(rèn)的安裝庫中首先放置兩個(gè)三極管Q1和Q2。
(1)從菜單選擇View → Fit Document(熱鍵V、D)確認(rèn)設(shè)計(jì)者的原理圖紙顯示在整個(gè)窗口中。
(2)單擊Libraries標(biāo)簽以顯示Libraries面板。
(3)Q1和Q2是型號(hào)為NPN的三極管,該三極管放在Miscellaneous Devices.IntLib集成庫內(nèi),所以從Libraries面板“安裝的庫名”欄內(nèi),從庫下拉列表中選擇Miscellaneous Devices.IntLib來激活這個(gè)庫。
(4)使用過濾器快速定位設(shè)計(jì)者需要的元件。默認(rèn)通配符(*)可以列出所有能在庫中找到的元件。在庫名下的過濾器欄內(nèi)鍵入c*設(shè)置過濾器,將會(huì)列出所有包含“c”的元件。
4.在列表中單擊NPN以選擇它,然后單擊Place按鈕。另外,還可以雙擊元件名。光標(biāo)將變成十字狀,并且在光標(biāo)上“懸浮”著一個(gè)三極管的輪廓?,F(xiàn)在設(shè)計(jì)者處于元件放置狀態(tài),如果設(shè)計(jì)者移動(dòng)光標(biāo),三極管輪廓也會(huì)隨之移動(dòng)。
5.在原理圖上放置元件之前,首先要編輯其屬性。在三極管懸浮在光標(biāo)上時(shí),按下TAB鍵,這將打開Component Properties(元件屬性)對(duì)話框,現(xiàn)在要設(shè)置對(duì)話框
選項(xiàng)如圖2-9所示。
6.在對(duì)話框Properties單元,在Designator欄中鍵入Q1以將其值作為第一個(gè)元件序號(hào)。
7.設(shè)計(jì)者創(chuàng)建元件之前,需要?jiǎng)?chuàng)建一個(gè)新的原理圖庫來保存設(shè)計(jì)內(nèi)容。這個(gè)新創(chuàng)建的原理圖庫可以是分立的庫,與之關(guān)聯(lián)的模型文件也是分立的。另一種方法是創(chuàng)建一個(gè)可被用來結(jié)合相關(guān)的庫文件編譯生成集成庫的原理圖庫。使用該方法需要先建立一個(gè)庫文件包,庫文件包(.LibPkg文件)是集成庫文件的基礎(chǔ),它將生成集成庫所需的那些分立的原理圖庫、封裝庫和模型文件有機(jī)地結(jié)合在一起。
8.執(zhí)行 File → New → Project → Integrated 新建的庫文件包,默認(rèn)名為Integrated_Libraryl.LibPkg。
9.在Projects面板上右擊庫文件包名,在彈出菜單上單擊Save Project As命令,在彈出的對(duì)話框中使用瀏覽功能選定適當(dāng)?shù)穆窂剑缓筝斎嗣QNew Integrated_ Library1.LibPkg,單擊Save按鈕。注意如果不輸人后綴名的話,系統(tǒng)會(huì)自動(dòng)添加默認(rèn)名。
10.添加空白原理圖庫文件。執(zhí)行File → New → Library → Schematic Library命令,Projects面板將顯示新建的原理圖庫文件,默認(rèn)名為Schlibl.SchLib。自動(dòng)進(jìn)入電路圖新元件的編輯界面,如圖:
11.設(shè)計(jì)者可在一個(gè)已打開的庫中執(zhí)行Tools→New Component命令新建一個(gè)原理圖元件。由于新建的庫文件中通常已包含一個(gè)空的元件,因此一般只需要將Component_1重命名就可開始對(duì)第一個(gè)元件進(jìn)行設(shè)計(jì),這里以AT89C2051單片機(jī)(如圖4-7所示)為例介紹新元件的創(chuàng)建步驟。在原理圖新元件的編輯界面內(nèi):
(1)在SCH Library面板上的Components列表中選中Component_1選項(xiàng),執(zhí)行Tools→ Rename Component命令,彈出重命名元件對(duì)話框輸入一個(gè)新的、可唯一標(biāo)識(shí)該元件的名稱,如AT89C2051,并單擊“確定”按鈕。同時(shí)顯示一張中心位置有一個(gè)巨大十字準(zhǔn)線的空元件圖紙以供編輯。
(2)如有必要,執(zhí)行Edit→Jump→Origin命令(快捷鍵J,O),將設(shè)計(jì)圖紙的原點(diǎn)定位到設(shè)計(jì)窗口的中心位置。檢查窗口左下角的狀態(tài)欄,確認(rèn)光標(biāo)已移動(dòng)到原點(diǎn)位置。新的元件將在原點(diǎn)周圍上生成,此時(shí)可看到在圖紙中心有一個(gè)十字準(zhǔn)線。設(shè)計(jì)者應(yīng)該在原點(diǎn)附近創(chuàng)建新的元件,因?yàn)樵谝院蠓胖迷撛r(shí),系統(tǒng)會(huì)根據(jù)原點(diǎn)附近的電氣熱點(diǎn)定位該元件。
(3)可在“Library Editor Workspace”對(duì)話框設(shè)置單位、捕獲網(wǎng)格(Snap)和可視網(wǎng)格(Visible)等參數(shù),執(zhí)行Tools→Document Options命令(快捷鍵T,D),彈出Library Editor Workspace對(duì)話框如圖4-3所示。針對(duì)當(dāng)前使用的例子,此處需要圖4-3所示對(duì)話框中各項(xiàng)參數(shù)。選擇Always Show Comment/Designator復(fù)選框,以便在當(dāng)前文檔中顯示元器件的注釋和標(biāo)識(shí)符。單擊Units標(biāo)簽,選中Use Imperial Unit System復(fù)選框,其它使用默認(rèn)值,單擊OK按鈕關(guān)閉對(duì)話框。注意縮小和放大均圍繞光標(biāo)所在位置進(jìn)行,所以在縮
放時(shí)需保持光標(biāo)在原點(diǎn)位置。
(4)首先需定義元件主體。在第4象限畫矩形框:1000*1400mil;執(zhí)行Place→Rectangle命令或單擊“ ”圖標(biāo),此時(shí)鼠標(biāo)箭頭變?yōu)槭止鈽?biāo),并帶有一個(gè)矩形的形狀。在圖紙中移動(dòng)十字光標(biāo)到坐標(biāo)原點(diǎn)(0,0),單擊鼠標(biāo)左鍵確定矩形的一個(gè)頂點(diǎn),然后繼續(xù)移動(dòng)十字光標(biāo)到另一位置(100,-140),單擊鼠標(biāo)左鍵,確定矩形的另一個(gè)頂點(diǎn),這時(shí)矩形放置完畢。十字光標(biāo)仍然帶有矩形的形狀,可以繼續(xù)繪制其他矩形。
(5)元件引腳代表了元件的電氣屬性,為元件添加引腳的步驟如下。單擊Place→Pin命令(快捷鍵P,P)或單擊工具欄按鈕“
”,光標(biāo)處浮現(xiàn)引腳,帶電氣屬性。放置之前,按Tab鍵打開Pin ProPerties對(duì)話框,如圖所示。如果設(shè)計(jì)者在放置引腳之前先設(shè)置好各項(xiàng)參數(shù),則放置引腳時(shí),這些參數(shù)成為默認(rèn)參數(shù),連續(xù)放置引腳時(shí),引腳的編號(hào)和引腳名稱中的數(shù)字會(huì)自動(dòng)增加。
五、實(shí)驗(yàn)結(jié)果:
六、實(shí)驗(yàn)心得:
在繪制原理圖的過程中要注意元件庫的加載以及元件的查找方法,在缺少所繪原理圖元件時(shí),我們要手動(dòng)繪制該元件。
實(shí)驗(yàn)項(xiàng)目三: 印制電路板PCB設(shè)計(jì)
一、實(shí)驗(yàn)?zāi)康模?/p>
1.熟悉生成印刷電路板的基本步驟和方法 2.了解PCB設(shè)計(jì)流程、PCB工具欄使用。3.掌握自動(dòng)布局與自動(dòng)布線等知識(shí)。
二、實(shí)驗(yàn)儀器:
計(jì)算機(jī)、Altium Designer軟件
三、實(shí)驗(yàn)學(xué)時(shí):6學(xué)時(shí)
四、實(shí)驗(yàn)的主要步驟:
1.打開繪制完成的振蕩器電路原理圖。
2.新建一個(gè)PCB文檔,打開PCB編輯器,單擊PCB編輯窗口西方的“Keep-Out Layer”面板標(biāo)簽,在該層中執(zhí)行Place/keepout/Track命令或者單擊工具欄中的快捷按鈕,繪制電路板的電氣邊框。
3.加載元器件庫,在PCB編輯窗口內(nèi),單擊“Libraries”面板標(biāo)簽打開元 器件庫,在該面板中單擊左上方的“Libraries”按鈕,添加Miscellaneous Devices PCB元器件庫,然后單擊按鈕Close按鈕即完成PCB元器件庫的加載。
4.在PCB編輯中執(zhí)行Design/Import Changes From[PCB Project1.PrjPCB]命令并在出現(xiàn)的工程網(wǎng)絡(luò)變化對(duì)話框中單擊“Validate Changes”按鈕,若狀態(tài)欄一列中出現(xiàn)○√說明裝入的元器件正確,再單擊“Execute Changes”按鈕將原理圖加載到PCB編輯器中。
5.執(zhí)行Tools/Auto Placement/Auto Placer命令,得到自動(dòng)布線的結(jié)果。
6.手動(dòng)元器件布局調(diào)整。執(zhí)行Edit/Move/move命令,選中要移動(dòng)的元器件,單擊空格鍵進(jìn)行旋轉(zhuǎn),直至找到自己想要的角度,再單擊鼠標(biāo)左鍵來放置元器件,手動(dòng)調(diào)整元器件布局的結(jié)果。
7.執(zhí)行Auto Route命令后,在隨后彈出的對(duì)話框中選擇默認(rèn)值,單擊“Route All”按鈕,進(jìn)行自動(dòng)布線。布線完畢后,在PCN編輯器中,將顯示如圖5-5所示的自動(dòng)布線電路版圖。
8.執(zhí)行View/Board in 3D命令,系統(tǒng)將自動(dòng)生成一個(gè)3D 的效果圖 9.布線規(guī)則檢查,完成后保存。
10.新建“.Schlib”的原理圖,繪制原理圖元件庫。產(chǎn)生一個(gè)新的封裝庫文件。方法如下:選擇主菜單中的“File”→“New”→“l(fā)ibrary”→“PCBlibrary”命令,在“.PrjPcb”項(xiàng)目中新建一個(gè)名稱為“PCB1.Pcblib”的封裝庫文件。在新建的封裝庫文件上單擊鼠標(biāo)右鍵,在彈出的下拉菜單中選擇“Save”命令,打開“Save[PCB1.Pcblib]As”對(duì)話框。在“Save[PCB1.Pcblib]As”對(duì)話框的“文件名”編輯框中輸入“名稱”,單擊“保存”按鈕,將新建的PCB文檔保存為“.Pcblib”文件。
11.在主菜單中選擇“place”→命令,放置元件外形以及焊盤。
五、實(shí)驗(yàn)結(jié)果:
六、實(shí)驗(yàn)心得:
實(shí)驗(yàn)過程中,有一些電路元器件不知道在哪里找,這是因?yàn)閷?duì)Altium Designer軟件不熟練所致,只有熟練掌握軟件操作才能流暢地完成實(shí)驗(yàn)。
第四篇:計(jì)算方法與實(shí)習(xí)上機(jī)報(bào)告
計(jì)算方法與實(shí)習(xí)
——上機(jī)報(bào)告
學(xué)院:電子工程學(xué)院
2015.1.4
學(xué)號(hào):***
姓名: 劉
波
習(xí)題一: 舍入誤差及穩(wěn)定性
一、實(shí)驗(yàn)?zāi)康?/p>
(1)通過上機(jī)編程,復(fù)習(xí)鞏固以前所學(xué)程序設(shè)計(jì)語言及上機(jī)操作指令;(2)通過上機(jī)計(jì)算,了解舍入誤差所引起的數(shù)值不穩(wěn)定性
二、實(shí)驗(yàn)內(nèi)容
?
21、用兩種不同的順序計(jì)算?n,分析其誤差的變化
n?1100002、已知連分?jǐn)?shù)f?b0?a1,利用下面的算法計(jì)算f:
b1?a2/?b2?a3/(...?an/bn)?ai?
1(i?n?1,n?2,..., 0f?d0 di?1寫一程序,讀入n,b0,b1,...,bn,a1,...,an,計(jì)算并打印f dn?bn,di?bi?
3、給出一個(gè)有效的算法和一個(gè)無效的算法計(jì)算積分
xnyn??dx
(n?0,1,..., 104x?1N11?311?
4、設(shè)SN??2,已知其精確值為????
2?2NN?1?j?2j?1(1)編制按從大到小的順序計(jì)算SN的程序 1(2)編制按從小到大的順序計(jì)算SN的程序
(3)按兩種順序分別計(jì)算S1000,S10000,S30000,并指出有效位數(shù)
三、實(shí)驗(yàn)步驟、程序設(shè)計(jì)、實(shí)驗(yàn)結(jié)果及分析
?
21、用兩種不同的順序計(jì)算?n,分析其誤差的變化
n?110000(1)實(shí)驗(yàn)步驟:
分別從1~10000和從10000~1兩種順序進(jìn)行計(jì)算,應(yīng)包含的頭文件有stdio.h和math.h(2)程序設(shè)計(jì): a.順序計(jì)算
#include
sum=sum+(1/pow(n,2));
if(n%1000==0)printf(“sun[%d]=%-30f”,n,sum);
if(n>=10000)break;
n++;} printf(“sum[%d]=%fn”,n,sum);} b.逆序計(jì)算
#include
while(n!=0){
sum=sum+(1/pow(n,2));
if(n%200==0)
printf(“sum[%d]=%-10f”,n,sum);
if(n<1)break;
n--;} printf(“sum[%d]=%fn”,n,sum);}
(3)實(shí)驗(yàn)結(jié)果及分析: 程序運(yùn)行結(jié)果: a.順序計(jì)算
b.逆序計(jì)算
結(jié)果分析:兩種不同順序計(jì)算結(jié)果是一樣的,順序計(jì)算誤差從一開始就很小,而逆序計(jì)算誤差最開始十分大,后來結(jié)果正確。
2、已知連分?jǐn)?shù)f?b0?(1)實(shí)驗(yàn)步驟: 利用 dn?bn,di?bi?a1,計(jì)算f:
b1?a2/?b2?a3/(...?an/bn)?ai?1,0
(i?n?1,n?2,...,f?d0,計(jì)算f
di?1(2)程序設(shè)計(jì) #include
printf(“nplease input a[0] to a[n-1]:n”);for(i=1;i printf(“a[%d]=”,i); scanf(“%f”,&a[i]);} printf(“nplease input b[0] to b[n-1]:n”);for(i=0;i printf(“b[%d]=”,i); scanf(“%f”,&b[i]);} d[n]=b[n];for(i=n-1;i>=0;i--) c[i]=b[i]+a[i+1]/c[i+1];printf(“nf=%fn”,c[0]);}(3)實(shí)驗(yàn)結(jié)果 程序運(yùn)行結(jié)果: 3、給出一個(gè)有效的算法和一個(gè)無效的算法計(jì)算積分 xnyn??dx (n?0,1,..., 104x?11(1)實(shí)驗(yàn)步驟 利用C語言編寫程序,分別使用數(shù)值穩(wěn)定的和數(shù)值不穩(wěn)定的計(jì)算公式所建立的遞推公式進(jìn)行計(jì)算。 (2)程序設(shè)計(jì) #include y_1=1.0/(4*n)+y_0/(-4.0); printf(“y[%d]=%-20f”,n,y_1); if(n>=10)break; y_0=y_1; n++; if(n%3==0)printf(“n”);} printf(“n無效算法的輸出結(jié)果:n”);printf(“y[10]=%-20f”,y_2);while(1){ y_3=1.0/n-4.0*y_2; printf(“y[%d]=%-20f”,m-1,y_3); if(m<=1)break; y_2=y_3; m--; if(m%2==0)printf(“n”);} }(3)實(shí)驗(yàn)結(jié)果及分析 程序運(yùn)行結(jié)果: 結(jié)果分析:無效算法數(shù)值不穩(wěn)定,誤差造成的影響特別大 4、設(shè)SN? ?j?2N11?311?,已知其精確值為???? 2?2NN?1?j2?1(1)實(shí)驗(yàn)步驟 先編程按從大到小的順序計(jì)算SN的程序,再編程按從小到大的順序計(jì)算SN的程序,然后按兩種順序分別計(jì)算S1000,S10000,S30000。(2)程序設(shè)計(jì) #include int N;double SN[30000];SN[30000]=(3.0/2.0-1.0/30000.0-1/30001.0)/2.0; for(N=30000;N>=2;N--) SN[N-1]=SN[N]-1.0/(N*N-1);printf(“從大到小順序計(jì)算nSN[1000]=%fnSN[10000]=%fnSN[30000]=%fn”,SN[1000],SN[10000],SN[30000]); SN[2]=(3.0/2-1.0/2.0-1/3.0)/2.0;for(N=3;N<=30000;N++) SN[N]=SN[N-1]+1.0/(N*N-1);printf(“從小到大順序計(jì)算nSN[1000]=%fnSN[10000]=%fnSN[30000]=%fn”,SN[1000],SN[10000],SN[30000]);}(3)實(shí)驗(yàn)結(jié)果及分析 程序運(yùn)行結(jié)果: : : 結(jié)果分析:不同順序計(jì)算所得結(jié)果是一樣的。 四、總結(jié) 通過這次上機(jī),學(xué)習(xí)了解了舍入誤差在不同算法時(shí)對(duì)結(jié)果的影響不同,穩(wěn)定的算法才能獲得正確的結(jié)果。 習(xí)題二: 一、實(shí)驗(yàn)?zāi)康?/p> (1)通過對(duì)二分法與牛頓迭代法做編程練習(xí)和上機(jī)運(yùn)算,進(jìn)一步體會(huì)二分法和牛頓法的不同。 (2)編寫割線迭代法的程序,求非線性方程的解,并與牛頓迭代法作比較。 二、實(shí)驗(yàn)內(nèi)容 1、用牛頓法求下列方程的根(1)x?e?0 (2)xe?1?0(3)lgx?x?2?0 2、編寫割線法程序求解第一問的方程 三、實(shí)驗(yàn)步驟、程序設(shè)計(jì)、實(shí)驗(yàn)結(jié)果及分析 1、牛頓法(1)實(shí)驗(yàn)步驟 通過定義牛頓法求方程的子函數(shù),用main函數(shù)調(diào)用子函數(shù)求根(2)程序設(shè)計(jì) #include float ff1(float x){ return x*x-exp(x);} x2xfloat ff2(float x){ return x*exp(x)-1;} float ff3(float x){ return log(x)+x-2;} float answer(float(*p)(float)){ int k=2; float m=1,n=-1,x2,a,b,c; if(p==ff3)n=2; printf(“x[0] = %.4f, x[1] = %.4f, ”,m,n); while(1) { if(fabs(m-n)<1e-4)break; a=p(n)*(n-m); b=p(n)-p(m); c=a/b; x2=n-c; m = n; n = x2; printf(“x[%d] = %.4f, ”,k,x2); k++; if(k%3==0)printf(“n”); } if(k%3!=0)printf(“n”); printf(“iteration times: %d, roots: %.4fn ”,k-2,n);return 0;} main(){ printf(“x*x-exp(x),n”);answer(ff1);printf(“x*exp(x)-1,n”);answer(ff2);printf(“l(fā)g(x)+x-2,n”);answer(ff3);return 0;}(3)實(shí)驗(yàn)結(jié)果及分析 2、割線法(1)程序設(shè)計(jì) #include int i,j; float x1=2.2; float x2=2,x3; scanf(“%d”,&i); if(i==1)printf(“%f”,x1); else if(i==2)printf(“%f”,x2); else { for(j=3;j<=i;j++) { x3=gexian(x1,x2); x1=x2; x2=x3; } printf(“%f”,gexian(x1,x2)); } } float f(float x){ return(x*x-exp(x));} float gexian(float x1,float x2){ return(x2-(f(x2)/(f(x2)-f(x1)))*(x2-x1));}(3)實(shí)驗(yàn)結(jié)果及分析 四、總結(jié) 了解和學(xué)習(xí)了二分法和牛頓迭代法的思想以及程序設(shè)計(jì)的方法,比較了迭代法和牛頓法的特點(diǎn):牛頓法收斂速度較快,但對(duì)初值選取要求較高;割線法計(jì)算量少。 習(xí)題三: 線性方程組數(shù)值解法 一、實(shí)驗(yàn)?zāi)康?/p> (1)熟悉求解線性方程組的有關(guān)理論和方法; (2)會(huì)編制列主元消去法,LU分解法,雅可比及高斯-賽德爾迭代法的程序;(3)通過實(shí)際計(jì)算,進(jìn)一步了解各種方法的優(yōu)缺點(diǎn),選擇合適的數(shù)值方法。 二、實(shí)驗(yàn)內(nèi)容 1、用列主元消去法解方程組 2、用LU分解法解方程組 三、實(shí)驗(yàn)步驟、程序設(shè)計(jì)、實(shí)驗(yàn)結(jié)果及分析 1、用列主元消去法解方程組(1)程序設(shè)計(jì) #include k=i; for(j=i+1;j<=n-1;j++) if(fabs(*(c+j*(n+1)+i))>(fabs(*(c+k*(n+1)+i)))) k=j; if(k!=i) for(j=i;j<=n;j++) { p=*(c+i*(n+1)+j); *(c+i*(n+1)+j)=*(c+k*(n+1)+j); *(c+k*(n+1)+j)=p; } for(j=i+1;j<=n-1;j++) { p=(*(c+j*(n+1)+i))/(*(c+i*(n+1)+i)); for(t=i;t<=n;t++) *(c+j*(n+1)+t)-=p*(*(c+i*(n+1)+t)); } } for(i=n-1;i>=0;i--){ for(j=n-1;j>=i+1;j--) (*(c+i*(n+1)+n))-=x[j]*(*(c+i*(n+1)+j)); x[i]=*(c+i*(n+1)+n)/(*(c+i*(n+1)+i));} } void main(){ int i;float x[4];float c[4][5]={1,1,0,3,4,2,1,-1,1,1,3,-1,-1,3,-3,-1,2,3,-1,4}; ColPivot(c[0],4,x);for(i=0;i<=3;i++) printf(“x[%d]=%fn”,i,x[i]);}(2)實(shí)驗(yàn)結(jié)果及分析 (1)題 (2)題 2、用LU分解法解方程組(1)程序設(shè)計(jì) #include for(i=r;r<=n;i++) for(k=0;k<=r-1;k++) *(u+r*(n+1)+i)-=*(u+r*(n+1)+k)*(*(u+k*(n+1)+i)); for(i=r+1;i<=n-1;i++) { for(k=0;k<=r-1;k++) *(u+i*(n+1)+r)-=*(u+i*(n+1)+k)*(*(u+k*(n+1)+r)); *(u+i*(n+1)+r)/=*(u+r*(n+1)+r); } } for(i=n-1;i>=0;i--){ for(r=n-1;r>=i+1;r--) *(u+i*(n+1)+n)-=*(u+i*(n+1)+r)*x[r]; x[i]=*(u+i*(n+1)+n)/(*(u+i*(n+1)+i));} } 四、總結(jié) 掌握了用列主元消去法和LU分解法求解方程組程序編寫的技巧。 習(xí)題四: 插值法 一、實(shí)驗(yàn)?zāi)康?/p> (1)熟悉拉格朗日插值法多項(xiàng)式和牛頓插值多項(xiàng)式,注意其不同點(diǎn);(2)掌握三次樣條插值解決一些實(shí)際問題。 二、實(shí)驗(yàn)內(nèi)容 1、按所給數(shù)據(jù)做二次插值,并求給定點(diǎn)的函數(shù)值 2、按所給數(shù)據(jù)做五次插值,并求給定點(diǎn)的函數(shù)值 3、牛頓前插公式計(jì)算函數(shù)值 三、實(shí)驗(yàn)步驟、程序設(shè)計(jì)、實(shí)驗(yàn)結(jié)果及分析 1、二次插值(1)程序設(shè)計(jì) #include //n為(n+1)次插值; { int i,j;float *a,yy=0; a=new float[n];for(i=0;i<=n-1;i++){ a[i]=y[i]; for(j=0;j<=n-1;j++) if(j!=i)a[i]*=(xx-x[j])/(x[i]-x[j]); yy+=a[i];} delete a;return yy;} void main(){ float x[5]={-3.0,-1.0,1.0,2.0,3.0};float y[5]={1.0,1.5,2.0,2.0,1.0};float xx1=-2,xx2=0,xx3=2.75,yy1,yy2,yy3;yy1=Lagrange(x,y,xx1,3);yy2=Lagrange(x,y,xx2,3);yy3=Lagrange(x,y,xx3,3);printf(“x1=%-20f,y1=%fn”,xx1,yy1);printf(“x2=%-20f,y2=%fn”,xx2,yy2);printf(“x3=%-20f,y3=%fn”,xx3,yy3);}(2)實(shí)驗(yàn)結(jié)果 2、五次插值(1)程序設(shè)計(jì) #include //n為(n+1)次插值; { int i,j;float *a,yy=0; a=new float[n];for(i=0;i<=n-1;i++){ a[i]=y[i]; for(j=0;j<=n-1;j++) if(j!=i)a[i]*=(xx-x[j])/(x[i]-x[j]); yy+=a[i];} delete a;return yy;} void main(){ float x[6]={0.30,0.42,0.50,0.58,0.66,0.72};float y[6]={1.04403,1.08462,1.11803,1.15603,1.19817,1.23223};float xx1=0.46,xx2=0.55,xx3=0.60,yy1,yy2,yy3;yy1=Lagrange(x,y,xx1,6);yy2=Lagrange(x,y,xx2,6); yy3=Lagrange(x,y,xx3,6);printf(“x1=%-20f,y1=%fn”,xx1,yy1);printf(“x2=%-20f,y2=%fn”,xx2,yy2);printf(“x3=%-20f,y3=%fn”,xx3,yy3);} (2)實(shí)驗(yàn)結(jié)果 3、牛頓前插公式計(jì)算函數(shù)值(1)程序設(shè)計(jì) #include int k,i;f[0][0]=y[0];f[1][0]=y[1];f[2][0]=y[2];f[3][0]=y[3];for(k=1;k<=n;k++) for(i=0;i<=(N-k);i++) f[i][k]=f[i+1][k-1]-f[i][k-1];return;} void main(){ int i,k=1;float a,b=1,m=21.4,t=1.4,f[4][4]={0};float x[5]={20,21,22,23,24};float y[5]={1.30103,1.32222,1.34242,1.36173,1.38021};Difference(y,f,N);a=f[0][0];for(i=1;i<=N;i++){ k=k*i; b=b*(t-i+1); a=a+b*f[0][i]/k;} printf(“x(k)n”);for(i=0;i<=4;i++) printf(“%-20f”,x[i]);printf(“ny(k)n”); for(i=0;i<=4;i++) printf(“%-20f”,y[i]);for(k=1;k<=3;k++){ printf(“nF(%d)n ”,k); for(i=0;i<=(3-k);i++) { printf(“%-20f”,f[i][k]); } } printf(“n”);printf(“f(%f)=%-20f”,m,a);printf(“n”);}(2)實(shí)驗(yàn)結(jié)果 四、總結(jié) 學(xué)習(xí)了插值法,學(xué)會(huì)了利用插值法編程求多項(xiàng)式的解,可以求解很多問題,讓求解多項(xiàng)式解變得非常簡(jiǎn)單。 習(xí)題五: 曲線擬合 一、實(shí)驗(yàn)?zāi)康?/p> (1)了解最小二乘法的基本原理,通過計(jì)算機(jī)解決實(shí)際問題;(2)了解超定方程組的最小二乘解法。 二、實(shí)驗(yàn)內(nèi)容 1、分別用拋物線y?a?bx?cx2和指數(shù)曲線y?aebx擬合所給數(shù)據(jù),并比較這兩個(gè)擬合函數(shù)的優(yōu)劣。 2、按所給實(shí)驗(yàn)數(shù)據(jù),用形如y?a?bx的拋物線進(jìn)行最小二乘擬合。 三、程序設(shè)計(jì)、結(jié)果分析 1、分別用拋物線y?a?bx?cx和指數(shù)曲線y?ae擬合所給數(shù)據(jù) a.拋物線 (1)程序設(shè)計(jì): #include 2bx2 float y[15]={33.4,79.50,122.65,159.05,189.15,214.15,238.65,252.50,267.55,280.50,296.65,301.40,310.40,318.15,325.15};void Approx(float[],float[],int,int,float[]);Approx(x,y,15,2,a);for(i=0;i<=2;i++) printf(“a[%d]=%fn”,i,a[i]);} void Approx(float x[],float y[],int m,int n,float a[]){ int i,j,t;float *c=new float[(n+1)*(n+2)];float power(int,float);void ColPivot(float *,int,float[]);for(i=0;i<=n;i++){ for(j=0;j<=n;j++) { *(c+i*(n+2)+j)=0; for(t=0;t<=m-1;t++) *(c+i*(n+2)+j)+=power(i+j,x[t]); } *(c+i*(n+2)+n+1)=0; for(j=0;j<=m-1;j++) *(c+i*(n+2)+n+1)+=y[j]*power(i,x[j]);} ColPivot(c,n+1,a);delete c;} void ColPivot(float *c,int n,float x[]){ int i,j,t,k;float p;for(i=0;i<=n-2;i++){ k=i; for(j=i+1;j<=n-1;j++) if(fabs(*(c+j*(n+1)+i))>(fabs(*(c+k*(n+1)+i)))) k=j; if(k!=i) for(j=i;j<=n;j++) { p=*(c+i*(n+1)+j); *(c+i*(n+1)+j)=*(c+k*(n+1)+j); *(c+k*(n+1)+j)=p; } for(j=i+1;j<=n-1;j++) { p=(*(c+j*(n+1)+i))/(*(c+i*(n+1)+i)); for(t=i;t<=n;t++)*(c+j*(n+1)+t)-=p*(*(c+i*(n+1)+t)); } } for(i=n-1;i>=0;i--){ for(j=n-1;j>=i+1;j--) (*(c+i*(n+1)+n))-=x[j]*(*(c+i*(n+1)+j)); x[i]=*(c+i*(n+1)+n)/(*(c+i*(n+1)+i));} } float power(int i,float v){ float a=1;while(i--)a*=v;return a;}(2)實(shí)驗(yàn)結(jié)果 2、最小二乘擬合(1)程序設(shè)計(jì) #include //增加了數(shù)組z; {z[n]=log(y[n]/x[n]);} void Approx(float[],float[],int,int,float[]);Approx(x,z,15,1,a); //變成一次擬合; //for(i=0;i<=1;i++) //printf(“a[%d]=%fn”,i,a[i]);printf(“a=exp(a[0])=%fn”,exp(a[0]));printf(“b=-a[1]=%fn”,-a[1]);} void Approx(float x[],float y[],int m,int n,float a[]){ int i,j,t;float *c=new float[(n+1)*(n+2)];float power(int,float);void ColPivot(float *,int,float[]);for(i=0;i<=n;i++){ for(j=0;j<=n;j++) { *(c+i*(n+2)+j)=0; for(t=0;t<=m-1;t++) *(c+i*(n+2)+j)+=power(i+j,x[t]); } *(c+i*(n+2)+n+1)=0; for(j=0;j<=m-1;j++) *(c+i*(n+2)+n+1)+=y[j]*power(i,x[j]);} ColPivot(c,n+1,a);delete c;} void ColPivot(float *c,int n,float x[]){ int i,j,t,k;float p;for(i=0;i<=n-2;i++){ k=i; for(j=i+1;j<=n-1;j++) if(fabs(*(c+j*(n+1)+i))>(fabs(*(c+k*(n+1)+i)))) k=j; if(k!=i) for(j=i;j<=n;j++) { p=*(c+i*(n+1)+j); *(c+i*(n+1)+j)=*(c+k*(n+1)+j); *(c+k*(n+1)+j)=p; } for(j=i+1;j<=n-1;j++) { p=(*(c+j*(n+1)+i))/(*(c+i*(n+1)+i)); for(t=i;t<=n;t++)*(c+j*(n+1)+t)-=p*(*(c+i*(n+1)+t)); } } for(i=n-1;i>=0;i--){ for(j=n-1;j>=i+1;j--) (*(c+i*(n+1)+n))-=x[j]*(*(c+i*(n+1)+j)); x[i]=*(c+i*(n+1)+n)/(*(c+i*(n+1)+i));} } float power(int i,float v){ float a=1;while(i--)a*=v;return a;}(2)實(shí)驗(yàn)結(jié)果 四、總結(jié) 通過曲線擬合,最小二乘法的基本原理的學(xué)習(xí),我學(xué)會(huì)了利用計(jì)算機(jī)解決現(xiàn)實(shí)實(shí)際問題中的曲線擬合。 習(xí)題六: 數(shù)值積分 一、實(shí)驗(yàn)?zāi)康?/p> (1)通過實(shí)際計(jì)算體會(huì)各種方法的精確度;(2)會(huì)編寫用龍貝格算法求定積分的程序。 二、實(shí)驗(yàn)內(nèi)容 編寫復(fù)化柯特斯求積分公式,并計(jì)算例題1例題2,觀察n為多少時(shí)有6位有效數(shù)字。 三、程序設(shè)計(jì)、實(shí)驗(yàn)結(jié)果及分析(1)程序設(shè)計(jì) #include c1+=(*f)(a+k*h); c2+=(*f)(a+k*h+h/4); c3+=(*f)(a+k*h+h/2); c4+=(*f)(a+k*h+3*h/4);} c=h/90*(7*((*f)(a)+(*f)(b))+14*c1+32*c2+12*c3+32*c4);return c;} float f(float x){ return 1/sqrt(1+x*x*x);} void main(){ int i,n=4;float c;for(i=0;i<=4;i++){ c=Cotes(f,0,1,n); printf(“C(%d)=%fn”,n,c); n*=2;} } #include c1+=(*f)(a+k*h); c2+=(*f)(a+k*h+h/4); c3+=(*f)(a+k*h+h/2); c4+=(*f)(a+k*h+3*h/4);} c=h/90*(7*((*f)(a)+(*f)(b))+14*c1+32*c2+12*c3+32*c4);return c;} float f(float x){ // return 1/sqrt(1+x*x*x); if(x==0)return 1; else return sin(x)/x;} void main(){ int i,n=4;float c;for(i=0;i<=4;i++){ // c=Cotes(f,0,1,n); c=Cotes(f,0,5,n); printf(“C(%d)=%fn”,n,c); n*=2;} } (2)實(shí)驗(yàn)結(jié)果及分析 四、總結(jié) 學(xué)習(xí)了復(fù)化辛卜生公式,自適應(yīng)梯形公式,龍貝格算法,運(yùn)用求解定積分并控制精度的方法。 習(xí)題七: 常微分方程數(shù)值解法 一、實(shí)驗(yàn)?zāi)康?/p> (1)熟悉求解常微分方程初值問題的有關(guān)方法和理論,主要是改進(jìn)歐拉公式,四階龍格-庫塔法和阿當(dāng)姆斯方法; (2)編制上述方法計(jì)算機(jī)程序,包括求解微分方程組的計(jì)算程序;(3)針對(duì)實(shí)習(xí)題編制程序,并上機(jī)計(jì)算其所需要的結(jié)果; (4)體會(huì)各種解法的功能,優(yōu)缺點(diǎn)及適用場(chǎng)合,會(huì)選取適當(dāng)?shù)那蠼夥椒ā?/p> 二、實(shí)驗(yàn)內(nèi)容 1、分別用改進(jìn)歐拉法與四階龍格-庫塔公式(取h?0.1)求解下列微分方程初值問題 2、用四階龍格-庫塔公式(取h?0.1)解下列微分方程組初值問題 三、實(shí)驗(yàn)步驟、程序設(shè)計(jì)、實(shí)驗(yàn)結(jié)果及分析 1、分別用改進(jìn)歐拉法與四階龍格-庫塔公式(取h?0.1)求解下列微分方程初值問題 a.改進(jìn)歐拉法(1)程序設(shè)計(jì) #include yp=y+h*(*f)(x,y); x=x0+i*h; yc=y+h*(*f)(x,yp); y=(yp+yc)/2; printf(“x[%d]=%fty[%d]=%fn”,i,x,i,y);} } float f(float x,float y){ //return x*x+y*y; //題(1) //return 1/(1+y*y); //題(2) return y-2*x/y; //題(3)} void main(){ float xn=1.0,x0=0,y0=1; ModEuler(f,x0,y0,xn,10);} (2)實(shí)驗(yàn)結(jié)果及分析(1) (2) (3) b.四階龍格-庫塔公式(1)程序設(shè)計(jì) #include K1=(*f)(x,y); K2=(*f)(x+h/2,y+h*K1/2); K3=(*f)(x+h/2,y+h*K2/2); K4=(*f)(x+h,y+h*K3); y=y+h*(K1+2*K2+2*K3+K4)/6; x=a+i*h; printf(“x[%d]=%fty[%d]=%fn”,i,x,i,y);} } float f(float x,float y){ //return x*x+y*y; //題(1) //return 1/(1+y*y); //題(2) return y-2*x/y; //題(3)} void main(){ float a=0,b=1.0,y0=1;Runge_Kutta(f,a,b,y0,10);}(2)實(shí)驗(yàn)結(jié)果(1) (2) (3) 2、四階龍格-庫塔公式解微分方程組初值問題(1)程序設(shè)計(jì) #include K1=(*f)(x,y,z);l1=(*g)(x,y,z); K2=(*f)(x+h/2,y+h*K1/2,z+h*l1/2);l2=(*g)(x+h/2,y+h*K1/2,z+h*l1/2); K3=(*f)(x+h/2,y+h*K2/2,z+h*l2/2);l3=(*g)(x+h/2,y+h*K2/2,z+h*l2/2); K4=(*f)(x+h,y+h*K3,z+h*l3);l4=(*g)(x+h,y+h*K3,z+h*l3); y=y+h*(K1+2*K2+2*K3+K4)/6; z=z+h*(l1+2*l2+2*l3+l4)/6; x=a+i*h; printf(“x[%d]=%fty[%d]=%ftz[%d]=%fn”,i,x,i,y,i,z);} } float f(float x,float y,float z){ return 120-2*y+2*z; } float g(float x,float y,float z){ return 2*y-5*z; } void main(){ float a=0,b=1.0,y0=0,g0=0;Runge_Kutta(f,g,a,b,y0,g0,10);} (2)實(shí)驗(yàn)結(jié)果 四、總結(jié) 通過這次學(xué)習(xí),我掌握了根據(jù)不同場(chǎng)合選擇不同方法計(jì)算求解問題的方法,主要學(xué)習(xí)了改進(jìn)歐拉法和四階龍格-庫塔法求解微分方程的求解問題方法。 計(jì)算方法上機(jī)匯總: 通過對(duì)這門課的學(xué)習(xí),我們學(xué)習(xí)了很多計(jì)算方程、曲線擬合、求解微分方程的方法。而實(shí)習(xí) 課讓我們將所學(xué)的原理應(yīng)用到實(shí)踐中去,上機(jī)編寫程序的過程中我們不斷的運(yùn)用已學(xué)知識(shí),掌握了求解各種實(shí)際問題的方法,并且體會(huì)了不同的方法的不同結(jié)果,從而在不同的場(chǎng)合,要用合適的計(jì)算方法來求解問題。我們求解的問題包括誤差分析,線性方程組的求解,微分方程的求解等問題。在選擇合適的計(jì)算方法的時(shí)候要考慮方法的收斂性,穩(wěn)定性,以及哪種方法計(jì)算速度快,最終結(jié)果誤差小。這門課與計(jì)算機(jī)密切結(jié)合并且實(shí)用性極強(qiáng),能夠?qū)⑺鶎W(xué)的知識(shí)在實(shí)踐中得到應(yīng)用,加強(qiáng)了我對(duì)專業(yè)學(xué)習(xí)的信心。 參考文獻(xiàn): 【1】孫志忠.計(jì)算方法典型例題分析.第二版.北京:科學(xué)出版社,2005 【2】孫志忠,袁慰平,計(jì)算方法與實(shí)習(xí).第二版.南京:東南大學(xué)出版社,2011 【3】譚浩強(qiáng).C程序設(shè)計(jì).第四版.北京:清華大學(xué)出版社,2010 ◆ 《數(shù)值計(jì)算方法》 合肥工業(yè)大學(xué)數(shù)學(xué)與信息科學(xué)系 編 合肥工業(yè)大學(xué)出版社 ◆ 《計(jì)算方法》 鄧建中等編,西安交大出版社,1985。 ◆ 《數(shù)值計(jì)算和C程序集》蔣長(zhǎng)錦編著,中國科學(xué)技術(shù)大學(xué)出版社,1998?!?《計(jì)算方法引論》徐萃薇編,高等教育出版社,1999。 ◆ 黃友謙,程詩杰,陳浙鵬,《數(shù)值試驗(yàn)》,北京:高等教育出版社,1989 ◆ 蔡大用,《數(shù)值分析與實(shí)驗(yàn)學(xué)習(xí)指導(dǎo)》,北京:清華大學(xué)出版社與施普林格出版社,2001 ◆ 肖筱南,《值計(jì)算方法與上機(jī)實(shí)習(xí)指導(dǎo)》,北京:北京大學(xué)出版社,2004 ◆ A.Quarteroni, R.Sacco, F.Saleri,《Numerical Mathematics》, New York:Springer-Verlag, 2000 數(shù)值分析上機(jī)實(shí)驗(yàn)報(bào)告 姓 名:班 級(jí):學(xué) 號(hào):院 系:機(jī)械工程學(xué)院指導(dǎo)教師:C語言) 2006級(jí) 2006050349 (for(j=0;j } void guss(float a[N][N],float b[N])/* 子函數(shù)高斯消去法*/ { int i,j; { } printf(“Household變換的結(jié)果:”);/*輸出Household變換的結(jié)果*/ for(i=0;i for(j=0;j } if(j%N==0)printf(“n”);s=0.0;for(i=j+1;i } for(i=0;i } for(k=0,i=0;i q[i]=y[i]-k*u[i];for(i=0;i } x[N-1]=y[N-1]/u[N-1];for(i=N-1;i>=0;i--)x[i]=(y[i]-a[i][i+1]*x[i+1])/u[i];printf(“消去法的結(jié)果:n”);/*輸出消去法的結(jié)果*/ for(i=0;i } printf(“n”);} void sor(float a[N][N],float b[N])/*子函數(shù)超松馳法*/ { float a1[N][N];int i,j,k,m;float x[N],temp[N][N];float w=1.4,h=0,g=0;for(m=0;m { for(j=1;j<=N;j++){ if(j<=i-1)h+=temp[i-1][j-1]*x[j-1];else if(j==i)h+=0;else h+=temp[i-1][j-1]*x[j-1]; q[i]=a[i][i-1]/u[i-1];u[i]=a[i][i]-q[i]*a[i-1][i];y[i]=b[i]-q[i]*y[i-1];if(i==5)printf(“n”);printf(“x%d=%9.6f ”,i,x[i]); } g=(h+b[i-1])*w;x[i-1]=(1-w)*x[i-1]+g;h=0.0;g=0.0;} } printf(“超松弛法的結(jié)果:n”);/*輸出超松弛法的結(jié)果*/ for(i=0;i 四、運(yùn)行結(jié)果 Household變換的結(jié)果: 12.3841-4.8931 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000-4.8931 25.3984 6.4941 0.0000-0.0000 0.0000-0.0000-0.0000-0.0000 0.0000 6.4941 20.6115 8.2439-0.0000-0.0000-0.0000 0.0000 0.0000 0.0000 0.0000 8.2439 23.4229-13.8801-0.0000 0.0000-0.0000 0.0000 0.0000-0.0000-0.0000-13.880129.6983 4.5345 0.0000 0.0000 0.0000 0.0000 0.0000-0.0000-0.0000 4.5345 16.0061 4.8814 0.0000-0.0000 0.0000-0.0000-0.0000 0.0000 0.0000 4.8814 26.0133-4.5036 0.0000 0.0000-0.0000 0.0000-0.0000 0.0000 0.0000-4.5036 21.2540 4.5045 0.0000-0.0000 0.0000 0.0000 0.0000-0.0000 0.0000 4.5045 14.5341 消去法的結(jié)果: x0= 1.075799 x1= 2.275744 x2=-2.855514 x3= 2.293097 x4= 2.112633 x5=-6.423833 x6= 1.357923 x7= 0.634245 x8=-0.587266 超松弛法的結(jié)果: x0= 1.073409 x1= 2.272580 x2=-2.856600 x3= 2.292511 x4= 2.112164 x5=-6.422582 x6= 1.357802 x7= 0.634259 x8=-0.587042 五、問題討論: 1.算法分析 SOR方法的矩陣形式為: X(m)=(E-ωL)-1((1-ω)E+ωR)x(m-1)+(E-ωL)-1ωg 若記 Lω=(E-ωL)-1((1-ω)E+ωR),SOR收斂的充要條件是S(Lω)<1.且若A為對(duì)稱正定陣,則當(dāng)松弛因子ω滿足0<ω<2時(shí),SOR方法收斂。此題中矩陣B是對(duì)稱正定陣,且是三對(duì)角的,所以選擇合適的松馳因子ω,收斂速度是很快的。2.上機(jī)出現(xiàn)情況 數(shù)組作為子函數(shù)參數(shù)時(shí),實(shí)現(xiàn)的是地址傳遞,會(huì)改變?cè)瓟?shù)組中元素的值,因此主函數(shù)調(diào)用housholder變換子函數(shù)后,原數(shù)組a[9][9]中的值已經(jīng)改變?yōu)槿龑?duì)角陣。以下的消去法、超松弛法子函數(shù)調(diào)用的是已經(jīng)三對(duì)角化后的a[9][9]的值。 調(diào)用時(shí)由于沒有定義housholder變換子函數(shù)中數(shù)組a[][]的大小,運(yùn)行時(shí)出現(xiàn)以下錯(cuò)誤提示: error C2087: ' Xn1?? , Zk? mkmax(Xn)sa[0]=a[0][0]-x;if(sa[0]==0)sa[1]=a[0][1]*a[0][1];else sa[1]=a[1][1]-x-a[0][1]*a[0][1]/sa[0];for(i=2;i } float duifen(float a[N][N])/*對(duì)分法求取方程的解的子函數(shù)*/ { float ss1=0,ss2=23,ss=0,h=0,g=0;float l,ll;h=f(a,ss2);while(1){ ss1=ss;g=f(a,ss);ss=0.5*(ss+23);l=0.5*(ss1+23);if(g-h==1)break;{ if(sa[i-1]*sa[i-2]!=0)sa[i]=a[i][i]-x-a[i-1][i]*a[i-1][i]/sa[i-1];else if(sa[i-2]==0)sa[i]=a[i][i]-x;if(sa[i-1]==0)sa[i]=-1;} { if(sa[i]>=0)hh+=1;else hh+=0;} for(i=0;i float fanmi(float a[N][N])/*反冪法求解方程的解的子函數(shù)*/ { float mk=0,t,t1;float z[N],yy[N],a3[N][N];int i,j,k,m,tt;float h=0;float l[N]={0,};t1=duifen(a);/*調(diào)用對(duì)分法求取方程的解*/ for(i=0;i for(m=0;m } printf(“反冪法的解的特征向量是:n”);{if(m==5)printf(“n”);printf(“%-10.6f”,z[m]);} /*輸出反冪法的解的特征向量*/ return 0;for(m=0;m printf(“n”);main(){ float a[N][N]={{12.3841,-4.8931},{-4.8931,25.3984,6.4941},{0,6.4941,20.6115,8.2439}, {0,0,8.2439,23.4229,-13.8801},{0,0,0,-13.8801,29.6983,4.5345},{0,0,0,0,4.5345,16.0061,4.8814}, {0,0,0,0,0,4.8814,26.0133,-4.5036},{0,0,0,0,0,0,-4.5036,21.2540,4.5045},{0,0,0,0,0,0,0,4.5045,14.5341}}; printf(“對(duì)分法的結(jié)果是:n”);printf(“d=%f”,duifen(a));/*調(diào)用對(duì)分法并輸出對(duì)分法近似解*/ fanmi(a);/*調(diào)用反冪法求解*/ } 四、運(yùn)行結(jié)果 對(duì)分法的結(jié)果是: d=21.916260 反冪法的結(jié)果是: d=21.928129 反冪法的解的特征向量是: 0.157066-0.306359 0.282201 0.285925 0.198640 0.533758 0.462842 1.000000 0.611843 五、問題討論 1.算法分析 1)對(duì)分法簡(jiǎn)單可靠,數(shù)值穩(wěn)定性較高,對(duì)于求少量幾個(gè)特征值特別適宜.但收斂速度較慢.2)反冪法是結(jié)合對(duì)分法使用的,近似值較恰當(dāng),其收斂速度是很快.只要迭代兩次就可得到較滿意的結(jié)果.但在運(yùn)用中需把一般矩陣化為Hessebberg陣才可計(jì)算.2.上機(jī)出現(xiàn)情況 當(dāng)把對(duì)分法及反冪法全部寫在主函數(shù)中,實(shí)現(xiàn)題目全部要求時(shí),主函數(shù)過于冗長(zhǎng),不利于糾錯(cuò),也不利于實(shí)現(xiàn)共享,通過修改對(duì)分法及反冪法為子函數(shù)調(diào)用,以便于調(diào)試,亦有利于共享。 for(j=0;j } b[0]=2*h*b[0];a[i][i-1]=1;a[i][i]=4;a[i][i+1]=1;b[N-1]=2*h*b[N-1];for(i=1;i u[0]=a[0][0];/*消去法求c[i]*/ y[0]=b[0];for(i=1;i } c[N-1]=y[N-1]/u[N-1];for(i=N-2;i>=0;i--) for(i=0;i } s=0.0;for(i=0;i b[N-1]=b[N-1]+b[N-2];q[i]=a[i][i-1]/u[i-1];u[i]=a[i][i]-q[i]*a[i-1][i];y[i]=b[i]-q[i]*y[i-1];c[i]=(y[i]-a[i][i+1]*c[i+1])/u[i];e=fabs(*x-i);if(e>=2) w[i]=0;w[i]=0.5*fabs(e*e*e)-e*e+2.0/3.0;w[i]=(-1.0/6.0)*fabs(e*e*e)+e*e-2*fabs(e)+4.0/3.0;else if(e<=1)else } *x=s;*x1=(c[(int)(m+1)]-c[(int)(m-1)])/2.0;void main(){ } 四、運(yùn)行結(jié)果 三次樣條插值求得的結(jié)果是: f(4.563)=1.517932 f'(4.563)=0.249350 五、問題討論: 樣條插值效果比Lagrange插值好,由于樣條插值不必經(jīng)過所有點(diǎn),所以沒有Runge現(xiàn)象.而且插值函數(shù)比較光滑。 其基本思想是對(duì)均勻分劃的插值函數(shù)的構(gòu)造,三次樣條函數(shù)空間中不取1,x,x,x,(x-xj)+為基函數(shù),而取B樣條函數(shù)Ω3(x-xj/h)為基函數(shù).由于三次樣條函數(shù)空間是N+3維的,故我們把分點(diǎn)擴(kuò)大到N?1X-1,XN+1,則任意三次樣條函數(shù)可用Ω3(x-xj/h)線性組合來表示 S(x)= 不同插值問題,若能確定cj由解的唯一性就能求得解S(x).2 33float b[N]={1,0,0.69314718,1.0986123,1.3862944,1.6094378,1.7917595, 1.9459101,2.079445,2.1972246,2.3025851,0.1};float x,x1;float h;h=1;x=4.563;scyt(&x,&x1,b,h);/*調(diào)用三次樣條插值子函數(shù)*/ printf(“f(4.563)=%.6fn”,x);printf(“f'(4.563)=%.6fn”,x1);printf(“三次樣條插值求得的結(jié)果是:n”); ?cjΩ3(x-xj/h)這樣對(duì) j??1 7 4float z;z=pow(x,7)-28*pow(x,4)+14;return(z);float z;z=7*pow(x,6)-112*pow(x,3);return(z);x=fabs(f1(a))>fabs(f1(b))?a:b;/*初始值的選擇*/ } main(){ float a,b; /*變量定義及賦初值*/ float min;float result;a=0.1;b=1.9;min=1e-5;result=ndf(a,b,min);/*調(diào)用牛頓法子函數(shù)*/ printf(“用牛頓法求方程在取初值為(0.1,1.9)區(qū)間端點(diǎn)時(shí)的近似根為:n”);printf(“x=%.6fn”,result);} 四、運(yùn)行結(jié)果 用牛頓法求方程在取初值為(0.1,1.9)區(qū)間端點(diǎn)時(shí)的近似根為: x=0.845497 五、問題討論 1.Newton法收斂速度比較快,是平方收斂,但它是局部收斂。2.采用newton法求方程平方收斂,較為精確。但需求函數(shù)導(dǎo)數(shù)。 3.初始值取為區(qū)間端點(diǎn)xo時(shí),取使f(xo)f′′(xo)>0的一個(gè),本例中取為xo=1.9。 (k) (0) (0) 3x1.42float z;z=pow(3,y)*pow(y,1.4)*(5*y+7)*sin(y*y);return(z);s=0;for(i=1;i<=(pow(2,j-1));i++)s+=(b-a)*(*f)(a+(2*i-1)*(b-a)/pow(2,j))/pow(2,j-1);t[1][j]=(t[1][j-1]+s)/2; } { } z=t[i+1][0];return(z);for(j=1;j<=N-i+1;j++)t[i+1][j-1]=(pow(4,i)*t[i][j]-t[i][j-1])/(pow(4,i)-1);break;if(fabs(t[i][0]-t[i+1][0])<=min)main(){ } 四、運(yùn)行結(jié)果 用Romberg算法求積分的結(jié)果(允許誤差為0.00001): I=440.536011 五、問題討論: 1.算法分析 1)Romberge算法的優(yōu)點(diǎn)是: 把積分化為代數(shù)運(yùn)算,而實(shí)際上只需求T1,以后用遞推可得.算法簡(jiǎn)單且收斂速度快,一般4或5次即能達(dá)到要求.2)Romberge算法的缺點(diǎn)是: 對(duì)函數(shù)的光滑性要求較高,計(jì)算新分點(diǎn)的值時(shí),這些數(shù)值的個(gè)數(shù)成倍增加。 2.上機(jī)出現(xiàn)問題 本程序一開始編寫時(shí),是利用函數(shù)的遞歸調(diào)用來實(shí)現(xiàn),編譯正常通過,但運(yùn)行時(shí)出現(xiàn)異常,經(jīng)分析可能是多次遞歸產(chǎn)生誤差,改用數(shù)組代替遞歸來存放Tij的值時(shí),運(yùn)行正常。 (i)float a,b;/*變量定義及初始化*/ float min;float result;float(*p)(float);a=1;b=3;min=1e-5;p=f;result=lbg(a,b,min,p);/*調(diào)用龍貝格法求積分子函數(shù)*/ printf(“用Romberg算法求積分的結(jié)果(允許誤差為0.00001):n”);printf(“I=%.6fn”,result); } } for(i=0;i<4;i++){ } fkt(work1,work2);*t=ttemp+temp[i];for(j=0;j } } 四、運(yùn)行結(jié)果 定步長(zhǎng)四階Runge-Kutta法求微分方程組解的結(jié)果: T Y1 Y2 Y3 0.025000| 0.025000| 0.151579| 8.346120 0.045000| 0.045000| 0.312984| 7.538067 0.085000| 0.085000| 0.560777| 4.944312 0.100000| 0.100001| 0.629078| 4.178828 五、問題討論: 1.算法分析 1)Runge_Kutta方法的優(yōu)點(diǎn): 精度高,不必用別的方法求開始幾點(diǎn)的函數(shù)值。 可根據(jù)f'(t,y)變化的情況與需要的精度自動(dòng)修改步長(zhǎng)。程序簡(jiǎn)單,存儲(chǔ)量少。方法穩(wěn)定。 rgkt(n,&t,step,&y,work1,work2,work3);/*調(diào)用Runge-Kutta算法求解*/ if(i==49||i==89||i==169||i==199)printf(“%9.6f|%9.6f|%9.6f|%9.6fn”,t,y[0],y[1],y[2]);2)Runge_Kutta方法的缺點(diǎn): 每步要計(jì)算函數(shù)值f(t,y)四次,在f(t,y)較復(fù)雜時(shí),工作量大, 且每一步缺乏可靠的檢查。 2.上機(jī)出現(xiàn)情況 當(dāng)用主函數(shù)實(shí)現(xiàn)題目全部要求時(shí),主函數(shù)過于冗長(zhǎng),不利于修改和糾錯(cuò),也不利于實(shí)現(xiàn)共享,通過修改Runge_Kutta法及函數(shù)表達(dá)式為子函數(shù)調(diào)用,并把一些條件語句放進(jìn)子函數(shù)中,主函數(shù)只控制初始值及結(jié)果精度要求,經(jīng)如此修改后便于閱讀和調(diào)試。第五篇:《數(shù)值分析》上機(jī)實(shí)習(xí)報(bào)告