計算方法上機實驗報告

2022-08-22 04:12:03 字數 5528 閱讀 9741

數值計算上機實驗

(設計題一)

實驗名稱:euler方法與改進的euler方法

小組成員及題號:1.洪媛媛2.陳昌利3.梁靜

4.王鑫 5.萬小倩6.沈杰

7.歐榮軍 8.蔣文燕

實驗報告

一、 實驗問題

求初值問題的數值解。:

要求:(1)用euler方法和改進的euler方法求常微分方程數值解,取h=0.02,並輸出

處的數值解。

2)分析兩種演算法的結果。

二、 演算法語言:matlab程式設計**

1. euler方法

x(1)=x0;

y(1)=y0;

h=h0;

n=(b-a)/h

for n=1:n

y(n+1)=y(n)+h*(f(x(n),y(n)));

x(n+1)=x(n)+h;

endfor n=1:m

[x(n) y(n)]

endhold on

for n=1:n+1;

plot(x(n),y(n),'r*')

endu=a:h:b

v=g(u)

plot(u,v,'b')

hold off

2. 改進的euler方法

x(1)=x0;

y(1)=y0;

h=h0;

n=(b-a)/h

for n=1:n

yp=y(n)+h*(f(x(n),y(n)));

x(n+1)=x(n)+h;

yc=y(n)+h*(f(x(n+1),yp));

y(n+1)=(yp+yc)/2

endfor n=1:m

[x(n) y(n)]

endhold on

for n=1:n+1;

plot(x(n),y(n),'r*')

endu=a:h:b

v=g(u)

plot(u,v,'b')

hold off

3. 求微分方程的符號解

dsolve(『eq1,eq2,…』,』cond1,cond2,…』,』u』)

三、 演算法步驟敘述;

euler格式的實現過程

step1:輸入必要的初始資料x0,b,y0,h

step2:輸出x0,y0

step3:對x0<=b迴圈求y1值

x1x0+h

y1=y0+h*f(x0,y0)

輸出x1,y1

x0x1

y0y1

step4:結束迴圈

改進euler格式的實現過程

step1:輸入必要的初始資料x0,b,y0,h

step2:輸出x0,y0

step3:對x0<=b迴圈求y1值

x1x0+h

k1=y0+ h*f(x0,y0)

k2=y0+ h*f(x1,k1)

y1=(k1+k2)/2

輸出x1,y1

x0x1

y0y1

step4:結束迴圈

四、 變數說明:

x0:自變數初值

y0:函式初值

h0:步長

a:自變數取值下限

b:自變數取值上限

m:已知條件中需要求解的近似解的個數

f:一階常微分方程的一般表示式的右端函式

u:自變數

g(u):一階常微分方程的符號解

eq1、eq2:指定的常微分方程

cond1、cond2:初始條件

五、 程式清單:

1. >> dsolve('dy=x+y','y(0)=1','x')

x(1)=0

y(1)=1;

h=0.02;

for n=1:10

y(n+1)=y(n)+h*(x(n)+y(n));

x(n+1)=x(n)+h;

endfor n=1:6

[x(n) y(n)]

endhold on

for n=1:11;

plot(x(n),y(n),'r*')

endu=0:0.02:0.2;

v=2.*exp(u)-u-1;

plot(u,v,'b')

hold off

x(1)=0

y(1)=1;

h=0.02;

for n=1:10

yp=y(n)+h*(x(n)+y(n));

x(n+1)=x(n)+h;

yc=y(n)+h*(x(n+1)+yp);

y(n+1)=(yp+yc)/2;

endfor n=1:6

[x(n) y(n)]

endhold on

for n=1:11;

plot(x(n),y(n),'r*')

endu=0:0.02:0.2;

v=2.*exp(u)-u-1;

plot(u,v,'b')

hold off

2. >> dsolve('dy=y-2*x/y','y(0)=1','x')

x(1)=0

y(1)=1;

h=0.02;

for n=1:10

y(n+1)=y(n)+h*(y(n)-2*x(n)/y(n));

x(n+1)=x(n)+h;

endfor n=1:6

[x(n) y(n)]

endhold on

for n=1:11;

plot(x(n),y(n),'r*')

endu=0:0.02:0.2

v=exp(2.*x).*(1./exp(4.*x) (2.*x)./exp(4.*x)).^(1/2)

plot(u,v,'b')

hold off

x(1)=0

y(1)=1;

h=0.02;

for n=1:10

yp=y(n)+h*(y(n)-2*x(n)/y(n));

x(n+1)=x(n)+h;

yc=y(n)+h*(yp-2*x(n+1)/yp);

y(n+1)=(yp+yc)/2;

endfor n=1:6

[x(n) y(n)]

endhold on

for n=1:11;

plot(x(n),y(n),'r*')

endu=0:0.02:0.2;

v=exp(2.*x).*(1./exp(4.*x) (2.*x)./exp(4.*x)).^(1/2);

plot(u,v,'b')

hold off

3. >> dsolve('dy=x^2+100*y^2','y(0)=0','x')

>> x(1)=0

y(1)=0;

h=0.02;

for n=1:10

y(n+1)=y(n)+h*((x(n))^2+100*(y(n))^2);

x(n+1)=x(n)+h;

endfor n=1:6

[x(n) y(n)]

endhold on

for n=1:11;

plot(x(n),y(n),'r*')

endhold off

>> x(1)=0

y(1)=0;

h=0.02;

for n=1:10

yp=y(n)+h*((x(n))^2+100*(y(n))^2);

x(n+1)=x(n)+h;

yc=y(n)+h*((x(n+1))^2+100*(yp)^2);

y(n+1)=(yp+yc)/2;

endfor n=1:6

[x(n) y(n)]

endhold on

for n=1:11;

plot(x(n),y(n),'r*')

endhold off

>> dsolve('dy=x^2+x-y','y(0)=0','x')

x(1)=0

y(1)=0;

h=0.02;

for n=1:10

y(n+1)=y(n)+h*((x(n))^2+x(n)-y(n));

x(n+1)=x(n)+h;

endfor n=1:6

[x(n) y(n)]

endhold on

for n=1:11;

plot(x(n),y(n),'r*')

endu=0:0.02:0.2;

v=u.^2 - 1./exp(u) - u + 1;

plot(u,v,'b')

hold off

x(1)=0

y(1)=0;

h=0.02;

for n=1:10

yp=y(n)+h*((x(n))^2+x(n)-y(n));

x(n+1)=x(n)+h;

yc=y(n)+h*((x(n+1))^2+x(n+1)-yp);

y(n+1)=(yp+yc)/2;

endfor n=1:6

[x(n) y(n)]

endhold on

for n=1:11;

plot(x(n),y(n),'r*')

endu=0:0.02:0.2;

v=u.^2 - 1./exp(u) - u + 1;

plot(u,v,'b')

hold off

4. >> dsolve('dy=2*y/(x+1)','y(0)=1','x')

>> x(1)=0

y(1)=1;

h=0.02;

for n=1:10

yp=y(n)+h*(x(n)+y(n));

x(n+1)=x(n)+h;

yc=y(n)+h*(x(n+1)+yp);

y(n+1)=(yp+yc)/2;

endfor n=1:6

[x(n) y(n)]

endhold on

for n=1:11;

plot(x(n),y(n),'r*')

endu=0:0.02:0.2

v=2.*exp(u)-u-1

plot(u,v,'b')

hold off

>> x(1)=0

y(1)=1;

h=0.02;

for n=1:10

yp=y(n)+h*(2*y(n)/(x(n)+1));

x(n+1)=x(n)+h;

yc=y(n)+h*(2*yp/(x(n+1)+1));

y(n+1)=(yp+yc)/2;

endfor n=1:6

[x(n) y(n)]

endhold on

for n=1:11;

plot(x(n),y(n),'r*')

endu=0:0.02:0.2;

v=(u+1).^2;

plot(u,v,'b')

hold of

>> dsolve('dy=-50*y+50*x^2+2*x','y(0)=1/3','x') x(1)=0;

x(1)=0

計算方法實驗報告

實驗報告3 解線性方程組的迭代法 姓名 杜娟學號 08012324 班級 勘查08 3班 一 上機題目 用jacobi迭代法和高斯 賽德爾迭代法解線性方程組 二 目的要求 掌握用jacobi迭代法和高斯 賽德爾迭代法設計程式,從而實現解線性方程組。三.方法原理 解線性方程組的迭代法是將線性方程組 a...

《計算方法》實驗報告

專業及班級姓名 學號日期 請務必將結果寫在答題區域 一 方程求根 15分 1.用牛頓迭代法求解下列方程的正根 2.先用 法確定初始點,然後再求方程的所有根。求得的根的結果 二 線性方程組 15分 1 計算下列矩陣的逆矩陣,並驗證之。2.用兩種方法求解下列線性方程組 1 呼叫 x a b 命令 2 利...

數值計算方法上機報告

電氣化0805 張瑩 200801000529 一 牛頓法求解非線性方程 演算法原理 迭代公式 牛頓迭代法是將非線性方程組進行泰勒展開,逐步線性化,從而將非線性方程組近似的轉化為線性方程得到迭代序列的方法。程式框圖 變數說明 分別表示每次迭代的初值和終值,為精度控制量,為最大迭代次數。具體算例 求x...