數(shù)值分析_迭代法_第1頁
數(shù)值分析_迭代法_第2頁
數(shù)值分析_迭代法_第3頁
數(shù)值分析_迭代法_第4頁
數(shù)值分析_迭代法_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、 .華 北 科 技 學(xué) 院上 機(jī) 報(bào) 告系(部) 專業(yè)、班級(jí) 姓名 學(xué)號(hào) 課程名稱 數(shù)值分析 上機(jī)題目 實(shí)驗(yàn)六,實(shí)驗(yàn)七 任課教師 指導(dǎo)教師 成績(jī)(優(yōu)、良、中、及格、不及格) 華 北 科 技 學(xué) 院 基 礎(chǔ) 部實(shí)驗(yàn)六 解線性方程組的迭代法1.目的與要求:1) 熟悉求解線性方程組的有關(guān)理論哈方法。2) 會(huì)編制雅可比迭代和高斯塞得爾迭代法。3) 通過實(shí)際計(jì)算,進(jìn)一步了解各算法的優(yōu)缺點(diǎn),選擇合適的數(shù)值方法。2雅可比迭代法算法設(shè)方程組AX=b的系數(shù)矩陣的對(duì)角元素M為迭代次數(shù)容許的最大值,為容許誤差. 取初始向量令k=0; 對(duì)計(jì)算 如果則輸出,結(jié)束;否則執(zhí)行, 如果則不收斂,終止程序;否則轉(zhuǎn).1.分別用雅

2、可比迭代法與高斯-塞德爾迭代法解下列方程組:1.用雅可比迭代法計(jì)算:#include "stdafx.h" #include "iostream.h"#include"stdio.h"#include"math.h"#include"conio.h"#include"malloc.h"#include <stdlib.h>#define EPS 1e-8#define MAX 100float *Jacobi(float a910,int n) float *x,

3、*y,s;double epsilon;int i,j,k=1;x=(float *)malloc(n*sizeof(float);y=(float *)malloc(n*sizeof(float); for(i=0;i<n;i+) xi=0;while(1) k+;epsilon=0; for(i=0;i<n;i+)s=0;for(j=0;j<n;j+)if(j=i) continue;s=s+aij*xj;yi=(ain-s)/aii;epsilon=epsilon+fabs(yi-xi); /if (epsilon>EPS);if(k>=MAX) retur

4、n y; for(i=0;i<n;i+) xi=yi;void main() int i;float a910=31,-13,0,0,0,-10,0,0,0,-15,-13,35,-9,0,-11,0,0,0,0,27,0,-9,31,-10,0,0,0,0,0,-23,0,0,-10,79,-30,0,0,0,-9,0,0,0,0,-30,57,-7,0,-5,0,-20,0,0,0,0,7,47,-30,0,0,12,0,0,0,0,0,-30,41,0,0,-7,0,0,0,0,-5,0,0,27,-2,7,0,0,0,0,0,0,0,-2,29,-10; float *x; x=

5、(float *)malloc(9*sizeof(float);printf("結(jié)果為:n");x=Jacobi(a,9); for(i=0;i<9;i+) printf("x%d=%fn",i,xi);程序運(yùn)行結(jié)果如下:結(jié)果為:x0=-0.200550x1=0.368393x2=-0.731859x3=-0.300318x4=-0.446577x5=0.399384x6=0.121501x7=0.151792x8=-0.334359Press any key to continue2.用高斯-塞德爾迭代法:#include "stdaf

6、x.h"#include"stdio.h"#include"math.h"#include"conio.h"#include "iostream"#include"malloc.h"#define N 100void main()int i;float *x;float c90=31,-13,0,0,0,-10,0,0,0,-15,-13,35,-9,0,-11,0,0,0,0,27,0,-9,31,-10,0,0,0,0,0,-23,0,0,-10,79,-30,0,0,0,-9,0

7、,0,0,0,-30,57,-7,0,-5,0,-20,0,0,0,0,7,47,-30,0,0,12,0,0,0,0,0,-30,41,0,0,-7,0,0,0,0,-5,0,0,27,-2,7,0,0,0,0,0,0,0,-2,29,-10;float *GauseSeide(float *,int);x=GauseSeide(c,9);for(i=0;i<9;i+) printf("x%d=%fn",i,xi);float *GauseSeide(float *a,int n)int i,j,nu=0;float *x,dx,d,wucha;x=(float *

8、)malloc(n*sizeof(float);for(i=0;i<=n-1;i+) xi=0.0;while(fabs(wucha)>1e-8)for(i=0;i<=n-1;i+)d=0.0;for(j=0;j<=n-1;j+)d+=*(a+i*(n+1)+j)*xj;d=d-*(a+i*(n+1)+i)*xi;dx=(*(a+i*(n+1)+n)-d)/(*(a+i*(n+1)+i);wc=xi-dx;xi=dx;if(nu>=N)printf("迭代發(fā)散n");exit(1);nu+;return x;程序運(yùn)行結(jié)果如下:x0=-0.200

9、551x1=0.368393x2=-0.731860x3=-0.300318x4=-0.446577x5=0.399384x6=0.121500x7=0.151792x8=-0.334359Press any key to continue實(shí)驗(yàn)七 方程求根1.目的與要求:1) 通過對(duì)二分法與牛頓迭代法作編程練習(xí)與上機(jī)運(yùn)算,進(jìn)一步體會(huì)二分法與牛頓迭代法的不同特點(diǎn);2) 編寫割線迭代法的程序,求非線性方程的解,并與牛頓迭代法作比較。2.二分法算法給定區(qū)間a,b,并設(shè)f(a)與f(b)符號(hào)相反,取為根的容許誤差,為|f(x)|的容許誤差。 令c=(a+b)/2 如果(c-a)<或|f(c)|&

10、lt;,則輸出c,結(jié)束;否則執(zhí)行, 如果f(a)f(c)>0,則令a:=c;否則b:=c,重復(fù),。3.牛頓迭代法算法給定初始值為根的容許誤差,為|f(x)|的容許誤差,N為迭代次數(shù)的容許值。如果或迭代次數(shù)大于N,則算法失敗,結(jié)束;否則執(zhí)行,計(jì)算,若或,則輸出,程序結(jié)束;否則執(zhí)行, ,轉(zhuǎn)向(1).實(shí)驗(yàn)內(nèi)容:1.用牛頓法求方程在附近的解.#include "stdafx.h"#include <iostream>#include <stdio.h>#include <math.h>#define N 100#define EPS 1e-

11、6#define ETA 1e-8void main()float f(float);float f1(float);float x0,y0;float Newton(float (*)(float),float (*)(float),float);printf("Please input x0n");scanf("%f",&x0);printf("x(0)=%fn",x0);y0=Newton(f,f1,x0);printf("nThe root of the equation is x=%fn",y0)

12、;float Newton(float (*f)(float),float (*f1)(float),float x0)float x1,d;int k=0;dox1=x0-f(x0)/f1(x0);if(k+>N)|(fabs(f1(x1)<EPS)printf("nNewton method failed");exit(0);d=(fabs(x1)<1?x1-x0:(x1-x0)/x1);x0=x1;printf("x(%d)=%ft",k,x0);while(fabs(d)>EPS&&fabs(f(x1)&g

13、t;ETA);return x1;float f(float x)return x*exp(x)-1;float f1(float x)return exp(x)+x*exp(x);程序運(yùn)行結(jié)果如下:Please input x01x(0)=1.000000x(1)=0.683940 x(2)=0.577454 x(3)=0.567230 x(4)=0.567143 x(5)=0.567143The root of the equation is x=0.567143Press any key to continue2.編寫一個(gè)割線法的程序,求解上題。#include "stdafx

14、.h"#include <iostream>#include <stdio.h>#include <math.h>#define N 100#define EPS 1e-6#define ETA 1e-8void main()float f(float);float f1(float);float x0,x1,y0;float xianjie(float (*)(float),float (*)(float),float,float);printf("請(qǐng)輸入兩個(gè)初始值x0,x1(逗號(hào)隔開)n");scanf("%f,%

15、f",&x0,&x1);printf("x(0)=%f ,x(1)=%f n",x0,x1);y0=xianjie(f,f1,x0,x1);printf("n方程的根為x=%f n",y0);float xianjie(float (*f)(float),float (*f1)(float),float x0,float x1)float x2,d;int k=0;dox2=x1-(x1-x0)*f(x1)/(f(x1)-f(x0);if(k+>N)|(fabs(f1(x2)<EPS)printf("n弦截法錯(cuò)誤。");exit(0);d=(fabs(x2)<1?x2-x1:(x2-x1)/x2);x0=x1;x1=x2;printf("x(%d)=%f,x(%d)=%fn",k,x0,k+1,x1);while(fabs(d)>EPS&&fabs(f(x2)>ETA);return x2;float f(float x)return x*exp(x)-1;float f1(float x)return exp(x)+x

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論