数值计算方法大作业课案.docx

上传人:b****5 文档编号:8844922 上传时间:2023-05-15 格式:DOCX 页数:32 大小:126.38KB
下载 相关 举报
数值计算方法大作业课案.docx_第1页
第1页 / 共32页
数值计算方法大作业课案.docx_第2页
第2页 / 共32页
数值计算方法大作业课案.docx_第3页
第3页 / 共32页
数值计算方法大作业课案.docx_第4页
第4页 / 共32页
数值计算方法大作业课案.docx_第5页
第5页 / 共32页
数值计算方法大作业课案.docx_第6页
第6页 / 共32页
数值计算方法大作业课案.docx_第7页
第7页 / 共32页
数值计算方法大作业课案.docx_第8页
第8页 / 共32页
数值计算方法大作业课案.docx_第9页
第9页 / 共32页
数值计算方法大作业课案.docx_第10页
第10页 / 共32页
数值计算方法大作业课案.docx_第11页
第11页 / 共32页
数值计算方法大作业课案.docx_第12页
第12页 / 共32页
数值计算方法大作业课案.docx_第13页
第13页 / 共32页
数值计算方法大作业课案.docx_第14页
第14页 / 共32页
数值计算方法大作业课案.docx_第15页
第15页 / 共32页
数值计算方法大作业课案.docx_第16页
第16页 / 共32页
数值计算方法大作业课案.docx_第17页
第17页 / 共32页
数值计算方法大作业课案.docx_第18页
第18页 / 共32页
数值计算方法大作业课案.docx_第19页
第19页 / 共32页
数值计算方法大作业课案.docx_第20页
第20页 / 共32页
亲,该文档总共32页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

数值计算方法大作业课案.docx

《数值计算方法大作业课案.docx》由会员分享,可在线阅读,更多相关《数值计算方法大作业课案.docx(32页珍藏版)》请在冰点文库上搜索。

数值计算方法大作业课案.docx

数值计算方法大作业课案

目录

第一章非线性方程求根····················3

1.1迭代法······································3

1.2牛顿法······································4

1.3弦截法······································5

1.4二分法······································6

第二章插值·······························7

2.1线性插值····································7

2.2二次插值····································8

2.3拉格朗日插值································9

2.4分段线性插值·······························10

2.5分段二次插值·······························11

第三章数值积分··························13

3.1复化矩形积分法·····························13

3.2复化梯形积分法·····························14

3.3辛普森积分法·······························15

3.4变步长梯形积分法···························16

第四章线性方程组数值法··················17

4.1约当消去法·································17

4.2高斯消去法·································18

4.3三角分解法·································20

4.4雅可比迭代法································21

4.5高斯—赛德尔迭代法··························23

第五章常积分方程数值法··················25

5.1显示欧拉公式法······························25

5.2欧拉公式预测校正法··························26

5.3改进欧拉公式法······························27

5.4四阶龙格—库塔法····························28

 

数值计算方法

第一章非线性方程求根

1.1迭代法

程序代码:

PrivateSubCommand1_Click()

x0=Val(InputBox("请输入初始值x0"))

ep=Val(InputBox(请输入误差限ep))

f=0

Whilef=0

X1=(Exp(2*x0)-x0)/5

IfAbs(X1-x0)

PrintX1

f=1

Else

x0=X1

EndIf

Wend

EndSub

例:

求f(x)=e2x-6x=0在x=0.5附近的根(ep=10-10)

 

1.2牛顿法

程序代码:

PrivateSubCommand1_Click()

b=Val(InputBox("请输入被开方数x0"))

ep=Val(InputBox(请输入误差限ep))

f=0

Whilef=0

X1=x0-(x0^2-b)/(2*b)

IfAbs(X1-x0)

PrintX1

f=1

Else

x0=X1

EndIf

Wend

EndSub

 

例:

的值。

(ep=10-10)

 

1.3弦截法

程序代码:

PrivateSubCommand1_Click()

x0=Val(InputBox("请输入第一个初始值x0"))

X1=Val(InputBox("请输入第二个初始值x1"))

ep=Val(InputBox("请输入误差限ep"))

f=0

Whilef=0

X2=X1-(X1^8-13)*(X1-x0)/((X1^8-13)-(x0^8-13))

IfAbs(X2-X1)

PrintX2

f=1

Else

x0=X1

X1=X2

EndIf

Wend

EndSub

例:

求f(x)=x8-13的正根(初始值x1=1,x2=10,ep=10-10)

 

1.4二分法

程序代码:

PrivateSubCommand1_Click()

a=Val(InputBox("请输入区间端点a"))

b=Val(InputBox("请输入区间端点b"))

ep=Val(InputBox("请输入误差限ep"))

f=0

Whilef=0

x=(a+b)/2

fx=Exp(-x/7)*(9-2*x)-8

fa=Exp(-a/7)*(9-2*a)-8

Iffx=0Then

f=1

Print"方程的根是",x

Else

Iffa*fx>0Then

a=x

Else

b=x

EndIf

IfAbs(b-a)

x=(b+a)/2

f=1

Print"方程的根是",x

EndIf

EndIf

Wend

EndSub

 

例:

求方程f(x)=e-7/x(9-2x)-8在区间[0,1]内的实根。

(ep=10-10)

 

第2章插值

2.1线性插值

程序代码:

PrivateSubCommand1_Click()

X0=Val(InputBox("请输入第一个结点X:

"))

Y0=Val(InputBox("请输入第一个结点Y:

"))

X1=Val(InputBox("请输入第二个结点X:

"))

Y1=Val(InputBox("请输入第二个结点Y:

"))

f=0

Whilef=0

x=Val(InputBox("请输入未知点的自变量值X:

"))

L0=(x-X1)/(X0-X1)

L1=(x-X0)/(X1-X0)

y=L0*Y0+L1*Y1

Print"x=";x,"y=";y

f=Val(InputBox("是否继续(0/1):

"))

Wend

EndSub

 

例:

已知两点(13,1)、(49,8),求30处的值。

 

2.2二次插值

程序代码:

PrivateSubCommand1_Click()

X0=Val(InputBox("请输入第一个结点X:

"))

Y0=Val(InputBox("请输入第一个结点Y:

"))

X1=Val(InputBox("请输入第二个结点X:

"))

Y1=Val(InputBox("请输入第二个结点Y:

"))

X2=Val(InputBox("请输入第三个结点X:

"))

Y2=Val(InputBox("请输入第三个结点Y:

"))

f=0

Whilef=0

x=Val(InputBox("请输入未知点的自变量值X:

"))

L0=(x-X1)*(x-X2)/(X0-X1)/(X0-X2)

L1=(x-X0)*(x-X2)/(X1-X0)/(X1-X2)

L2=(x-X0)*(x-X1)/(X2-X0)/(X2-X1)

y=L0*Y0+L1*Y1+L2*Y2

Print"x=";x,"y=";y

f=Val(InputBox("是否继续(0/1):

"))

Wend

EndSub

 

例:

已知三点(81,9)、(100,10)、(121,10),求98处的值。

 

2.3拉格朗日插值

程序代码:

PrivateSubCommand1_Click()

Dimx(),y()

n=Val(InputBox("请输入插值节点数N"))

ReDimx(n),y(n)

Fori=0Ton

x(i)=Val(InputBox("请输入插值节点x("+Str(i)+")"))

y(i)=Val(InputBox("请输入插值节点y("+Str(i)+")"))

Nexti

f=0

Whilef=0

xx=Val(InputBox("请输入未知点的自变量x:

"))

Sum=0

Fori=0Ton

t=1

Forj=0Ton

Ifj<>iThen

t=t*(xx-x(j))/(x(i)-x(j))

EndIf

Nextj

Sum=Sum+t*y(i)

Nexti

Print"x=";xx,"y=";Sum

f=Val(InputBox("是否继续(0/1)"))

Wend

EndSub

 

例:

已知四点(100,10)、(81,9)、(64,8)、(49,7),求87处的值。

 

2.4分段线性插值

程序代码:

PrivateSubCommand1_Click()

Dimx(),y()

n=Val(InputBox("请输入插值节点数N"))

ReDimx(n),y(n)

Fori=0Ton

x(i)=Val(InputBox("请输入插值节点x("+Str(i)+")"))

y(i)=Val(InputBox("请输入插值节点y("+Str(i)+")"))

Nexti

f=0

Whilef=0

xx=Val(InputBox("请输入未知点的自变量x:

"))

L=0

j=1

WhileL=0

Ifxx

k=j+1

L=1

Else

j=j+1

Ifj>n-1Then

k=n-1

L=1

EndIf

EndIf

Wend

l0=(xx-x(k))/(x(k-1)-x(k))

l1=(xx-x(k-1))/(x(k)-x(k-1))

yy=l0*y(k-1)+l1*y(k)

Print"x=";xx,"y=";yy

f=Val(InputBox("是否继续(0/1)"))

Wend

EndSub

 

例:

已知三点(361,19)、(324,18)、(289,17),N=2,求300处的值。

 

2.5分段二次插值

程序代码:

PrivateSubCommand1_Click()

Dimx(),y()

n=Val(InputBox("请输入插值节点数N"))

ReDimx(n),y(n)

Fori=0Ton

x(i)=Val(InputBox("请输入插值节点x("+Str(i)+")"))

y(i)=Val(InputBox("请输入插值节点y("+Str(i)+")"))

Nexti

f=0

Whilef=0

xx=Val(InputBox("请输入未知点的自变量x:

"))

Ifx0

(1)Then

k=1

f=1

EndIf

i=2

DoWhilef=0Andi>=n-1

Ifx0

Ifx0-x(i-1)

k=i-1

f=1

Else

k=i

f=1

EndIf

Else

i=i+1

EndIf

Loop

Iff=0Then

k=n-1

EndIf

l1=(xx-x(k+1))*(xx-x(k))/((x(k-1)-x(k+1))*(x(k-1)-x(k)))

l2=(xx-x(k+1))*(xx-x(k-1))/((x(k)-x(k+1))*(x(k)-x(k-1)))

l3=(xx-x(k))*(xx-x(k-1))/((x(k+1)-x(k))*(x(k+1)-x(k-1)))

yy=l1*y(k-1)+l2*y(k)+l3*y(k+1)

Print"x=";xx,"y=";yy

f=Val(InputBox("是否继续(0/1)"))

Wend

EndSub

 

例:

已知三点(225,15)、(196,14)、(169,13),求180处的值。

 

第3章数值积分

3.1复化矩形积分法

程序代码:

PrivateSubCommand1_Click()

a=Val(InputBox("请输入积分下限a"))

b=Val(InputBox("请输入积分上限b"))

n=Val(InputBox("请输入积分区间等分数N"))

h=(b-a)/n

Sum=0

Fori=1Ton

Sum=Sum+(a+(i-0.5)*h)^2

Nexti

r=h*Sum

Print"复化矩形积分法计算结果:

";r

EndSub

例:

求X2在区间[3,5]的积分值,等分区间为100。

 

3.2复化梯形积分法

程序代码:

PrivateSubCommand1_Click()

a=Val(InputBox("请输入积分下限a"))

b=Val(InputBox("请输入积分上限b"))

n=Val(InputBox("请输入积分区间等分数N"))

h=(b-a)/n

Sum=0

Fori=1Ton-1

Sum=Sum+(a+i*h)^2

Nexti

t=h*(a^2+b^2)/2+h*Sum

Print"复化梯形积分法计算结果:

";t

EndSub

 

例:

求X2在区间[3,5]的积分值,等分区间为100。

 

3.3辛普生积分法

程序代码:

PrivateSubCommand1_Click()

a=Val(InputBox("请输入积分下限A:

"))

b=Val(InputBox("请输入积分上限B:

"))

n=Val(InputBox("请输入积分区间等分数N:

"))

h=(b-a)/n

Sum=0

w=a+h/2

Whilew

Sum=Sum+(w-h/2)^2+4*w^2+(w+h/2)^2

w=w+h

Wend

s=Sum*h/6

Print"辛普生积分法计算结果:

";s

EndSub

 

例:

求X2在区间[3,5]的积分值,等分区间为100。

 

3.4变步长梯形积分法

程序代码:

PrivateSubCommand1_Click()

a=Val(InputBox("请输入积分下限a:

"))

b=Val(InputBox("请输入积分上限b:

"))

ep=Val(InputBox("请输入误差限ep:

"))

n=1

h=b-a

t1=h*(a^2+b^2)/2

f=0

Whilef=0

Sum=0

Fori=1Ton-1

Sum=Sum+(a+(i-1/2)*h)^2

Nexti

T2=t1/2+h*Sum/2

IfAbs(T2-t1)

PrintT2

f=1

Else

t1=T2

h=h/2

n=2*n

EndIf

Wend

EndSub

 

例:

求X2在区间[3,5]的积分值,误差限ep=0.0001。

 

第4章线性方程组数值解法

4.1约当消去法

程序代码:

PrivateSubCommand1_Click()

Dima()

n=Val(InputBox("请输入方程的个数N:

"))

ReDima(n,n+1)

Fori=1Ton

Forj=1Ton+1

a(i,j)=Val(InputBox("请输入增广矩阵A("+Str(i)+","+Str(j)+")="))

Nextj

Nexti

Fork=1Ton

m=a(k,k)

Forj=kTon+1

a(k,j)=a(k,j)/m

Nextj

Fori=1Ton

Ifi<>kThen

m=a(i,k)

Forj=kTon+1

a(i,j)=a(i,j)-a(k,j)*m

Nextj

EndIf

Nexti

Nextk

Fori=1Ton

Print"x("+Str(i)+")=";a(i,n+1)

Nexti

EndSub

例:

已知方程组,求X1X2X3的值。

X1+X2+X3=20

2X1+3X2+X3=38

X1+4X2+X3=35

 

4.2高斯消去法

程序代码:

PrivateSubCommand1_Click()

Dima(),x()

n=Val(InputBox("请输入方程个数N:

"))

ReDima(n,n+1),x(n)

Fori=1Ton

Forj=1Ton+1

a(i,j)=Val(InputBox("请输入增广矩阵A("+Str(i)+","+Str(j)+"):

"))

Nextj

Nexti

Fork=1Ton-1

m=a(k,k)

Forj=kTon+1

a(k,j)=a(k,j)/m

Nextj

Fori=k+1Ton

m=a(i,k)

Forj=kTon+1

a(i,j)=a(i,j)-a(k,j)*m

Nextj

Nexti

Nextk

x(n)=a(n,n+1)/a(n,n)

Fori=n-1To1Step-1

Sum=0

Forj=i+1Ton

Sum=Sum+a(i,j)*x(j)

Nextj

x(i)=a(i,n+1)-Sum

Nexti

Fori=1Ton

Print"x("+Str(i)+")=";x(i)

Nexti

EndSub

 

例:

已知方程组,求X1X2X3的值。

2X1+5X2+X3=21

4X1+3X2+3X3=31

X1+3X2+2X3=16

 

4.3三角分解法

程序代码:

PrivateSubCommand1_Click()

Dima(),b(),l(),u(),x(),y()

n=Val(InputBox("请输入方程个数N:

"))

ReDima(n,n),b(n),l(n,n),u(n,n),x(n),y(n)

Fori=1Ton

Forj=1Ton

a(i,j)=Val(InputBox("请输入系数矩阵A("+Str(i)+","+Str(j)+"):

"))

Nextj

b(i)=Val(InputBox("请输入右端常数项B("+Str(i)+"):

"))

Nexti

Fori=1Ton

Forj=1Ton

Ifi>jThen

Sum=0

Fork=1Toj-1

Sum=Sum+l(i,k)*u(k,j)

Nextk

l(i,j)=(a(i,j)-Sum)/u(j,j)

Else

Sum=0

Fork=1Toi-1

Sum=Sum+l(i,k)*u(k,j)

Nextk

u(i,j)=a(i,j)-Sum

EndIf

Nextj

Nexti

Fori=1Ton

Sum=0

Forj=1Toi-1

Sum=Sum+l(i,j)*y(j)

Nextj

y(i)=b(i)-Sum

Nexti

Fori=nTo1Step-1

Sum=0

Forj=i+1Ton

Sum=Sum+u(i,j)*x(j)

Nextj

x(i)=(y(i)-Sum)/u(i,i)

Nexti

Fori=1Ton

Print"x("+Str(i)+")=";x(i)

Nexti

EndSub

例:

已知方程组,求X1X2X3的值。

2X1+3X2+4X3=38

X1+7X2+3X3=65

5X1+2X2+X3=33

 

4.4雅可比迭代法

程序代码:

Dima(),b(),x0(),x()

n=Val(InputBox("请输入方程个数N:

"))

ReDima(n,n),b(n),x0(n),x(n)

ep=Val(InputBox("请输入误差限EP:

"))

nmax=Val(InputBox("请输入最大迭代次数Nmax:

"))

Fori=1Ton

Forj=1Ton

a(i,j)=Val(InputBox("请输入系数矩阵A("+Str(i)+","+Str(j)+"

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2