1二维插值算法与实现课件_第1页
1二维插值算法与实现课件_第2页
1二维插值算法与实现课件_第3页
1二维插值算法与实现课件_第4页
1二维插值算法与实现课件_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

几个算例华东交通大学教师:赵秀绍1二维插值算法与实现第一个例题三角形的面积求解1二维插值算法与实现三角形面积求解可以采用一个界面的输入方式,也可采用inputbox的输入方式,但要注意,因为输入的次数为三次,要用定数循环,不能没有条件的循环。1二维插值算法与实现三角形面积求解PrivateSubForm_Load()Text2=""EndSubPrivateSubText1_Change(IndexAsInteger)IfNotIsNumeric(Text1(Index).Text)ThenText2.Text="输入的不是数字,请重新输入"Text1(Index).SetFocusText1(Index).Text=""ElseText2="输入的数字是正确的"EndIfEndSub初始化判断输入的数据1二维插值算法与实现三角形面积求解PrivateSubCommand1_Click()‘计算DimA#,B#,C#,S#,Mianji#A=Val(Text1(0).Text)B=Val(Text1(1).Text)C=Val(Text1(2).Text)IfA+B>CAndB+C>AAndA+C>BThenS=(A+B+C)/2Mianji=Sqr(S*(S-A)*(S-B)*(S-C))Text2.Text=Format(Mianji,"三角形的面积为0.###")ElseText2.Text="输入的三条边不能构成三角形"EndIfEndSub1二维插值算法与实现三角形面积求解方法21二维插值算法与实现三角形面积求解PrivateSubCommand4_Click()OnErrorResumeNextDimAA()AsStringIfText3(0).Text<>""OrText3(1).Text<>""ThenIfOption1(0).Value=TrueThenAA=Split(Text3(0).Text,",")IfOption1(1).Value=TrueThenAA=Split(Text3(1).Text,"")ElseText4="没有数据输入"EndIf下续1二维插值算法与实现三角形面积求解FunctionSplit(ExpressionAsString,[Delimiter],[LimitAsLong=-1],[CompareAsVbCompareMethod=vbBinaryCompare])VBA.Strings的成员Splitastringintoanarray解释:split把一个字符串按分隔符分成一个数组,这个数组须是动态数组。空格分隔容易出现问题,但逗号分隔不会出现问题。例如:1二维插值算法与实现三角形面积求解多加几个空格没有问题,但不能有两个逗号连着多加几个空格出现问题,分解的值有问题1二维插值算法与实现代码续DimA#,B#,C#,S#,Mianji#A=Val(AA(0))B=Val(AA(1))C=Val(AA(2))IfA+B>CAndB+C>AAndA+C>BThenS=(A+B+C)/2Mianji=Sqr(S*(S-A)*(S-B)*(S-C))Text4.Text="三角形的三边分别为a="&A&",b="&B&",c="&C&vbCrLf&Format(Mianji,"三角形的面积为0.###")ElseText4.Text="三角形的三边分别为a="&A&",b="&B&",c="&C&vbCrLf&"输入的三条边不能构成三角形"EndIfEndSub1二维插值算法与实现103.75,-1,38,7,15,1;96.75,1,86,52,30,1;420.77,-1,39,18,30,1;208.64,1,62,31,30,1;436.79,1,25,56,30,-1;56.48,-1,87,1,15,-1;"98.8,-1,53,22,0,-1;"68.62,1,36,38,0,-1;"95.1,1,59,29,0,-1;""207.41,-1,51,40,45,-1"1二维插值算法与实现PublicSubStrtoShuzhu(ByValStr1AsString,A()AsDouble)DimRowDataAsVariantDimColDataAsVariantDimRowtmpDatAsVariantDimColTmpDatAsVariantDimrAsInteger,CAsIntegerRowData=Split(Str1,";")ReDimA(UBound(RowData),1)r=-11二维插值算法与实现ForEachRowtmpDatInRowDataColData=Split(RowtmpDat,",")ReDimPreserveA(UBound(RowData),UBound(ColData))r=r+1C=-1ForEachColTmpDatInColDataC=C+1A(r,C)=ColTmpDatNextNext1二维插值算法与实现第二个例题含水率求解1二维插值算法与实现含水率试验要求两组计算一个平均值,当两个值求平均时,差值大于规范要求时,用红色背景显示该数据1二维插值算法与实现含水率试验PrivateSubKJSZ(ByValShuAsInteger)OnErrorResumeNextDimiAsIntegerIfShu>=10ThenText55.BackColor=vbRedText55="加载的试验组数过多,本程序暂时不能处理"ExitSubEndIfIfShu>1AndShu<10ThenFori=2ToShuLoadHSBH(i-1)HSBH(i-1).Visible=TrueHSBH(i-1).Top=HSBH(i-2).Top+350

加载控件数组1二维插值算法与实现含水率试验LoadHShh(i-1)HShh(i-1).Visible=TrueHShh(i-1).Top=HShh(i-2).Top+350LoadHSmh(i-1)HSmh(i-1).Visible=TrueHSmh(i-1).Top=HSmh(i-2).Top+350LoadHSmhst(i-1)HSmhst(i-1).Visible=TrueHSmhst(i-1).Top=HSmhst(i-2).Top+350LoadHSmhgt(i-1)HSmhgt(i-1).Visible=TrueHSmhgt(i-1).Top=HSmhgt(i-2).Top+350

LoadHSmst(i-1)HSmst(i-1).Visible=True

'HSmst(i-2).Enabled=FalseHSmst(i-1).Top=HSmst(i-2).Top+350

LoadHSmgt(i-1)HSmgt(i-1).Visible=True

'HSmgt(i-2).Enabled=FalseHSmgt(i-1).Top=HSmgt(i-2).Top+350

LoadHSw(i-1)HSw(i-1).Visible=True

'HSw(i-2).Enabled=FalseHSw(i-1).Top=HSw(i-2).Top+350

LoadHSpjw(i-1)HSpjw(i-1).Visible=True

'HSpjw(i-2).Enabled=FalseHSpjw(i-1).Top=HSpjw(i-2).Top+350NextiEndIfHSQK_ClickEndSub1二维插值算法与实现含水率试验PrivateSubCommand16_Click()OnErrorResumeNextDimiAsIntegerFori=HSBH.UBoundTo1Step-1UnloadHSBH(i)UnloadHShh(i)UnloadHSmh(i)UnloadHSmhst(i)UnloadHSmhgt(i)UnloadHSmst(i)UnloadHSmgt(i)UnloadHSw(i)UnloadHSpjw(i)Nexti控件是不能重复加载的,如需重复加载,可以用错误捕捉也可以先缷载要加载的控件1二维插值算法与实现含水率试验KJSZ(Val(Text54))'UShu=Val(Text54)Label66.ForeColor=vbGreenLabel66.FontBold=TrueLabel66.Caption="计算成功,请保存数据"ExitSuberr1:Label66.ForeColor=vbRedLabel66.FontBold=TrueLabel66.Caption="计算出错了,请确认是否输入数据有误,注意试样体积和含水率的输入"EndSub函数调用,有两种方法1二维插值算法与实现含水率试验PrivateSubHSJS_Click()OnErrorGoToerr1DimiAsIntegerIfVal(Text54)>1ThenFori=0ToVal(Text54)-1HSmst(i)=Format(Val(HSmhst(i))-Val(HSmh(i)),"#####0.000")HSmgt(i)=Format(HSmhgt(i)-HSmh(i),"#####0.000")HSw(i)=Format((HSmhst(i)-HSmhgt(i))*100/HSmgt(i),"#####0.000")NextFori=1ToVal(Text54)IfiMod2=0ThenIfAbs(Val(HSw(i-1))-Val(HSw(i-2)))<2ThenHSpjw(i-2).ForeColor=vbBlackElseHSpjw(i-2).BackColor=vbRedHSpjw(i-2).FontBold=TrueEndIf

HSpjw(i-2).Text=(Val(HSw(i-1))+Val(HSw(i-2)))/2UnloadHSpjw(i-1)

EndIfNext计算含水率的程序湿土计算干土计算含水率计算含水率差值计算1二维插值算法与实现含水率试验Elsei=0HSmst(i)=Format(Val(HSmhst(i))-Val(HSmh(i)),"#####0.000")HSmgt(i)=Format(HSmhgt(i)-HSmh(i),"#####0.000")HSw(i)=Format((HSmhst(i)-HSmhgt(i))*100/HSmgt(i),"#####0.000")HSpjw(i)=HSw(i)EndIfLabel66.ForeColor=vbGreenLabel66.FontBold=TrueLabel66.Caption="计算成功,请保存数据"ExitSuberr1:Label66.ForeColor=vbRedLabel66.FontBold=TrueLabel66.Caption="计算出错了,请确认是否输入数据有误"EndSub提示计算成功还是失败的信息1二维插值算法与实现表格法实现方法DimStr1AsString,AA()AsDoubleSpreadsheet1.Cells(1,1)="盒号"Spreadsheet1.Cells(1,2)="m盒(g)"Spreadsheet1.Cells(1,3)="m盒+湿土(g)"Spreadsheet1.Cells(1,4)="m盒+干土(g)"Spreadsheet1.Cells(1,5)="含水率(%)"Spreadsheet1.Cells(1,6)="平均含水率(%)"Str1="314,14.414,84.355,75.614;345,14.397,82.576,73.323"StrtoShuzhuStr1,AA()DimIAsInteger,JAsIntegerForI=0ToUBound(AA,1)ForJ=0ToUBound(AA,2)Spreadsheet1.Cells(I+2,J+1)=AA(I,J)'把字符串分开填入表格中,以备以后测试用

NextJNext1二维插值算法与实现含水率计算DimIAsInteger,JAsInteger,AA()I=Spreadsheet1.ActiveSheet.UsedRange.Rows.CountReDimAA(I-2,2)ForI=0ToSpreadsheet1.ActiveSheet.UsedRange.Rows.Count-2ForJ=0To2AA(I,J)=Spreadsheet1.Cells(I+2,J+2)‘读入表格数据

NextJSpreadsheet1.Cells(I+2,5)=Format((AA(I,1)-AA(I,2))/(AA(I,2)-AA(I,0))*100,"#.000")'含水率

IfI>=1AndIMod2=1ThenSpreadsheet1.Cells(I+2,6)=(Spreadsheet1.Cells(I+2,5)+Spreadsheet1.Cells(I+1,5))/2

EndIf

Next1二维插值算法与实现作业1添加Microsoftofficexp控件用表格法编写含水率或密度计算程序学习用split()和strtoshuzhu()函数把一个字符串转变成数组。有图的请抓图,作业可以是手写版也可以是打印版。1二维插值算法与实现密度试验第三个例题密度求解1二维插值算法与实现mdmd1md2md3md4md5md6md7md81二维插值算法与实现加载试验组数PrivateSubText5_Change()DimiAsIntegerIfVal(Text5)<=0orVal(Text5)>10ThenMsgBox"输入数字出错",vbInformation,"请重新输入"ExitSubEndIfIIfVal(Text5)>0Then'加载试验组数

IfVal(Text5)>MD1.CountThenFori=MD1.ubound+1ToVal(Text5)-1LoadMD1(i):LoadMD2(i):LoadMD3(i):LoadMD4(i)LoadMD5(i):LoadMD6(i):LoadMD7(i)LoadMD8(i):MD1(i)=i+1:MD2(i)=423+i动态加载控件时,每个控件的index属性设置为01二维插值算法与实现加载控件,控件显示位置MD1(i).Top=MD1(i-1).Top+350'加载后的控件位置

MD2(i).Top=MD2(i-1).Top+350

MD3(i).Top=MD1(i-1).Top+350MD4(i).Top=MD2(i-1).Top+350MD5(i).Top=MD1(i-1).Top+350MD6(i).Top=MD2(i-1).Top+350MD7(i).Top=MD1(i-1).Top+350MD8(i).Top=MD2(i-1).Top+3501二维插值算法与实现让控件显示在窗体上MD1(i).Visible=True'显示加载后的控件

MD2(i).Visible=True

MD3(i).Visible=TrueMD4(i).Visible=TrueMD5(i).Visible=TrueMD6(i).Visible=TrueMD7(i).Visible=TrueMD8(i).Visible=TrueNext1二维插值算法与实现当界面上的控件多时,控件的卸载ElseIfVal(Text5)<MD1.CountThen'如果加载的控件比目前显示的少,卸载控件

Fori=MD1.uboundToVal(Text5)Step-1Ifi>0ThenUnloadMD1(i)UnloadMD2(i):UnloadMD3(i):UnloadMD4(i)UnloadMD5(i):UnloadMD6(i):UnloadMD7(i)UnloadMD8(i)EndIfNextEndIfEndIfMD1(0)=1'这些数据不重要,随便编个号MD2(0)=423EndSub1二维插值算法与实现2演示数据PrivateSubMDYS_Click()DimiAsIntegerText5=3’设只有三组试验Text5_Change‘事件过程也可直接调用,加载试验组数Fori=0To2’试验自动编号与环刀自动编号

MD1(i)=i+1MD2(i)=423+iNextMD3(0)=44.089:MD4(0)=161.605:MD5(0)=60MD6(0)=23.01‘第一行数据MD3(1)=41.089:MD4(1)=169.605:MD5(1)=60MD6(1)=22.6MD3(2)=43.089:MD4(2)=169.607:MD5(2)=60MD6(2)=20.6EndSub1二维插值算法与实现计算过程1PrivateSubMDJS_Click()DimiAsInteger,KAsIntegerDimtmpAsDouble,StrtmpAsStringFori=0ToVal(Text5)-1tmp=(Val(MD4(i))-Val(MD3(i)))/Val(MD5(i))MD7(i)=Format(tmp,"0.####")‘湿密度

IfVal(MD6(i))>0Thentmp=Val(MD7(i))/(1+Val(MD6(i))/100)MD8(i)=Format(tmp,"0.####")‘干密度

EndIfNext1二维插值算法与实现计算过程2Strtmp="试样编号,环刀号,刀质量(g),环刀+湿土质量(g),试样体积(cm3),含水率(%),湿密度(g/cm3),干密度(g/cm3)"&vbCrLfFori=0ToVal(Text5)-1Strtmp=Strtmp&MD1(i)&","&MD2(i)&","&MD3(i)&","&MD4(i)&","&MD5(i)&","&MD6(i)&","&MD7(i)&","&MD8(i)&vbCrLfNexttmp=0Fori=0ToMD1.uboundtmp=tmp+MD7(i)Next把输入数据和计算结果以逗号隔开,以便导入Excel中1二维插值算法与实现计算过程3tmp=Format(tmp/MD1.Count,"0.####")Strtmp=Strtmp&"-----------------"&vbCrLfStrtmp=Strtmp&"湿密度平均值为,"&tmp&"g/cm3,"tmp=0Fori=0ToMD1.ubound‘获得控件数组的下标最大值

tmp=tmp+MD8(i)Nexttmp=Format(tmp/MD1.Count,"0.####")Strtmp=Strtmp&"干密度平均值为,"&tmp&"g/cm3"Text70=Text68&StrtmpEndSub显示到text70中,text70的mutiline属性应设置成true1二维插值算法与实现数据格式转换1二维插值算法与实现以逗号隔开的数据分割PrivateSubCommand31_Click()OnErrorResumeNextDimAA()AsString,bb()AsString,iAsIntegerIfText6<>""Then'分割数据

AA=Split(Text6.Text,vbCrLf)‘先分行,以回车符分隔EndIfText5.Text=UBound(AA)+1:Text5_Change‘分配控件数组IfOption2(0).Value=TrueThen’逗号隔开的情况

Fori=0ToUBound(AA)IfAA(i)<>""Then‘不是空行的情况

bb=Split(AA(i),",")MD1(i)=bb(0):MD2(i)=bb(1):MD3(i)=bb(2)MD4(i)=bb(3):MD5(i)=bb(4):MD6(i)=bb(5)Else’是空行的情况

Text5=Text5.Text-1Text5_ChangeEndIfNext1二维插值算法与实现其它分隔符情况可以是单空格分隔,也可以是Excel数据复制过来的,其中Excel复制的分隔符是chr(9),是个特殊字符。其余的请仿此程序进行设计。1二维插值算法与实现第五个问题线性插值计算引言一维线性插值原理及程序设计二维线性插值原理及程序设计结论1二维插值算法与实现一、引言如表1所示,当勘察出来的e指标为0.75,IL指标为0.625时,且有很多组数据需要查表插值时,则计算量较大。在列表中,e最小值为0.5,如果是0.45,则计算者更难着手计算。表1粘性土承载力基本值f0ILe0.50.750.72652400.82202001二维插值算法与实现二、一维线性插值原理及程序设计1二维插值算法与实现2.1一维线性插值原理(1)情况1(e1≤e3≤e2内部插值情况)从图1(a)中可得: △ABC≌△ADE

当f2≥f1时:

当f2<f1时,同理,作出相应图可得:

(1)(2)1二维插值算法与实现2.1一维线性插值原理情况2(e3<e1外部插值情况)从图1(b)中可得:△ABC≌△ADE当f2≥f1时:

当f2<f1时,同理,作出相应图可得:

(3)(4)1二维插值算法与实现2.1一维线性插值原理第三种情况的外插情况,作出相应图形,同理可得(5)(6)1二维插值算法与实现2.2线性插值计算的流程图1二维插值算法与实现2.3一维线性插值程序PrivateFunctionChazhi(ByVale1AsDouble,ByValf1AsDouble,ByVale2AsDouble,ByValf2AsDouble,ByVale3AsDouble)’注:(e1,f1)与(e2,f2)已知,求e3对应值f3DimTemp1AsDoubleIfe1>=e2Then

Temp1=e1e1=e2e2=Temp1Temp1=f1f1=f2f2=Temp1EndIf‘注:设e2>e1,否则e1与e2交换,f1与f2交换1二维插值算法与实现2.3一维线性插值程序Ife3>=e1Ande3<=e2Then

Iff2>=f1ThenChazhi=(e3-e1)*(f2-f1)/(e2-e1)+f1ElseChazhi=(e2-e3)*(f1-f2)/(e2-e1)+f2EndIfElseIfe3<e1Then

Iff2>=f1ThenChazhi=((e1-e3)*f2-(e2-e3)*f1)/(e1-e2)

ElseChazhi=(f1-f2)*(e2-e3)/(e2-e1)+f2

EndIf‘注:内部插值计算,情况1‘注:f2>=f1的计算方法(1)’

注:f1>=f2的计算方法(2)’‘注:外部插值计算,情况2’注:计算方法(3)’注:计算方法(4)1二维插值算法与实现2.3一维线性插值程序ElseIfe3>e2Then

Iff2>=f1ThenChazhi=(f2-f1)*(e3-e1)/(e2-e1)+f1

ElseChazhi=((e3-e1)*f2-(e3-e2)*f1)/(e2-e1)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论