数值计算方法大作业.docx

上传人:b****5 文档编号:4828202 上传时间:2022-12-10 格式:DOCX 页数:26 大小:50.04KB
下载 相关 举报
数值计算方法大作业.docx_第1页
第1页 / 共26页
数值计算方法大作业.docx_第2页
第2页 / 共26页
数值计算方法大作业.docx_第3页
第3页 / 共26页
数值计算方法大作业.docx_第4页
第4页 / 共26页
数值计算方法大作业.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

数值计算方法大作业.docx

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

数值计算方法大作业.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=1O10)

aFomrl左叵jSS

n-

privateSubcommanslc=ck()bHva_(一npu65ox25阱>I薄斗H達XQ))epHva-(-npu65ox(i5f!

>i^m^ep))

70

whi_efH0

XIHxo'xo>21b)二2*b)-fAbs(x_k—xo)Ael^Then

PrinfXI

f丄

E_se

X0HX1

End_f

Wend

EndSub

s-说劎3血。

(epHl°」o)

 

1.3弦截法

程序代码:

PrivateSubCommand1_Click()

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

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

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

Whilef=0

X2=X1-(X1A8-13)*(X1-x0)/((X1A8-13)-(x0A8-13))

IfAbs(X2-X1)

PrintX2

f=1

Else

x0=X1

X1=X2

EndIf

Wend

EndSub

例:

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

口Forml

1.3779SOG1513663

1

~3

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

-10\

(ep=10)

例:

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

戸Forml

J

itnpl

q

t

j.

方程的根是

.31555613OS

24961

『……三莊—ii1

ick

第二章插值

2.1线性插值

程序代码:

PrivateSubCommand1_Click()

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

"))

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

"))

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

"))

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

"))

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处的值

r

口Forml

1

泸30

尸4.305555S5555556

0

r_—_

统性插值|

2.2二次插值

程序代码:

PrivateSubCommand1_Click()

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

"))

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

"))

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

"))

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

"))

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

"))

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

"))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*丫1+L2*Y2

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

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

"))

Wend

EndSub

例:

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

r

鬥Farrnl

D•回1!

S3

98

y=9.朋旳9749-373434

moI

3

ici

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处的值。

-I0Forrnl:

u|.回|!

SjJI—

"x=67y=9.32563396692811

拉格朗曰插值

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

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

11=(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

LForml

300

尸17,3142867142857

例:

已知三点(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

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

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

13=(xx-x(k))*(xx-x(k-1))/((x(k+1)-x(k))*(x(k+1)-x(k-1)))yy=l1*y(k-1)+12*y(k)+13*y(k+1)

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

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

Wend

EndSub

例:

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

1芯

専-c-rmL

丨口[回

云1

泸180

y=13..4154351395731

I

分段二次播值

第三章数值积分

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)A2

Nexti

r=h*Sum

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

";r

EndSub

例:

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

Click

Forml'cj

复化梯形稅分法计算结果:

32.&S6&

程序代码:

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)A2

Nexti

t=h*(aa2+ba2)/2+h*Sum

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

";t

EndSub

 

例:

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

100。

亘化梯形租分法计算结果;326B68

亘化梯形枳分法

程序代码:

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)A2+4*wA2+(w+h/2)A2w=w+h

Wend

s=Sum*h/6

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

";s

EndSub

例:

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

口Fomnl

1□e21

辛普生稅分法计算结果:

326&6666666&6&S

n

厂—-1

辛普生稅分法

程序代码:

PrivateSubCommand1_Click()

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

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

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

"))n=1

h=b-a

t1=h*(aA2+bA2)/2

f=0

Whilef=0

Sum=0

Fori=1Ton-1

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

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.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

例:

已知方程组,求XX2X3的值。

厂X1+X2+X3=20

2X+3X+X3=38

-X1+4X+X3=35

口Fopmz

4.2M驾羔a并

H-

privateSubcommanslc=ck()

Dimapx()nHva_(一npu65ox25阱>厲就->達N2))

ReDima(pn+」)』x(n)

ForiHlTon

ForjHlTon+1

a(Lj)Hva_(一npu65ox(=逋鸯>迤「書再A(=+S艾i)+-----+sfre+=)2))Nexfj

Nexfi

ForkHlTon—1

mHa?

k)

ForjHkTon+—k

a(k二)Ha(k二二3

Nexfj

ForiHk+1Ton

mHa(Lk)

ForjHkTon+—ka(Lj)Ha(Lj)-a(k二)*m

Nexfj

Nexfi

Nexfk

oo

 

x(n)=a(n,n+1)/a(n,n)Fori=n-1To1Step-1Sum=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的值

2X+5X+X3=21

4X+3X+3X=31

X1+3X+2X=16

r鬥Form!

1口]「茁亘

xC1)=4xC2

讥3)=3

1高斯消去法

E!

F■

4.3三角分解法

程序代码:

PrivateSubCommand1_Click()

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

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

"))

ReDima(n,n),b(n),1(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

例:

已知方程组,求XiX2X3的值

2Xi+3X+4X=38

Xi+7X+3X=65

5X+2X+X3=33

xC1)=3nCz)=ex(3)=2

i三角分斛进|

4.4雅可比迭代法

程序代码:

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

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

"))

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

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

"))

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

"))

Fori=1Ton

Forj=1Ton

+"):

"))

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

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

"))

Nexti

Fori=1Ton

x0(i)=Val(lnputBox("请输入初始解X0("

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

当前位置:首页 > 高等教育 > 军事

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1