Vb程序梯形求积法
利用VB解决数学问题

利用VB解决 简单数学问题
计算三角形面积。
• 已知三角形三边:a,b,c 则三角形面积为:
L( L − A)( L − B )( L − C )
S=
其中:L=(a+b+c)
鸡兔同笼问题:
• 一个笼子里有鸡和兔,现在只知 道里面有35个头,94只脚,问 鸡和兔各有多少只?
设鸡a只,兔b只。所以有: a+b=35 2a+4b=94 a=23 b=12
用VB 程序解决这样的问题
1、三角形面积
1)、分析问题: 设:三角形三边:a,b,c则三角形面积为: S= L ( L − A )( L − B )( L − C ) 其中: L=(a+b+c)
2)、设计算法
① 输入a,b,c 的值 ②判断a,b,c能否构成三角形 ③计算三角形面积S= L( L − A)( L − B )( L − C ) 其中: L=(a+b+c) ④输出S的值。
3)、编写程序:
Private Sub Command1_Click() Dim a As Single, b As Single, c As Single, s As Single, L As Single a = InputBox("a=", " 输入") b = InputBox("b=", " 输入") c = InputBox("c=", " 输入") if (a+b)>c and (a+c)>b and (b+c)>a and (a-b)<c and (a-c)<b ; and (b-c)<a then L =( a + b + c)/2 s = sqr(L*(L-a)*(L-b)*(L-c)) Print "全面积S="; s Else Print “构不成三角形” Endif End sub
VB常用十大算法

1. 累加与连乘1、算法说明[分析]累加形式:V=V+e 连乘形式:V=V*e其中:V 是变量,e 是递增表达式。
累加和连乘一般通过循环结构来实现。
注意:需在执行循环体前对变量 V 赋初值。
一般累加时置初值0;连乘时置初值为1 [举例]求N!的结果。
Private Sub Comma nd1_Click()Dim n%, i%, s&n = Val(InputBox("输入 n"))s = 1For i = 1 To ns = s * iNext iPr int sEnd Sub[应用举例]根据下列公式,求自然对数 e 的的近似值Private Sub Comma nd1_Click()Dim i%, n&, t!, e!e = 2i = 1t = 1Do While t > 0.00001i = i + 1t = t / i e = e + tLoopPrint"计算了 "; i;"项目和是:";ePrint Exp(1)与上句输出值进行对比以证明算法的正确性End Sub2. 最值问题1、算法说明=1 + 一_ + — +一 + 1! 2! 3! + 1 = 1 + -1要求:误差小于0.00001在若干数中求最大值,一般先取第一个数为最大值的初值(即假设第一个数为最大值),然后,在循环体内将每一个数与最大值比较,若该数大于最大值,将该数替换为最大值,直到循环结束。
求最小值的方法类同。
求若干数平均值,实质上就是先求和,再除以这些数的个数。
应用举例:随机产生n个1-100 (包括1和100)的数,求它们的最大值、最小值和平均值。
Private Sub Comma nd1_Click()Dim n%, i%, min%, max%, aver!, s%n 二 Val(lnputBox("输入个数:"))s = Int (Rnd * 100) + 1max = s : min = s : aver = sPrint"第1个数是:” & sFor i = 2 To ns = In t(R nd * 100) + 1Print"第” & i & ” 个数是:” & sIf s > max The n max = sIf s < min The n min = saver = aver + sNext iaver = aver/nPrin t "max="; max; " min二";min; "aver二";averEnd Sub解题技巧:最大值、最小值、平均值类型题目往往和数组放在一起考!有的不仅求这些值,还要对具有最大值或者最小值的行或列或者某个元素进行处理,这时就要在记录最大、最小值时,同时记录该值所在的行号和列号。
设计采用梯形法和辛普生法求定积分的程序

河北工业大学计算机软件技术基础(VC)课程设计报告学院机械工程学院班级工程力学101 姓名万乐乐 _ 学号100540____ 成绩 __ ____一、题目:设计采用梯形法和辛普生法求定积分的程序(17)二、设计思路1、总体设计1)分析程序的功能对梯形法和辛普生法计算在不同区间下的积分值,比较二者的精确度;并与真实积分值比较求其误差。
2)系统总体结构:该程序有定义梯形法和辛普生法函数,f(x)函数,计算真实值的牛顿莱布尼茨函数和主函数。
①梯形法和辛普生法函数:将积分转化为VC++语言,输入被积函数和积分区间等数据,能计算出对应的积分值。
②f(x)函数:将所求的被积分的函数转化为VC++语言,被主函数调用。
③计算真实值的牛顿莱布尼茨函数:计算所积函数在其被积区间下的真实积分值。
④主函数:程序的主体,调用各个模块的运行。
2、各功能模块的设计:①梯形法和辛普生法函数:定义函数指针求积分,将数学表达式转化为VC++语言。
②f(x)函数:通过写f1,f2函数的表达式,计算结果作为函数返回值。
③计算真实值的牛顿莱布尼茨函数:通过写出f1,f2函数的原函数;用牛顿莱布尼茨公式计算其真实积分值作为函数的返回值。
④主函数:调用梯形法和辛普生法函数,f(x)函数,计算真实值的牛顿莱布尼茨函数完成积分及误差的计算。
3、设计中的主要困难及解决方案在这部分论述设计中遇到的主要困难及解决方案。
1)对函数指针不是很了解,查阅相关的资料学习其使用方法。
2)对于程序的循环使用及判断不易掌握,用到了while,for,if,break语句来解决。
4、你所设计的程序最终完成的功能1)说明你编制的程序能完成的功能用梯形法和辛普生法分别计算函数的积分,比较二者的精确度和与真实值之间的误差。
2)准备的测试数据及运行结果当下限a=0上限b=1,n分别取2,10,100,1000,5000,20000,50000时用梯形法求f1,f2的积分及误差当下限a=0上限b=1,n分别取2,10,100,1000,5000,20000,50000时用辛普生法求f1,f2的积分及误差当下限a=0上限b=2,n分别取2,10,100,1000,5000,20000,50000时用梯形法求f1,f2的积分及误差当下限a=0上限b=2,n分别取2,10,100,1000,5000,20000,50000时用辛普生法求f1,f2的积分及误差三、程序清单本程序包含main.cpp、f(x).cpp、txf.cpp、sinpson.cpp、zhengshi.cpp、head.h、6个文件。
数值分析积分实验报告(3篇)

第1篇一、实验目的本次实验旨在通过数值分析的方法,研究几种常见的数值积分方法,包括梯形法、辛普森法、复化梯形法和龙贝格法,并比较它们在计算精度和效率上的差异。
通过实验,加深对数值积分理论和方法的理解,提高编程能力和实际问题解决能力。
二、实验内容1. 梯形法梯形法是一种基本的数值积分方法,通过将积分区间分割成若干个梯形,计算梯形面积之和来近似积分值。
实验中,我们选取了几个不同的函数,对积分区间进行划分,计算积分近似值,并与实际积分值进行比较。
2. 辛普森法辛普森法是另一种常见的数值积分方法,它通过将积分区间分割成若干个等距的区间,在每个区间上使用二次多项式进行插值,然后计算多项式与x轴围成的面积之和来近似积分值。
实验中,我们对比了辛普森法和梯形法的计算结果,分析了它们的精度差异。
3. 复化梯形法复化梯形法是对梯形法的一种改进,通过将积分区间分割成多个小区间,在每个小区间上使用梯形法进行积分,然后计算所有小区间积分值的和来近似积分值。
实验中,我们对比了复化梯形法和辛普森法的计算结果,分析了它们的精度和效率。
4. 龙贝格法龙贝格法是一种通过外推加速提高计算精度的数值积分方法。
它通过比较使用不同点数(n和2n)的积分结果,得到更高精度的积分结果。
实验中,我们使用龙贝格法对几个函数进行积分,并与其他方法进行了比较。
三、实验步骤1. 编写程序实现梯形法、辛普森法、复化梯形法和龙贝格法。
2. 选取几个不同的函数,对积分区间进行划分。
3. 使用不同方法计算积分近似值,并与实际积分值进行比较。
4. 分析不同方法的精度和效率。
四、实验结果与分析1. 梯形法梯形法在计算精度上相对较低,但当积分区间划分足够细时,其计算结果可以接近实际积分值。
2. 辛普森法辛普森法在计算精度上优于梯形法,但当积分区间划分较细时,计算量较大。
3. 复化梯形法复化梯形法在计算精度上与辛普森法相当,但计算量较小。
4. 龙贝格法龙贝格法在计算精度上优于复化梯形法,且计算量相对较小。
(vb课程设计)求积分

VB求积分设计报告学院材料学院班级材料074学号072012 姓名熊银萍成绩一、设计思路1.要达到的目的①培养学生综合利用VB语言进行程序设计的能力。
②培养学生利用VB的标准控件的能力。
③培养学生使用基本算法进行应用程序设计的技能。
④锻炼学生自己动手独立思考的能力。
⑤锻炼学生的创新思维。
2.关键问题的解决①完成常用内部函数的绘制②能够在Picturebox控件中完成自定义坐标系,包括绘制原点及添加注释性文字,③坐标轴和文字的颜色可自定义。
曲线的像素点颜色要求包括两种以上④求积分方法至少使用“矩形法”和“梯形法”两种方法⑤函数的选择要求使用Combobox控件实现⑥积分方法的选择使用Option 控件实现函数曲线的绘制用Line和Pset方法二、模块之间的调用关系,或程序流程图三、部分程序关键源代码及注释Private Sub Command1_Click()Dim h As SingleDim i As IntegerDim a As SingleDim b As SingleDim jifeng As Single'每单击"积分"按钮,原picturebox内容重画If = True ThenCall Form_Click '重画曲线a = Val(Text1)b = Val(Text2)h == a= f(a)= 0 '风格为实心= RGB(225, 0, 225)jifen = 0For i = 1 To (b - a) / h(a + i * h, f(a + i * h))-(a + i * h, 0) '画小矩形(a + i * h, f(a + i * h))-(a + (i + 1) * h, f(a + i * h))(a + (i + 1) * h, f(a + i * h))-(a + (i + 1) * h, 0)= a + i * h= f(a + i * h) '准备下一个起始点jifen = jifen + f(a + i * h) * hNext iLabel4 = jifenEnd IfIf = True Then '用梯形法Call Form_Clicka = Val(Text1)b = Val(Text2)h == a= f(a)= 0= RGB(225, 0, 225)jifen = 0For i = 1 To (b - a) / h(a + i * h, f(a + i * h))-(a + i * h, 0)(a + i * h, f(a + i * h))-(a + (i + 1) * h, f(a + (i + 1) * h))jifen = jifen + (f(a + i * h) + f(a + (i + 1) * h)) * h / 2Next iLabel4 = jifenEnd IfEnd Sub四、设计方案的完善及目前存在的问题1.设计方案要完善的地方①函数曲线的平移十分的不完善,而且函数曲线的放大和缩小不能实现②辛普生法求积分的方法。
对口VB程序题解析

3.用VB语言编写一个计算梯形面积的程序本题解析:,用VB表达式来表示就是(a+b)*h/2, 首先我们知道梯形面积的计算公式是:S=(上底+下底)×高2然后我们只要获取上底、下底和高的值进行计算即可,不过要注意这里的上底、下底和高是小数,所以获取时要用Csng函数。
故这道题的代码可以写为:Private Sub Form_Click()a = Csng(InputBox("请输入上底长"))b = Csng(InputBox("请输入下底长"))h = Csng(InputBox("请输入高"))s = (a + b) * h / 2Print "梯形的面积为" & sEnd Sub4.已知二次系数a、一次项系数b和常数项c的值,用VB语言编写一个程序,利用求根公式求解一元二次方程ax2+bx+c=0并显示求解结果本题解析:求一元二次方程的解,首先我们要确定方程解的情况,即Δ的大小,他的计算公式为∆=b2−4ac,先判断是否有解,然后分情况进行求解和输出,即Δ<0、Δ>0和Δ=0,若有解,则先用求)进行计算,然后根据解的情况输出结果,若无解则直接输出无解方程根公式(x=−b±√b2−4ac2a故这道题的代码可以写为:Private Sub Form_Click()a = CInt(InputBox("请输入二次项系数a", , 1))b = CInt(InputBox("请输入一次项系数b", , 1))c = CInt(InputBox("请输入常数项c", , 1))d = b ^ 2 - 4 * a * c’计算Δ的值If d >= 0 Then ’判断Δ的大小,若大于等于零则用求根公式计算X1 = (-b + Sqr(d)) / (2 * a)X2 = (-b - Sqr(d)) / (2 * a)If X1 = X2 Then ’判断Δ是否等于0Print a & "x^2+" & b & "x+" & c & "的解为"Print "x="; X1Else ’若Δ大于1则输出两种情况Print a & "x^2+" & b & "x+" & c & "的解为"Print "x1="; X1, "x2="; X2End IfEnd IfIf d < 0 Then’如果Δ小于0则输出无解Print a & "x^2+" & b & "x+" & c & "的解为无解"End IfEnd Sub5.把下列命题用VB语言描述:a小于b或小于c;a或b都大于c;a和b中有一个小于c;a不能被b整除答案:a <b Or a < ca > c Orb > ca < c Orb < ca Modb <> 06.用VB语言编写一个程序,求一个数的绝对值。
VB程序设计——加减乘除运算器

VB程序设计——加减乘除运算器在VB程序设计中,我们可以创建一个简单的加减乘除运算器。
运算器的功能是接收用户输入的两个数和运算符,并根据运算符进行相应的计算,最后将结果输出给用户。
接下来,我们需要编写程序来实现计算功能。
在窗体代码中,我们可以编写一个函数来处理加减乘除运算。
函数代码如下:```vbPrivate Function Calculate(num1 As Double, num2 As Double, operator As String) As DoubleSelect Case operatorCase "+"Return num1 + num2Case "-"Return num1 - num2Case "*"Return num1 * num2Case "/"If num2 <> 0 ThenReturn num1 / num2ElseMessageBox.Show("除数不能为零!", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error)Return Double.NaNEnd IfCase ElseMessageBox.Show("运算符不合法!", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error)Return Double.NaNEnd SelectEnd Function```这个函数接收两个数值和一个运算符作为参数,并根据运算符的值进行相应的计算。
如果运算符不合法或者除数为零,则会弹出一个错误提示框。
```vbPrivate Sub btnCalculate_Click(sender As Object, e As EventArgs) Handles btnCalculate.ClickDim num1 As DoubleDim num2 As DoubleIf Double.TryParse(txtNum1.Text, num1) AndAlsoDouble.TryParse(txtNum2.Text, num2) ThenDim result As Double = Calculate(num1, num2, cmbOperator.SelectedItem.ToString()If Not Double.IsNaN(result) ThenlblResult.Text = result.ToStringEnd IfElseMessageBox.Show("请输入有效的数值!", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error)End IfEnd Sub```最后,我们可以在窗体的Load事件处理程序中为下拉列表框添加运算符选项。
验证数值积分求积公式及复合梯形公式程序设计

《复合梯形公式》实验报告实验名称:验证数值积分求积公式及复合梯形公式程序设计成绩:___________专业班级:数学与应用数学1202班姓名:王晓阳学号:2012254010228 实验日期:2014 年10月20日实验报告日期:2014年11月3日一.实验目的1掌握定积分的数值求解方法,验证数值积分求积公式.2.掌握数值积分的基本思想.3.掌握matlab实现数值积分函数的调用格式.4.编写复合梯形公式matlab程序及学会调用.5.学会用复合梯形公式求函数近似解.二、实验内容1.数值积分的实现(1)被积函数是一个解析式Matlab提供了quad函数和quadl函数来求定积分.它们的调用格式为:Quad(filename,a,b,tol,trace)Quadl(filename,a,b,tol,trace)其中filename 是被积函数名。
a 和b 分别是定积分的下限和上限。
Tol 用来控制积分精度,默认时取610tol -=。
Trace 控制是否展现积分过程,若取非0则展现积分过程,取0则不展现,默认时取trace=0。
例6.20 用两种不同的方法求210x I e dx -=⎰. (2)被积函数由一个表格定义在matlab 中,对由表格形式定义的函数关系的求定积分问题用trapz(X,Y)函数。
其中向量X 、Y 定义函数关系Y=f(X).X 、Y 是两个等长的向量;()12,,n X x x x =,()12,,n Y y y y =,并且12n x x x <<<,积分区间是[]1,n x x 。
例6.21用trapz 函数计算210x I e dx -=⎰. (3)二重积分数值求解Matlab 提供的dblquad 函数可以直接求出二重定积分的数值解。
该函数的调用格式为:I=dblquad(f,a,b,c,d,tol,trace)该函数求f(x,y)在[a,b]*[c,d]区域上的二重定积分。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' 文件名:梯形求积法.bas
' 模块名:梯形求积法
' 功能:用复化梯形求积公式计算定积分I=∫f(x)dx的近似值,使迭代法中相邻两项值的相对误差
' 小于给定的误差限Eps=10^(-6)
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' 文件名:梯形求积法.bas
' 模块名:梯形求积法
' 函数名:TrapeziumIntergal(a, b, s)
' 参数:a ——实型变量,输入参数,积分下限
' b ——实型变量,输入参数,积分上限
' s ——实型变量,输出参数,输出积分近似值
' 功能:以误差限Eps=10^(-6)和最大迭代步数20计算定积分的近似值
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Sub TrapeziumIntergal(a As Single, b As Single, s As Single)
Const Eps As Single = 0.000001 '影响计算速度
Const Jmax As Integer = 20 '影响计算速度
Dim Olds As Single: Olds = -1E+30
Dim j As Integer
For j = 1 To Jmax
Call TrapeziumIntergalStep(j, a, b, s)
If Abs(s - Olds) < Eps * Abs(Olds) Then Exit Sub
Olds = s
Next j
MsgBox "Too many steps."
End Sub
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' 文件名:梯形求积法.bas
' 模块名:梯形求积法
' 函数名:TrapeziumIntergalStep(n, a, b, s)
' 参数:n ——整型变量,输入参数,迭代的阶段
' a ——实型变量,输入参数,积分下限
' b ——实型变量,输入参数,积分上限
' s ——实型变量,输出参数,输出第n步的迭代值
' 功能:用于计算每一步的迭代值
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Sub TrapeziumIntergalStep(n As Integer, a As Single, b As Single, s As Single) Dim j As Single, it As Single, tnm As Single
Dim del As Single, x As Single, sum As Single
If n = 1 Then
s = 0.5 * (b - a) * (Func(a) + Func(b))
it = 1
Else
it = 2 ^ (n - 2)
tnm = it
del = (b - a) / tnm
x = a + 0.5 * del
sum = 0#
For j = 1 To it
sum = sum + Func(x)
x = x + del
Next j
s = 0.5 * (s + (b - a) * sum / tnm) End If
End Sub。