数值计算编程20个.docx

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

数值计算编程20个.docx

《数值计算编程20个.docx》由会员分享,可在线阅读,更多相关《数值计算编程20个.docx(25页珍藏版)》请在冰点文库上搜索。

数值计算编程20个.docx

数值计算编程20个

1、P11,第一题

PrivateSubForm_Click()

Dima,b,x,sAsDouble

a=1

b=2

s=0.001

Do

x=(a+b)/2

If(x^3-x-1)*(a^3-a-1)<0Then

b=x

Else

a=x

EndIf

LoopUntilAbs(x^3-x-1)

Printx

Printx^3-x-1

EndSub

结果:

1.

2、P12,第五题

PrivateSubForm_Click()

Dima,x,sAsDouble

a=8

s=0.001

x=a

Do

p=x

x=(p+a/p)/2

LoopUntilAbs(x-p)

Printx

EndSub

结果:

2.986

3、程序:

PrivateSubForm_Click()

DimiAsInteger

Dimt,a(0To3),pAsDouble

t=2

Fori=0To3

a(i)=InputBox("x("&i&")=")

Nexti

p=a(3)

Fori=2To0Step-1

p=p*t+a(i)

Nexti

Printp

EndSub

结果:

49

4、程序:

PrivateSubForm_Click()

Dima,b,sAsDouble

a=0.2

b=1.34

s=(a+b)/2

Do

Ifa*(1-a)*s*(1-s)<0Then

b=s

Else

a=s

EndIf

s=(a+b)/2

LoopUntilb-a<0.01

Prints

EndSub

结果:

0.997109375

5、程序:

PrivateSubForm_click()

Dimx,s,pAsDouble

DimiAsInteger

x=101

s=10

p=1/2/10

i=1

Do

s=s+p

p=p/2*(-1)/100*(2*i-1)

i=i+1

LoopUntilp<0.01

Prints

EndSub

结果:

10.05

6、拉格朗日:

PrivateSubForm_Click()

Dimi,j,nAsInteger

Dimx(1To100),y(1To100),p,s,tAsDouble

t=2.5

n=3

Fori=1Ton

x(i)=InputBox("x("&i&")=")

y(i)=InputBox("y("&i&")=")

Nexti

s=0

Fori=1Ton

p=1

Forj=1Ton

Ifi<>jThen

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

EndIf

Nextj

s=s+p*y(i)

Nexti

Prints

EndSub

结果:

6

7、课堂埃尔米特插值程序:

PrivateSubForm_Activate()

Dimx0,y0,x1,y1,g0,g1AsDouble

x0=0

y0=0

x1=1

y1=1

g0=0

g1=2

x=0.5

a0=-2/(x0-x1)^3

b0=1/(x0-x1)^2+2*x0/(x0-x1)^3

a1=-2/(x1-x0)^3

b1=2*x1/(x1-x0)^3+1/(x1-x0)^2

k0=1/(x0-x1)^2

k1=1/(x1-x0)^2

l0=(x-x1)^2*(a0*x+b0)

l1=(x-x0)^2*(a1*x+b1)

gg0=k0*(x-x0)*(x-x1)^2

gg1=k1*(x-x0)^2*(x-x1)

y=l0*y0+l1*y1+gg0*g0+gg1*g1

Printy

EndSub

结果:

0.25

8、第一个:

样条函数:

PrivateSubForm_Activate()

Dimx(3),y(3),m0,m1,m2AsDouble

DimiAsInteger

Fori=0To2

x(i)=i

y(i)=i*i

Nexti

m0=0

m2=4

h0=x

(1)-x(0)

h1=x

(2)-x

(1)

a=2/h0

b=4/h0+4/h1

c=2/h1

d=(-6*y

(1)+6*y

(2))/h1^2-(6*y(0)-6*y

(1))/h0^2

m1=(d-a*m0-c*m2)/b

Printm1

EndSub

结果:

2

9、牛顿插值:

DimkAsInteger

PrivateSubCombo1_Click()

DimiAsInteger

k=CInt(Combo1.Text)

Fori=0To9

Text1(2*i).Visible=False

Text1(2*i+1).Visible=False

Label(i).Visible=False

Nexti

Fori=0Tok-1

WithLabel(i)

.Visible=True

.Top=1560+400*i

.Caption="第"&i+1&"点:

"

.Left=120

EndWith

WithText1(2*i)

.Visible=True

.Left=800

.Top=1500+400*i

EndWith

WithText1(2*i+1)

.Visible=True

.Left=1500

.Top=1500+400*i

EndWith

Nexti

EndSub

PrivateSubCommand1_Click()

DimiAsInteger

DimsAsDouble

s=0

Fori=0Tok-1

s=s+ff(i)*f1(Text3.Text,i)

Nexti

Text2.Text=s

EndSub

PrivateSubCommand2_Click()

End

EndSub

PrivateSubForm_Load()

DimiAsInteger

Fori=2To10

Combo1.AddItemi

Nexti

EndSub

Functionff(ByValnAsInteger)

DimiAsInteger

DimsAsDouble

s=0

Ifn=0Then

ff=Text1

(1).Text

ExitFunction

EndIf

Fori=0Ton

s=s+Text1(2*i+1).Text/f(i,n)

Nexti

ff=s

EndFunction

Functionf(ByValpAsInteger,ByValnAsInteger)

DimiAsInteger

DimsAsDouble

s=1

Fori=0Ton

Ifi<>pThen

s=s*(Text1(2*p).Text-Text1(2*i).Text)

EndIf

Nexti

f=s

EndFunction

Functionf1(ByValxAsDouble,ByValnAsInteger)

DimiAsInteger

DimsAsDouble

Ifn=0Then

f1=1

ExitFunction

EndIf

s=1

Fori=0Ton-1

s=s*(x-Text1(2*i).Text)

Nexti

f1=s

EndFunction

结果:

带入(1,1),(2,4),(3,7),(4,8),(5,6)得到变量为3.5时,插值结果为7.8359375

10、复化辛普生算法:

PrivateSubCommand1_Click()

Dimi,nAsInteger

Dims,h,xAsDouble

a=InputBox("请输入左端点a:

")

b=InputBox("请输入右端点b:

")

n=InputBox("请输入分段数n:

")

h=(b-a)/n

s=f(b)-f(a)

x=a

Fori=1Ton

x=x+h/2

s=s+4*f(x)

x=x+h/2

s=s+2*f(x)

Nexti

s=h/6*s

Text1.Text=s

EndSub

Functionf(ByValxAsDouble)

Ifx=0Then

f=1

ExitFunction

EndIf

f=Sin(x)/x

EndFunction

结果:

当输入区间为(0,1),分8段,运行结果是0.1943

11、p153第6题

PrivateSubForm_Load()

Dims,t,eAsDouble

Dimi,kAsInteger

t=0

k=0

s=(t+2)^0.5

e=0.001

Fori=0To20

IfAbs(s-t)

k=1

ExitFor

EndIf

t=s

s=(t+2)^0.5

Nexti

Text1.Text=s

EndSub

结果:

1.829

12、p154第18题

DimaAsDouble

PrivateSubForm_Load()

Dimx0,x,eAsDouble

DimiAsInteger

x=5

e=0.000001

a=InputBox("a=")

Fori=0To20

x0=x

Text1.Text=Text1.Text&vbCrLf&f1(x0)

Iff1(x0)=0Then

ExitFor

EndIf

x=x0-f(x0)/f1(x0)

IfAbs(x-x0)

ExitFor

EndIf

Nexti

Ifi=20Then

MsgBox"迭代失败!

"

End

EndIf

Text1.Text=x

EndSub

Functionf(ByValxAsDouble)

f=x^3-a

EndFunction

Functionf1(ByValxAsDouble)

f1=3*x^2

EndFunction

结果:

2.188

13、p155第24题牛顿法

PrivateSubForm_Load()

Dimx0,eAsDouble

DimiAsInteger

x0=0

e=0.000001

n=20

Iff1(x0)=0Then

MsgBox"奇异"

End

EndIf

Fori=oTo20

x0=x

Iff1(x)=0Then

MsgBox"奇异"

End

EndIf

x=x0-f(x0)/f1(x0)

IfAbs(x-x0)

ExitFor

EndIf

Nexti

Ifi=20Then

MsgBox"迭代失败!

"

End

EndIf

Text1.Text=x

EndSub

Functionf(ByValxAsDouble)

f=x^3+2*x^2+10*x-20

EndFunction

Functionf1(ByValxAsDouble)

f1=3*x^2+4*x+10

EndFunction

结果:

1.137

14、p155第24题弦截法

PrivateSubForm_Load()

Dimx0,x1,eAsDouble

DimiAsInteger

x0=0

e=0.000001

n=20

Iff1(x0)=0Then

MsgBox"奇异"

End

EndIf

x1=x0-f(x0)/f1(x0)

Fori=oTo20

x=x1-f(x1)/(f(x1)-f(x0))*(x1-x0)

IfAbs(x-x1)

ExitFor

EndIf

x1=x

Nexti

Ifi=20Then

MsgBox"迭代失败!

"

End

EndIf

Text1.Text=x

EndSub

Functionf(ByValxAsDouble)

f=x^3+2*x^2+10*x-20

EndFunction

Functionf1(ByValxAsDouble)

f1=3*x^2+4*x+10

EndFunction

结果:

1.562

15、p155第24题快速弦截法

PrivateSubForm_Load()

Dimx0,x1,eAsDouble

DimiAsInteger

x0=0

e=0.000001

n=20

Iff1(x0)=0Then

MsgBox"奇异"

End

EndIf

x1=x0-f(x0)/f1(x0)

Fori=oTo20

x0=x1

x1=x

x=x1-f(x1)/(f(x1)-f(x0))*(x1-x0)

IfAbs(x-x1)

ExitFor

EndIf

Nexti

Ifi=20Then

MsgBox"迭代失败!

"

End

EndIf

Text1.Text=x

EndSub

Functionf(ByValxAsDouble)

f=x^3+2*x^2+10*x-20

EndFunction

Functionf1(ByValxAsDouble)

f1=3*x^2+4*x+10

EndFunction

结果:

1.496

16、消去法

DimnAsInteger

Dima(1To10,1To10),b(1To10),x(1To10)AsDouble

PrivateSubCombo1_Click()

Dimi,jAsInteger

Fori=1To100

Text1(i).Visible=False

Nexti

Fori=1To10

Text2(i).Visible=False

Text3(i).Visible=False

Nexti

n=Combo1.Text

Fori=1Ton

Forj=1Ton

WithText1((i-1)*n+j)

.Visible=True

.Top=500*i+200

.Left=500*j

.Height=300

EndWith

Nextj

WithText2(i)

.Visible=True

.Top=500*i+200

.Left=500*n+800

.Height=300

EndWith

WithText3(i)

.Visible=True

.Top=500*i+200

.Left=500*n+1800

.Width=700

.Height=300

EndWith

Nexti

EndSub

PrivateSubCommand1_Click()

Dimi,j,kAsInteger

Dims,rAsDouble

Fori=1Ton

Forj=1Ton

a(i,j)=Text1((i-1)*n+j).Text

Nextj

b(i)=Text2(i).Text

Nexti

Fori=1Ton-1

Forj=i+1Ton

r=a(j,i)/a(i,i)

Fork=iTon

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

Nextk

b(j)=b(j)-r*b(i)

Nextj

Nexti

Fori=nTo1Step-1

s=b(i)

Ifi<>nThen

Forj=iTon

s=s-a(i,j)*x(j)

Nextj

EndIf

x(i)=s/a(i,i)

Text3(i).Text=x(i)

Nexti

EndSub

PrivateSubCommand2_Click()

End

EndSub

PrivateSubForm_Load()

DimiAsInteger

Fori=2To10

Combo1.AddItemi

Nexti

EndSub

结果:

选择求解未知数个数为3,再依次输入A={2,-1,3;4,2,5;1,2,0;}B={1,4,7;}得到x={9,-1,-6}

17、追赶法

PrivateSubCommand1_Click()

Dimi,j,kAsInteger

Dimaa(1To4),bb(1To4),cc(1To4),dd(1To4),xx(1To4),g(1To4),f(1To4)AsDouble

Dims,rAsDouble

Fori=1To4

Ifi=1Then

aa(i)=0

Else

aa(i)=a(i).Text

EndIf

bb(i)=b(i).Text

Ifi=4Then

cc(i)=0

Else

cc(i)=c(i).Text

EndIf

dd(i)=d(i).Text

Nexti

g

(1)=dd

(1)/bb

(1)

f

(1)=-cc

(1)/bb

(1)

Fori=2To4

g(i)=(dd(i)-aa(i)*g(i-1))/(aa(i)*f(i-1)+bb(i))

f(i)=-cc(i)/(aa(i)*f(i-1)+bb(i))

Nexti

xx(4)=g(4)

x(4).Text=xx(4)

Fori=3To1Step-1

xx(i)=g(i)+f(i)*xx(i+1)

x(i).Text=xx(i)

Nexti

EndSub

PrivateSubCommand2_Click()

End

EndSub

结果:

依次输入方程组系数A={1,1;1,2,1;1,2,3;1,2;},B={3,8,20,11}得到结果为X={1,2,3,4;}

18、高斯-赛德尔程序如下:

PrivateSubCommand1_Click()

Dimi,jAsInteger

Dimk,t(1To3),s,a(1To3,1To3),b(1To3),x(1To3)AsDouble

Fori=1To3

Forj=1To3

a(i,j)=Text1(i*3+j-3).Text

Nextj

b(i)=Text2(i).Text

x(i)=0

Nexti

k=1

DoUntilk<0.0001

Fori=1To3

s=b(i)

Forj=1To3

Ifj<>iThen

Text4.Text=s

s=s-a(i,j)*x(j)

Text5.Text=s

EndIf

Nextj

t(i)=s/a(i,i)

Ifi=1Then

k=Abs(t(i)-x(i))

ElseIfAbs(t(i)-x(i))>kThen

k=Abs(t(i)-x(i))

EndIf

x(i)=t(i)

Nexti

Loop

Fori=1To3

Text3(i).Text=x(i)

Nexti

EndSub

运行结果:

输入系数A={7,5,-3;5,7,1;2,1,7;}B={2,4,-11}得到X={-1.727,2.000,-1.363}

19、迭代法程序如下:

PrivateSubCommand1_Click()

Dimi,jAsInteger

Dimk,t(1To3),s,a(1To3,1To3),b(1To3),x(1To3)AsDouble

Fori=1To3

Forj=1To3

a(i,j)=Text1(i*3+j-3).Text

Nextj

b(i)=Text2(i).Text

x(i)=0

Nexti

k=1

DoUntilk

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

当前位置:首页 > 党团工作 > 入党转正申请

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

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