|
plp626
银牌会员
钻石会员
积分 2278
发帖 1020
注册 2007-11-19
状态 离线
|
『楼 主』:
【原创】逼近算法研究
以线性函数y=x为例:
'非对称3-4-5逼近
dim a,b,h,i
a=0
b=3141592.6535893
h=1
k=2
do while abs(a-b)>0.0000001
do while a<b
a=a+k*h
h=k*h
i=i+1
loop
k=1
h=0.3*h
a=a-h
i=i+1
do while a>b
a=a-k*h
h=k*h
i=i+1
loop
k=1
h=0.4*h
a=a+h/2
i=i+1
loop
msgbox(a&"逼近次数:"&i)
Quote: |
Quote: | 0 1 3 7 5 4 3.5 3.25 3.125 3.1875 3.15875 3.141875 ...
% +1+2+4 -2 -1 0.25 -.125 -0.0625 -0.03125 0.015625 0.0078125 0.00390625 |
|
'快速折半逼近,此算法最具挖掘潜力。。。
a=0
b=3.141592653
h=1
Do While Abs(a-b)=>1
a=Sgn(b-a)*Sgn(h)*h+a
h=h*Sgn(b-a)*2^Sgn(b-a)
i=i+1
Loop
Do While Abs(a-b)>0.000001
a=a-Sgn(a-b)*h:h=h/2
i=i+1
Loop
MsgBox(a&"逼近次数:"&i) |
|
'非对称3-4-5加速逼近
dim a,b,h,i
a=0
b=3141592.6535893
h=1
k=2
do while abs(a-b)>0.0000001
do while a<b
a=a+k*h:h=k*h
i=i+1
loop
if a>b then
k=1:h=0.5*h:a=a-h
i=i+1
end if
do while a>b
a=a-k*h:h=k*h
i=i+1
loop
if a<b then
k=1:h=0.5*h:a=a+h
i=i+1
end if
loop
msgbox(a&"逼近次数:"&i)
'y=x快速折半逼近
'只要单调,且有根,直接算出根
a=2000.5:b=211.9456
h=1 '初始步长为1
i=0
Do While Abs(a-b)>0.001
if (a-b)*(a+Sgn(b-a)*h)>0 then
h=2*h
else
h=h/2
end if
i=i+1
a=a+Sgn(b-a)*h
'msgbox a
Loop
MsgBox(a&"逼近次数:"&i)
'y=x快速折半逼近
'只要单调,且有根,直接算出根
a=0.1
b=3.141515926
h=1 '初始步长为1
i=0
fa=log(a) '************log
faa=fa+1
Do While Abs(fa-b)>0.0000001
if (fa-b)*(faa-b)>0 then
h=2*h
else
h=h/3
end if
i=i+1
a=a+Sgn(b-fa)*h
faa=fa
fa=log(a) '*************log
'msgbox(a&"--"&fa)
'msgbox fa
Loop
MsgBox(a&"逼近次数:"&i)
'优化对分法,
'单调递减函数
h=0.5
k=2
p=1.2
a=0
i=0
tmp=a
if 0.5^(a)<>p then
a=a+h
if 0.5^(a)>p then
do while 0.5^(a)>p
tmp=a:a=a+h:h=k*h '递减,+h
i=i+1
loop
else
do while 0.5^(a) <p
tmp=a:a=a-h:h=k*h '递减,+h
i=i+1
loop
end if
end if
b=tmp
do while abs(a-b)>0.0001
c=(a+b)/2
i=i+1
if (0.5^(c)-p)*(0.5^(a)-p)>0 then
a=c
else
b=c
end if
loop
c=(a+b)/2
MsgBox(c&"逼近次数:"&i) [ Last edited by plp626 on 2008-5-29 at 08:26 AM ]
|
山外有山,人外有人;低调做人,努力做事。
进入网盘(各种工具)~~ 空间~~cmd学习 |
|
2008-5-13 16:10 |
|
|
slore
铂金会员
积分 5212
发帖 2478
注册 2007-2-8
状态 离线
|
『第
2 楼』:
问题1:可以加if语句……
不过每次都判断……
还不如复制2边……第一边用2,后面用1
直接有常量还不用k……
问题2:看 msgbox 的参数说明
|
|
2008-5-13 18:24 |
|
|
plp626
银牌会员
钻石会员
积分 2278
发帖 1020
注册 2007-11-19
状态 离线
|
『第
3 楼』:
设f(x)在指定区间比如[0,inf]单调增,求f(x)=定值比如pi的根,
'非对称三分逼近
dim a,b,h,i
a=0
b=3141592.6535893
h=1
k=2
do while abs(f(a)-b)>0.0000001
do while f(a)<b
a=a+k*h
h=k*h
i=i+1
loop
k=1
h=0.3*h
a=a-h
i=i+1
do while f(a)>b
a=a-k*h
h=k*h
i=i+1
loop
k=1
h=0.4*h
a=a+h/2
i=i+1
loop
msgbox(a&"逼近次数:"&i)
[ Last edited by plp626 on 2008-5-14 at 06:35 PM ]
|
山外有山,人外有人;低调做人,努力做事。
进入网盘(各种工具)~~ 空间~~cmd学习 |
|
2008-5-13 20:37 |
|
|
slore
铂金会员
积分 5212
发帖 2478
注册 2007-2-8
状态 离线
|
|
2008-5-13 21:59 |
|
|
plp626
银牌会员
钻石会员
积分 2278
发帖 1020
注册 2007-11-19
状态 离线
|
『第
5 楼』:
是函数
你可以拿log(x)试试
再问句:
VBS怎么在一行给多个变量赋值
|
山外有山,人外有人;低调做人,努力做事。
进入网盘(各种工具)~~ 空间~~cmd学习 |
|
2008-5-13 22:12 |
|
|
plp626
银牌会员
钻石会员
积分 2278
发帖 1020
注册 2007-11-19
状态 离线
|
『第
6 楼』:
我直接给代码吧:或许你可以帮我精简
'非对称三分逼近
dim a,b,h,i
a=0.1
b=3.14159265
h=1
k=2
do while abs(log(a)-b)>0.0000001
do while log(a)<b
a=a+k*h
h=k*h
i=i+1
loop
k=1
h=0.3*h
a=a-h
i=i+1
do while log(a)>b
a=a-k*h
h=k*h
i=i+1
loop
k=1
h=0.4*h
a=a+h/2
i=i+1
loop
msgbox("ln(x)=pi的根为:"&a&" 逼近次数:"&i)
请问:
Quote: | MsgBox(prompt[, buttons][, title][, helpfile, context]) |
|
帮助上对我这个代码msgbox显示标题好像无能为力。。。。
[ Last edited by plp626 on 2008-5-14 at 06:04 PM ]
|
山外有山,人外有人;低调做人,努力做事。
进入网盘(各种工具)~~ 空间~~cmd学习 |
|
2008-5-13 22:21 |
|
|
slore
铂金会员
积分 5212
发帖 2478
注册 2007-2-8
状态 离线
|
『第
7 楼』:
MsgBox "ln(x)=pi的根为:" & a & " 逼近次数:" & i,,b
无能为力?
|
|
2008-5-14 00:36 |
|
|
slore
铂金会员
积分 5212
发帖 2478
注册 2007-2-8
状态 离线
|
『第
8 楼』:
还是不清楚算的是啥……结果和Pi什么关系?
|
|
2008-5-14 00:40 |
|
|
plp626
银牌会员
钻石会员
积分 2278
发帖 1020
注册 2007-11-19
状态 离线
|
『第
9 楼』:
Quote: | Originally posted by slore at 2008-5-14 12:40 AM:
还是不清楚算的是啥……结果和Pi什么关系? |
|
log(23.14069144)=Pi
我只是举个例子,我拿这个算法,算积分方程呢,虽然没有某些特定算法高效,但通用性特别高。。。。
|
山外有山,人外有人;低调做人,努力做事。
进入网盘(各种工具)~~ 空间~~cmd学习 |
|
2008-5-14 11:20 |
|
|
plp626
银牌会员
钻石会员
积分 2278
发帖 1020
注册 2007-11-19
状态 离线
|
『第
10 楼』:
Quote: | Originally posted by slore at 2008-5-14 12:36 AM:
MsgBox "ln(x)=pi的根为:" & a & " 逼近次数:"[c ... |
|
好,这个问题搞定,谢谢
VBS怎么在一行给多个变量赋值?
|
山外有山,人外有人;低调做人,努力做事。
进入网盘(各种工具)~~ 空间~~cmd学习 |
|
2008-5-14 11:39 |
|
|
slore
铂金会员
积分 5212
发帖 2478
注册 2007-2-8
状态 离线
|
『第
11 楼』:
Const e = 2.71828182845904523536
Const Pi = 3.14159265
MsgBox Log(23.14069144)
MsgBox e^Pi
|
|
2008-5-14 11:51 |
|
|
slore
铂金会员
积分 5212
发帖 2478
注册 2007-2-8
状态 离线
|
『第
12 楼』:
:等于换行……
a=1:b=2
|
|
2008-5-14 11:52 |
|
|
plp626
银牌会员
钻石会员
积分 2278
发帖 1020
注册 2007-11-19
状态 离线
|
『第
13 楼』:
Quote: | Originally posted by slore at 2008-5-14 11:52 AM:
:等于换行……
a=1:b=2 |
|
哦,我怎么忘了,你在那个帖子-----汉字转拼音 里说过,
倒
|
山外有山,人外有人;低调做人,努力做事。
进入网盘(各种工具)~~ 空间~~cmd学习 |
|
2008-5-14 11:53 |
|