數值分析實驗報告

2021-03-14 14:39:47 字數 5507 閱讀 4481

石家莊經濟學院

2015/2016學年第1學期

班級學號姓名指導教師

(一)實驗題目:二分法求非線性方程根

1、程式功能

程式設計實現二分法求解非線性方程組的根。

二、實驗算例選擇

計算:的根。

三、演算法

步驟1 :事前執行次數估計

步驟2:計算a,b的中點,判斷是否跳出

步驟3: a=m 或 b=m

四、重要識別符號說明

a,b表示區間[a,b]

f表示原函式

五、程式執行例項

六、源程式

f=inline('x^3-x-1');

a=1.0;

b=1.5;

c=(b-a)/2;

k=0;

err=1e-5

y0=f(a);

while c>eps

a0=a;b0=b;

x1=(a0+b0)/2;

if f(x1)==0

x1elseif f(x1)>0

a1=a0;b1=x1;

else

a1=x1;b1=b0;

endc=(b1-a1)/2;

k=k+1;

a=a1;b=b1;

endx=(a+b)/2

(一)實驗題目:牛頓法求非線性方程根

一、程式功能

程式設計實現牛頓法求解非線性方程組的根。

二、實驗算例選擇

計算:的根。

三、演算法

步驟1 :求出迭代公式,原函式function1,導數function2。

步驟2 :迭代。

步驟3 :判斷x(k+1)-x(k)與e的大小,決定是否終止。

四、重要識別符號說明

k代表迭代次數,

x代表迭代初值

五、程式執行例項

六、源程式

clear all

error=1e-5;

x=1;

for k=1:10

xk=x;

x=x-(x^3-x-1)/(3*x^2-1);

if(abs(xk-x)<=error)

break;

endend七、個人實驗總結

初步了解了matlab的用法。分別用二分法和牛頓法解非線性方程可清晰看出牛頓法求解要比二分簡單的多且效率高。

(二)實驗題目:高斯列主元素消去法解方程組

1、程式功能

程式設計實現高斯列主元素消去法解方程組。

二、實驗算例選擇

x1+2x2+x3=2

-2x1-2x2-x3=-3

2x1-3x2-2x3=-1

三、演算法

步驟1: 選主元及從增廣矩陣第一列中選擇絕對值最大的數所在的行與第一行互換,並將新矩陣第二第三行的第一列數化0;

步驟2: 從新矩陣的第2,3行第二列中選擇絕對值最大的數換到第二行,第三行二列的數化0;

步驟3: 回代,分別求出x3,x2,x1

四、重要識別符號說明

a,b代表方程的係數矩陣

n b的長度

abs 求絕對值

a(k:n,k) 取矩陣a中第k列n行符合條件的數

disp 輸出

五、程式執行例項

六、源程式

a=[1 2 1; -2 -2 -1; 2 -3 -2];

b=[ 2 -3 -1];

disp('原方程為ax=b:') ab

disp

n=length(b);

for k=1:n-1

[main,index]=max(abs(a(k:n,k)));

index=index+k-1;

if abs(main) disp('列元素太小!!');

break;

elseif index>k

temp=a(k,:);

a(k,:)=a(index,:);

a(index,:)=temp;

endfor i=k+1:n

m(i,k)=a(i,k)/a(k,k);

a(i,k:n)=a(i,k:n)-m(i,k)*a(k,k:n);

b(i)=b(i)-m(i,k)*b(k);

endend

disp('消元後所得到的三角陣是')

ab(n)=b(n)/a(n,n);

for i=n-1:-1:1

b(i)=(b(i)-sum(a(i,i+1:n).*b(i+1:n)))/a(i,i);

endclear x;

x=b;

disp('ax=b的解x是')

x(二)實驗題目:道立特三角分解法解方程組

1、程式功能

程式設計實現三角分解法解方程組。

二、實驗算例選擇

x1+2x2+x3=2

2x1-2x2-x3=-3

2x1-3x2-2x3=-1

三、演算法

步驟1 : 計算l下三角矩陣;

步驟2: 計算u;

步驟3: ly=b,ux=y求出x,y。

四、重要識別符號說明

ra代表a的秩

rb代表b的秩

五、程式執行例項

六、源程式

a=[1 2 1;-2 -2 -1;2 -3 -2];

b=[2 ;-3 ;-1];

b=[a b];

n=length(b);

ra=rank(a);

rb=rank(b);

zhica=rb-ra;

if zhica>0

disp('請注意:因為ra~=rb,所以此方程組無解.')

return;

endif ra==rb

if ra==n

disp('請注意:因為ra=rb=n,所以此方程組有唯一解.')

x=zeros(n,1);

for p= 1:n-1

for k=p+1:n

m= b(k,p)/ b(p,p

b(k,p:n+1)= b(k,p:n+1)-m* b(p,p:n+1);

end end

b=b(1:n,n+1);

a=b(1:n,1:n);

x(n)=b(n)/a(n,n);

for q=n-1:-1:1

x(q)=(b(q)-sum(a(q,q+1:n)*x(q+1:n)))/a(q,q);

enddisp('ax=b的解x是')

xelse

disp('請注意:因為ra=rb end

end七、個人實驗總結

高斯列主元消元法就是在高斯消元法的基礎上選取每列最大值最為對角線上的元素,以減小誤差;而三角分解法需求出上三角和下三角然後解出x,y並不用選主元。但前者數值較為穩定。

(三)實驗題目:雅可比解方程組

1、程式功能

程式設計實現雅可比法解方程組

二、實驗算例選擇

a=[-4,1,1,1;1,-4,1,1,1;1,1,-4,1;1,1,1,-4]

b=[1;1;1;1]

;三、演算法

步驟1:求出矩陣的範數,判斷迭代公式是否收斂。

步驟2: 代入雅克比的矩陣迭代公式x0迭代,得到解

四、重要識別符號說明

a為方程組的係數矩陣

b為方程組的常數向量

x0為迭代初值

eps為誤差限

t為最大迭代次數,超過則認為無解。

五、程式執行例項

六、源程式

function jacobi

clc;

clear;

a=[4 -1 0 -1 0 0;-1 4 -1 0 -1 0;0 -1 4 0 0 -1;-1 0 0 4 -1 0;0 -1 0 -1 4 -1;0 0 -1 0 -1 4];

b=[0 ;5 ;0 ;6 ;-2 ;6];

err_user=0.01;

n=50;

[m,n]=size(a);

x=zeros(n,1);

k=1;

while k<=n

xk=x;

for i=1:n

for j=1:n

if i~=j

ax(j)=a(i,j)*xk(j);

endendsum_ax=sum(ax);

ax=0;

x(i)=(b(i)-sum_ax)/a(i,i);

ende=max(abs(xk-x));

if e break;

endk=k+1;

enddisp(x)

disp(k)

(三)實驗題目:高斯—賽德爾解方程組

1、程式功能

程式設計實現雅可比法解方程組

二、實驗算例選擇

a=[-4,1,1,1;1,-4,1,1,1;1,1,-4,1;1,1,1,-4]

b=[1;1;1;1]

三、演算法

步驟1 :求出矩陣的範數,判斷迭代公式是否收斂。

步驟2: 代入高斯-賽德爾的矩陣迭代公式x0迭代,得到解

四、重要識別符號說明

a為方程組的係數矩陣

b為方程組的常數向量

x0為迭代初值

eps為誤差限

t為最大迭代次數

五、程式執行例項

六、源程式

function x=gs(a,b,x0,eps,t)

if nargin==0;

a=[-4 1 1 1;1 -4 1 1;1 1 -4 1;1 1 1 -4];

b=[1 1 1 1 ]';

x0=[0 0 0 0]';

eps=1e-6;

m=200;

elseif nargin==3;

eps=1e-6;

m=200;

elseif nargin<3

error('輸入有誤');

return;

elseif nargin==5

m=t;

endd=diag(diag(a));

l=-tril(a,-1);

u=-triu(a,1);

b=(d-l)\u;

f=(d-l)\b;

x=b*x0+f;

n=1;

while norm(x-x0)>=eps

x0=x;

x=b*x0+f;

n=n+1;

if(n>=m)

disp('迭代次數過多,可能不收斂');

return;

end;

end七、個人實驗總結

高斯賽德爾是雅克比的一種變形,用新資料代替舊資料,加快了迭代速度。

(四)實驗題目:拉格朗日插值多項式

1、程式功能

用拉格朗日插值多項式的方法求xi的近似解

二、實驗算例選擇

求函式x在0.6 0.8 1.0處的近似解

三、演算法

步驟1: 給定xi的值,計算dxnum=xi-x,即xi-x(1),xi-x(2),... dxden=x(i)-x(1:n)即xi-xk...

數值分析實驗報告

實驗一題目一 已知函式表如下 試用三次lagrange插值多項式求x 0.5635時的函式值。解 lagrange插值法公式 程式框圖如下 本題中n 4 分析設計思想 設計思路如上面的流程圖所示,用我們學過的c語言程式設計實現。程式清單 include include include float l...

數值分析實驗報告

數值分析 課程設計實驗報告模板 常微分方程資料值解 用龍格 庫塔法分析lorenz方程的特性 一 考慮著名的lorenz方程 其中s,r,b為變化區域內有一定限制的實引數,該方程形式簡單,表面上看並無驚人之處,但由該方程揭示出的許多現象,促使 混沌 成為數學研究的嶄新領域,在實際應用中產生了巨大的影...

數值分析實驗報告

實驗專案 a 列主元高斯消去法 b 矩陣直接三角分解法 c 雅可比迭代法 d 高斯 賽德爾迭代法 e sor迭代法 f 冪法求最大特徵值 實驗名稱 列主元高斯消去法 實驗目的 熟悉了解高斯消去法的原理,並知道如何用高斯消去法求方程組的解 實驗所用的軟體 win tc 版本 1.9.0.0 例項用高斯...