數值計算上機實驗
(設計題一)
實驗名稱: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...