




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、1:第二章(1)二分法求解非線性方程: #include#include #define f(x) (x*x-1)*x-1)void main() float a,b,x,eps;int k=0;printf(intput epsn);/* 容許誤差 */scanf(%f,&eps);printf(a,b=n);for(;)scanf(%f, %f,&a ,&b);if(f(a)*f(b)=0) /* 判斷是否符合二分法使用的條件 */printf( 二分法不可使用 ,請重新輸入 :n);else break;do x=(a+b)/2;k+;if(f(a)*f(x)0) /* 如果 f(a)*
2、f(x)0) /* 否則根在區(qū)間的右半部分 */a=x;else break;while(fabs(b-a)eps);/* 判斷是否達到精度要求 ,若沒有達到 ,繼續(xù)循環(huán) */ x=(a+b)/2; /* 取最后的小區(qū)間中點作為根的近似值 */ printf(n The root is x=%f, k=%dn,x,k);運行結(jié)果:intput eps0.00001a,b=2,-5The root is x=1.324721, k=20Press any key to continue 總結(jié):本題關(guān)鍵在于兩個端點的取值和誤差的判斷,此程序較容易。二分法收斂速度較快, 但缺點是只能求解單根。(2)
3、牛頓法求解非線性方程:#include #include float f(float x) /* 定義函數(shù) f(x) */ return(-3*x+4)*x-5)*x+6; float f1(float x) /* 定義函數(shù) f(x) 的導數(shù) */ return (-9*x+8)*x-5; void main() float eps,x0,x1=1.0;printf(input eps:n);scanf(%f,&eps); /* 輸入容許誤差 */do x0=x1; /* 準備下一次迭代的初值 */x1=x0-f(x0)/f1(x0); /* 牛頓迭代 */while(fabs(x1-x0)e
4、ps); /* 當滿足精度 ,輸出近似根 */ printf(x=%fn,x1);程序運行結(jié)果:x=1.265328總結(jié):關(guān)鍵是牛頓迭代的應(yīng)用, 程序中最大缺點是函數(shù)及其導數(shù)已唯一給出確定不可求的隨 意函數(shù)的根,牛頓法比二分法收斂快,可以求重根。2:第三章(1)列主元素消去法求解線性方程: #include#include#define N 20using namespace std;void load();float aNN;int m;int main()int i,j;int c,k,n,p,r;float xN,lNN,s,d;coutm;coutendl;cout 請按順序輸入增廣矩
5、陣 a:endl;load();for(i=0;im;i+)for(j=i;jfabs(aii)?j:i;/* 找列最大元素 */for(n=0;nm+1;n+)s=ain; ain=acn; acn=s;/* 將列最大數(shù)防在對角線上 */for(p=0;pm+1;p+)coutaipt;coutendl;for(k=i+1;km;k+)lki=aki/aii;for(r=i;r=0;i-)d=0;for(j=i+1;jm;j+)d=d+aij*xj; xi=(aim-d)/aii;cout 該方程組的解為 :endl; for(i=0;im;i+) coutxi=xit; /system(p
6、ause); return 0;void load()int i,j;for(i=0;im;i+)for(j=0;jaij;運行結(jié)果:/* 化成三角陣 */*求解 */1 2 3 45 1 0 84 6 9 246920-6.5-11.255.50-1.86265e-008-0.115385該方程組的解為請按順序輸入增廣矩陣 a:3.92308下面請輸入未知數(shù)的個數(shù) m=3 x0=-9.99999 x1=58 x2=-34 Press any key to continue 總結(jié):列主元素消去法的目的是為了防止減去一個較小的數(shù)時大數(shù)淹沒小數(shù), 而使結(jié)果產(chǎn)生 較大誤差, 本程序關(guān)鍵在每次消元時找
7、到相應(yīng)列中的最大項, 然后交換兩行位置, 在進行計 算。(2)LU 分解法求解線性方程:#includevoid solve(float l100,float u100,float b,float x,int n)int i,j;float t,s1,s2;float y100; for(i=1;i=n;i+) /* 第一次回代過程開始 */s1=0;for(j=1;j=1;i-) /* 第二次回代過程開始 */ s2=0;for(j=n;ji;j-)t=-uij; s2=s2+t*xj; xi=(yi+s2)/uii;void main()float a100100,l100100,u100
8、100,x100,b100;int i,j,n,r,k;float s1,s2;1*/for(i=1;i=99;i+)/* 將所有的數(shù)組置零,同時將 L 矩陣的對角值設(shè)為 for(j=1;j=99;j+)lij=0,uij=0;if(j=i) lij=1;printf (input n:n);/* 輸入方程組的個數(shù) */ scanf(%d,&n);printf (input array A:n);/* 讀取原矩陣 A*/ for(i=1;i=n;i+)for(j=1;j=n;j+) scanf(%f,&aij);printf (input array B:n);/* 讀取列矩陣 B*/for(
9、i=1;i=n;i+)scanf(%f,&bi);for(r=1;r=n;r+)/* 求解矩陣 L for(i=r;i=n;i+)s1=0;for(k=1;k=r-1;k+)s1=s1+lrk*uki;uri=ari-s1; for(i=r+1;i=n;i+)s2=0;for(k=1;k=r-1;k+)s2=s2+lik*ukr;lir=(air-s2)/urr;printf(array L:n);/* 輸出矩陣for(i=1;i=n;i+)for(j=1;j=n;j+)printf(%7.3f ,lij);printf(n);printf(array U:n);/* 輸出矩陣for(i=1;
10、i=n;i+)for(j=1;j=n;j+)printf(%7.3f ,uij);printf(n);solve(l,u,b,x,n);printf( 解為 :n); for(i=1;i=n;i+) printf(x%d=%fn,i,xi);運行結(jié)果:input n:3input array A:2 2 34 7 7-2 4 5和 U*/L*/U*/input array B:3 1 -7array L:1.0000.0000.0002.0001.0000.000-1.0002.0001.000array U:2.0002.0003.0000.0003.0001.0000.0000.0006.
11、000解為 :x1=2.000000 x2=-2.000000x3=1.000000Press any key to continue總結(jié):關(guān)鍵是把矩陣分解為 L、 U 兩個三角矩陣,回代過程比較簡單。3:第四章(1) 拉格朗日差值多項式 ; #include#include#define MAX 100void main() int i,j,k,m,n,N,mi;float tmp,mx;float XMAXMAX,YMAX,xMAX,yMAX,aMAX;printf(n 輸入擬合多項式的次數(shù) :n); scanf(%d,&m);printf(n 輸入給定點的個數(shù) n 及坐標 (x,y):n
12、); scanf(%d,&N);printf(n); for(i=0;iN;i+)scanf(%f,%f,&xi,&yi); for(i=0;i=m;i+)for(j=i;j=m;j+)tmp=0; for(k=0;kN;k+) tmp=tmp+pow(xk,(i+j);Xij=tmp;Xji=Xij;for(i=0;i=m;i+)tmp=0;for(k=0;kN;k+)tmp=tmp+yk*pow(xk,i);Yi=tmp;for(j=0;jm;j+)for(i=j+1,mi=j,mx=fabs(Xjj);imx)mi=i;mx=fabs(Xij);if(jmi)tmp=Yj;Yj=Ymi;
13、Ymi=tmp;for(k=j;k=m;k+)tmp=Xjk;Xjk=Xmik;Xmik=tmp;for(i=j+1;i=m;i+)tmp=-Xij/Xjj;Yi+=Yj*tmp;for(k=j;k=0;i-)ai=Yi;for(j=i+1;j=m;j+)ai-=Xij*aj;ai/=Xii;printf(n 所求的二次多項式為 :n);printf(P(x)=%f,a0); for(i=1;i=m;i+) printf(+(%f)*x%d,ai,i);運行結(jié)果:輸入擬合多項式的次數(shù) :5輸入給定點的個數(shù) n 及坐標 (x,y):31,25,34,2所求的二次多項式為 :P(x)=1.9804
14、17+(0.282759)*x1+(-0.299937)*x2+(0.022071)*x3+(0.016624)*x4+(-0.0 01934)*x5Press any key to continue 總結(jié):拉格朗日計算公式中,只需要知道各個點即可4:第五章(1)曲線擬合:#include#include#define MAX 100void main() int i,j,k,m,n,N,mi;float tmp,mx;float XMAXMAX,YMAX,xMAX,yMAX,aMAX;printf(n 輸入擬合多項式的次數(shù) :n);scanf(%d,&m);printf(n 輸入給定點的個數(shù)
15、 n 及坐標 (x,y):n);scanf(%d,&N);printf(n);for(i=0;iN;i+)scanf(%f,%f,&xi,&yi);for(i=0;i=m;i+) for(j=i;j=m;j+)tmp=0; for(k=0;kN;k+) tmp=tmp+pow(xk,(i+j); Xij=tmp;Xji=Xij;for(i=0;i=m;i+)tmp=0;for(k=0;kN;k+)tmp=tmp+yk*pow(xk,i);Yi=tmp;for(j=0;jm;j+)for(i=j+1,mi=j,mx=fabs(Xjj);imx)mi=i;mx=fabs(Xij);if(jmi)t
16、mp=Yj;Yj=Ymi;Ymi=tmp;for(k=j;k=m;k+)tmp=Xjk;Xjk=Xmik;Xmik=tmp;for(i=j+1;i=m;i+)tmp=-Xij/Xjj;Yi+=Yj*tmp;for(k=j;k=0;i-)ai=Yi;for(j=i+1;j=m;j+)ai-=Xij*aj;ai/=Xii;printf(n 所求的二次多項式為 :n); printf(P(x)=%f,a0);for(i=1;i=m;i+) printf(+(%f)*x%d,ai,i);輸入擬合多項式的次數(shù) :2輸入給定點的個數(shù) n 及坐標 (x,y):51,25,32,48,3-1,5所求的二次多項
17、式為 :P(x)=3.952280+(-0.506315)*x1+(0.050877)*x2Press any key to continue5:第六章(1)辛普生求積方法:#include #define N 16/* 等分數(shù) */float func(float x) float y;y=4.0/(1+x*x);return(y);void gedianzhi(float y,float a,float h) int i;for(i=0;i=N;i+) yi=func(a+i*h);float simpson(float y,float h) float s,s1,s2;int i;s1=
18、y1;s2=0.0;for(i=2;i=N-2;i=i+2) s1+=yi+1; /* 計算奇數(shù)項的函數(shù)值之和 */s2+=yi; /* 計算偶數(shù)項的函數(shù)值之和 */ s=y0+yN+4.0*s1+2.0*s2;return(s*h/3.0);main() float a,b,h,s,fN+1; scanf(%f,%f,&a,&b);h=(b-a)/( float)N;gedianzhi(f,a,h);s=simpson(f,h);printf(s=%fn,s);運行結(jié)果:1,3 s=1.854590Press any key to continue總結(jié):辛普生算法是一種積分方法,采用三點法插
19、值,如果 h 較小的話,誤差很小,因為它 b a h 4的插值余項 R( f ) b a h f (4)( ) ,辛普生算法比較精確,程序關(guān)鍵是對所取的點 180 2的取和,注意6:第七章(1)改進歐拉法求解常微分方程的初值問題#include float func(float x,float y) return(y-x);float euler(float x0,float xn,float y0,int N) float x,y,yp,yc,h;int i;x=x0;y=y0;h=(xn-x0)/(float)N;for(i=1;i=N;i+) yp=y+h*func(x,y);x=x0+
20、i*h; yc=y+h*func(x,yp);y=(yp+yc)/2.0;return(y);main() float x0,xn,y0,e;int n;printf(ninput n:n);scanf(%d,&n);printf(input x0,xn:n );scanf(%f,%f,&x0,&xn);printf(input y0:n ); scanf(%f,&y0);e=euler(x0,xn,y0,n); printf(y(%f)=%6.4f,y0,e);input n:20 input x0,xn:1,6 input y0:2 y(2.000000)=7.0000Press any
21、key to continue (2)四階龍格 庫塔法 #include float func(float x,float y) return(x-y);float runge_kutta(float x0,float xn,float y0,int N) float x,y,y1,y2,h,xh;float d1,d2,d3,d4;int i;x=x0;y=y0;h=(xn-x0)/(float)N;for(i=1;i=N;i+) xh=x+h/2;d1=func(x,y);d2=func(xh,y+h*d1/2.0);d3=func(xh,y+h*d2/2.0); d4=func(xh,y+h*d3);y=y+h*(d1+2*d2+2*d3+d4)/6.0;x=x0+i*h; return(y);main() float x0,xn
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 繼承房產(chǎn)瑕疵修復與質(zhì)量監(jiān)督服務(wù)合同
- 陜北高原草原牧場放牧權(quán)委托管理及農(nóng)業(yè)科技推廣合同
- 基于人工智能的建筑工程合同智能審查與爭議解決協(xié)議
- 網(wǎng)店轉(zhuǎn)讓手續(xù)及后期維護服務(wù)協(xié)議
- 版權(quán)貿(mào)易合作開展版權(quán)推廣活動協(xié)議
- 互聯(lián)網(wǎng)商品推廣與品牌推廣策略服務(wù)協(xié)議
- 2025至2031年中國鑄造型錫焊棒市場現(xiàn)狀分析及前景預測報告
- 2025至2031年中國PU雙色鞋墊市場現(xiàn)狀分析及前景預測報告
- 2025至2030年中國騎馬訂筆記本市場分析及競爭策略研究報告
- 2025至2030年中國白粘土行業(yè)投資前景及策略咨詢報告
- 手術(shù)部位標識國家標準(2023版)
- 2025年重慶江北國際機場有限公司招聘筆試參考題庫含答案解析
- 2025年中國煤炭貿(mào)易市場全景評估及發(fā)展趨勢研究預測報告
- 電視節(jié)目策劃知到智慧樹章節(jié)測試課后答案2024年秋浙江傳媒學院
- 中醫(yī)特色治療及護理
- 新質(zhì)生產(chǎn)力與高質(zhì)量發(fā)展
- 航天任務(wù)工程款支付承諾書
- 《系統(tǒng)工程》復習題及答案
- 華東師范大學《算法設(shè)計與分析》2023-2024學年第一學期期末試卷
- 口袋廣場景觀規(guī)劃
- 2017年江蘇南京中考滿分作文《無情歲月有味詩》3
評論
0/150
提交評論