vb曲线拟合

作者&投稿:臾温 (若有异议请与网页底部的电邮联系)
vb曲线拟合~

老弟,公式打不出来的
一般都是用matlab搞定的,它里面有现成的函数供使用的
典型程序解析:
x=[0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1];%input xi data
y=[1.978 3.28 6.16 7.08 7.34 7.66 9.56 9.48 9.30 11.2]; % input yi data
n=2; % polynomial order
p=polyfit(x, y, n)% polyfit 的输出是一个多项式系数的行向量(拟合二项式的系数)
ezplot('-9.8108*x*x+20.1293*x-0.0317')%对拟合的函数作图
xi=linspace(0,1,100); % x-axis data for plotting
z=polyval(p, xi);% 为了计算在xi数据点的多项式值,调用MATLAB的函数polyval
plot(x,y, 'o' ,x,y,xi,z,':')%在同一个图形里看他们的拟合程度

典型例题:对以下数据分别作二次,三次多项式拟合,并画出图形.
x=1:16;
y=[4, 6.4, 8, 8.4, 9.28, 9.5, 9.7, 9.86, 10, 10.2, 10.32, 10.42, 10.5, 10.55, 10.58, 10.6];
源程序:二次多项式拟合
x=1:1:16;
y=[4, 6.4, 8, 8.4, 9.28, 9.5, 9.7, 9.86, 10, 10.2, 10.32, 10.42, 10.5, 10.55, 10.58, 10.6];
a=polyfit(x,y,2)
a =
-0.0445 1.0711 4.3252
ezplot('-0.0445*x^2+1.0711*x+4.3252')
三次多项式拟合
x=1:1:16;
y=[4, 6.4, 8, 8.4, 9.28, 9.5, 9.7, 9.86, 10, 10.2, 10.32, 10.42, 10.5, 10.55, 10.58, 10.6];
a=polyfit(x,y,3)
a =
0.0060 -0.1963 2.1346 2.5952
ezplot('0.0060*x^3-0.1963*x^2+2.1346*x+2.5952')

指数曲线拟合是很麻烦的,工作量大,如果需要的话,可以调用matlab的做成的COM组件实现。即把指数曲线拟合的功能做成一个模块,在VB中可以直接调用

我就给你贴出frm文件吧。其他的工程文件也贴不出。希望对你有用。
VERSION 5.00
Object = "{5E9E78A0-531B-11CF-91F6-C2863C385E30}#1.0#0"; "MSFLXGRD.OCX"
Object = "{F9043C88-F6F2-101A-A3C9-08002B2F49FB}#1.2#0"; "COMDLG32.OCX"
Begin VB.Form Form1
Caption = "曲线拟合"
ClientHeight = 9330
ClientLeft = 60
ClientTop = 345
ClientWidth = 10590
Icon = "Form1.frx":0000
LinkTopic = "Form1"
ScaleHeight = 9330
ScaleWidth = 10590
StartUpPosition = 2 '屏幕中心
Begin VB.CommandButton Command2
Caption = "曲线拟合"
Height = 615
Left = 720
TabIndex = 12
Top = 8280
Width = 2175
End
Begin VB.TextBox Text1
Height = 975
Left = 4200
MultiLine = -1 'True
ScrollBars = 3 'Both
TabIndex = 11
Top = 8160
Width = 6015
End
Begin VB.CommandButton Command1
Caption = "打开点文件"
Height = 495
Left = 1080
TabIndex = 9
Top = 840
Width = 1695
End
Begin VB.PictureBox Picture1
AutoRedraw = -1 'True
Height = 6000
Left = 4200
ScaleHeight = 5940
ScaleWidth = 5940
TabIndex = 7
Top = 360
Width = 6000
End
Begin VB.ComboBox Combo1
Height = 300
ItemData = "Form1.frx":030A
Left = 2040
List = "Form1.frx":032F
TabIndex = 6
Text = "6"
Top = 7320
Width = 615
End
Begin VB.Frame Frame1
Caption = "插值计算"
Height = 1215
Left = 5040
TabIndex = 0
Top = 6600
Width = 4335
Begin VB.TextBox Text2
BeginProperty Font
Name = "宋体"
Size = 10.5
Charset = 134
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 375
Left = 720
TabIndex = 3
Top = 480
Width = 735
End
Begin VB.CommandButton Command3
Height = 345
Left = 1920
MaskColor = &H00FFFFFF&
Picture = "Form1.frx":0356
Style = 1 'Graphical
TabIndex = 2
Top = 480
UseMaskColor = -1 'True
Width = 340
End
Begin VB.TextBox Text3
BeginProperty Font
Name = "宋体"
Size = 10.5
Charset = 134
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 375
Left = 3120
TabIndex = 1
Top = 480
Width = 735
End
Begin VB.Label Label2
Caption = "X="
BeginProperty Font
Name = "宋体"
Size = 10.5
Charset = 134
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 375
Left = 360
TabIndex = 5
Top = 550
Width = 1215
End
Begin VB.Label Label3
Caption = "Y="
BeginProperty Font
Name = "宋体"
Size = 10.5
Charset = 134
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 255
Left = 2760
TabIndex = 4
Top = 550
Width = 255
End
End
Begin MSComDlg.CommonDialog CommonDialog1
Left = 3120
Top = 1080
_ExtentX = 847
_ExtentY = 847
_Version = 393216
End
Begin MSFlexGridLib.MSFlexGrid MSFlexGrid1
Height = 4695
Left = 480
TabIndex = 8
Top = 1680
Width = 2775
_ExtentX = 4895
_ExtentY = 8281
_Version = 393216
Rows = 21
Cols = 3
FormatString = "^记录数|^ X|^ Y"
End
Begin VB.Label Label1
Caption = "拟合次数"
BeginProperty Font
Name = "宋体"
Size = 10.5
Charset = 134
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 375
Left = 840
TabIndex = 10
Top = 7320
Width = 1215
End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit
Dim X() As Single, Y() As Single
Dim A(20, 20) As Single, M As Integer, B() As Single '最多取20次的拟合
Dim N As Integer, I As Integer, J As Integer
Dim xiaoA() As Single
Dim Xmin As Single, Xmax As Single
Dim Ymin As Single, Ymax As Single
Dim Xo As Single, Yo As Single

Private Sub ZuoDian(X() As Single, Y() As Single)
Dim XL As Single
Dim YL As Single
N = UBound(X): Picture1.Cls
Xmin = X(1): Xmax = X(1): Xo = X(1): Yo = Y(1)
Ymin = Y(1): Ymax = Y(1)
For I = 1 To N
If Xmin > X(I) Then
Xmin = X(I)
Xo = Xmin: Yo = Y(I) '后面画曲线时用到。
End If
If Xmax < X(I) Then Xmax = X(I)
If Ymin > Y(I) Then Ymin = Y(I)
If Ymax < Y(I) Then Ymax = Y(I)
Next I
XL = Xmax - Xmin: YL = Ymax - Ymin
Picture1.Scale (Xmin - XL / 10, Ymax + YL / 10)-(Xmax + XL / 10, Ymin - YL / 10)
Picture1.DrawWidth = 5
For I = 1 To N
Picture1.PSet (X(I), Y(I)), vbRed
Next I
Picture1.DrawWidth = 1
Picture1.Line (Xmin, Ymin)-(Xmax, Ymax), vbBlue, B
Picture1.Refresh
End Sub

Private Sub HuaQuXian(xiaoA() As Single)
Call ZuoDian(X, Y)

Dim Ysum As Single, Ii As Single
For Ii = Xmin To Xmax Step (Xmax - Xmin) / 100
Ysum = 0
For J = 1 To M
Ysum = Ysum + xiaoA(J) * Ii ^ (J - 1)
Next J
Picture1.Line (Xo, Yo)-(Ii, Ysum)
Xo = Ii: Yo = Ysum
Next Ii
End Sub

Private Sub Command1_Click()
Dim FileName As String
Dim Xstr As String, Ystr As String
On Error GoTo errhandle
CommonDialog1.InitDir = App.Path '设置初始路径 数据导入
CommonDialog1.FileName = "" '清除文件名
CommonDialog1.ShowOpen '显示“打开”对话框
FileName = CommonDialog1.FileName '保存文件名
If Len(CommonDialog1.FileName) > 0 Then
'File = FreeFile() '获得可用文件号
Open FileName For Input As #1 '打开文件
End If
I = 0
MousePointer = 11
Do While EOF(1) = False
I = I + 1
ReDim Preserve X(I)
ReDim Preserve Y(I)
MSFlexGrid1.Rows = I + 1
Input #1, Xstr, Ystr ' 分别输入各数据
MSFlexGrid1.TextMatrix(I, 1) = Xstr
X(I) = Val(Xstr)

MSFlexGrid1.TextMatrix(I, 2) = Ystr
Y(I) = Val(Ystr)

MSFlexGrid1.TextMatrix(I, 0) = I
Loop
Close #1: N = I '检验一下N是否对???

Call ZuoDian(X, Y)

errhandle:
MousePointer = 0
Exit Sub
MousePointer = 0
End Sub

Private Sub Command2_Click()
Dim Xh As Integer
M = Val(Combo1.Text) + 1

Erase B: Erase xiaoA: Erase A '必不可少***********

ReDim B(M): ReDim xiaoA(1 To M)
'形成方程组的各元素
A(1, 1) = N
For I = 1 To N
B(1) = B(1) + Y(I)
Next I
For J = 2 To M
For I = 1 To N
A(1, J) = A(1, J) + X(I) ^ (J - 1)
Next I
Next J
For I = 2 To M
For J = 1 To M
For Xh = 1 To N
A(I, J) = A(I, J) + X(Xh) ^ (I + J - 2)
If J = 1 Then
B(I) = B(I) + X(Xh) ^ (I - 1) * Y(Xh)
End If
Next Xh
Next J
Next I

Call JieFangCheng(A, B, xiaoA)

For I = 1 To M
Text1.Text = Text1.Text & "a" & I - 1 & "=" & xiaoA(I) & ";"
Next I
Dim Str As String: Str = "y="
For I = 1 To M '写方程
If I < M Then
Str = Str & xiaoA(I) & "x^" & I - 1 & "+"
Else
Str = Str & xiaoA(I) & "x^" & I - 1
End If
Next I
Text1.Text = Text1.Text & vbCrLf & "曲线方程:" & vbCrLf & Str

Call HuaQuXian(xiaoA)
End Sub

Private Sub Command3_Click()
Dim Xzhi As Single, Yzhi As Single
Xzhi = Val(Text2.Text)
Yzhi = 0
For J = 1 To M
Yzhi = Yzhi + xiaoA(J) * Xzhi ^ (J - 1)
Next J
Text3.Text = Yzhi
End Sub

Private Sub Form_Load()
For I = 0 To 2
MSFlexGrid1.ColAlignment(I) = 4
Next I
For I = 1 To 20
MSFlexGrid1.TextMatrix(I, 0) = I
Next I

End Sub

Private Sub JieFangCheng(A() As Single, B() As Single, X() As Single)
N = UBound(B)
Dim TempA As Single, L As Integer, K As Integer, Kk As Integer
Dim Ii As Integer, ChuShu As Single, Sum As Single
For I = 1 To N
L = 0: Kk = 0
For J = I To N
If A(J, I) = 0 Then L = L + 1
Next J
For J = I To N - L
If A(J, I) = 0 Then
Kk = Kk + 1
For K = I To N
TempA = A(J, K)
A(J, K) = A(N - Kk + 1, K)
A(N - Kk + 1, K) = TempA
Next K
TempA = B(J): B(J) = B(N - Kk + 1): B(N - Kk + 1) = TempA
End If
Next J

For Ii = I To N - L
ChuShu = A(Ii, I)
For J = I To N
A(Ii, J) = A(Ii, J) / ChuShu
Next J
B(Ii) = B(Ii) / ChuShu
Next Ii
For Ii = I + 1 To N - L
For J = I To N
A(Ii, J) = A(Ii, J) - A(I, J)
Next J
B(Ii) = B(Ii) - B(I)
Next Ii
Next I
For I = 1 To N
For J = 1 To I - 1
A(I, J) = 0
Next J
Next I

X(N) = B(N) / A(N, N)
For I = N - 1 To 1 Step -1
Sum = 0
For J = I + 1 To N
Sum = Sum + A(I, J) * X(J)
Next J
X(I) = (B(I) - Sum) / A(I, I)
Next I

End Sub

j


数学与拟合有什么关系?
直线拟合公式:y=a+bx。其中a为截距,b为斜率。最小二乘法估计参数要求观测值yi的偏差的加权平方和为最小,即:对于等精度观测值的直线拟合来说,可使下式的值最小,y=a+bx,上式分别对a、b求偏导得:整理后得到方程组,解上述方程组便可求得直线参数a和b的最佳估计值。线性拟合是曲线拟合的...

曲线拟合
其中R称为均方误差。由于计算均方误差的最小值的方法容易实现,按均方误差达到极小构造拟合曲线的方法称最小二乘法,即用数学的方法找到在最小二乘法意义下误差最小的拟合函数。设一组数据(xi,yi),i=1,2,…,m,做拟合曲线的均方误差,即设 复杂储层识别及预测 使Q(a,b)达到极小值:复杂...

如何利用spss进行曲线拟合,并得到拟合曲线方程,像y=ax+b这样的东西...
1、曲线拟合过程。2、【分析】,【回归】,【曲线估计】,选择相应变量和拟合模型,得到结果,拟合效果较好。3、利用指数模型进行预测。4、首先按照传统的操作方法,n代表了x,y的个数,所以要对n实行加权个案处理。5、这个时候再对x统计分析发现:数据显示有171个,接着进行线性回归。

用MATLAB怎么实现曲线拟合?
MATLAB软件提供了基本的曲线拟合函数的命令.1 多项式函数拟合:a=polyfit(xdata,ydata,n)其中n表示多项式的最高阶数,xdata,ydata为将要拟合的数据,它是用数组的方式输入.输出参数a为拟合多项式 的系数多项式在x处的值y可用下面程序计算.y=polyval(a,x)2 一般的曲线拟合:p=curvefit(‘Fun...

用MATLAB怎么实现曲线拟合?
y=polyval(a,x)2 一般的曲线拟合:p=curvefit(‘Fun’,p0,xdata,ydata)其中Fun表示函数Fun(p,data)的M函数文件,p0表示函数的初值.curvefit()命令的求解问题形式是 若要求解点x处的函数值可用程序f=Fun(p,x)计算.例如已知函数形式 ,并且已知数据点 要确定四个未知参数a,b,c,d.使用...

如何用matlab计算二次曲线的拟合度?
第二步:完成数据清除后,选“MODE”(模式),出现下图,从左至右分别表示普通计算、统计计算、回归计算,我们需要选“REC”,即按“3”键,选回归计算模式。在新出现的画面里选1“LIN”,进入数据输入画面。第三步:输入需要进行线性拟合的数据“x,y”,每输完一个坐标点数据按一次“M+”,表示...

同比例缩小数据,线性拟合曲线会变化吗
会。线性拟合是曲线拟合的一种形式,设x和y都是被观测的量,且y是x的函数,y=f(x,b),曲线拟合就是通过x,y的观测值来寻求参数b的最佳估计值,为正比例关系,因此,同比例缩小数据,线性拟合曲线是会变化的。

matlab最小二乘法曲线拟合怎么取?
曲线拟合\\x0d\\x0a已知离散点上的数据集,即已知在点集上的函数值,构造一个解析函数(其图形为一曲线)使在原离散点上尽可能接近给定的值,这一过程称为曲线拟合。最常用的曲线拟合方法是最小二乘法,该方法是寻找函数使得最小。\\x0d\\x0aMATLAB函数:p=polyfit(x,y,n)\\x0d\\x0a[p,s]= ...

matlab曲线拟合怎么写
y1=polyval(A,x); %计算出拟合的y值 plot(x,y,'k*',x,y1,'r-'); %画出数据对比图,黑点是原始数据,红线是拟合曲线 指定函数拟合 f=fittype('a*e^(b*x)+c'); %引号里的是你的函数模型,默认是以x为自变量,其余为待定参数 fity=fit(x,y,f) %曲线拟合,会给出拟合...

...进行曲线拟合。要求只有x大于0部分的拟合曲线。可以用curve fitting...
可以 curve fitting有个选项叫custom quation就是自定义函数 预定义的没有的话,你直接手动输入函数就行了

濠江区13568292403: 用VB进行曲线拟合 -
善衬丹仑: 你好!这是典型的最小二乘法拟合.我用的是matlab拟合:a=2.102 b=0.9912 c=-0.1502

濠江区13568292403: 曲线拟合 VB -
善衬丹仑: 创建一个窗体,在窗体上加3个按钮Command1,Command2,Command3,一个PictureBox控件名为Picture1, 在picture1中加一个Label控件,名为Label, 然后把下面代码复制进去即可: Dim Xindex() As Single Dim Yindex() As Single Dim num...

濠江区13568292403: vb中如何实现指数曲线拟合 -
善衬丹仑: 指数曲线拟合是很麻烦的,工作量大,如果需要的话,可以调用matlab的做成的COM组件实现.即把指数曲线拟合的功能做成一个模块,在VB中可以直接调用

濠江区13568292403: 请教,如何用VB编写曲线 -
善衬丹仑: 要拟合曲线绘图的话,就要用line方法用上一个点坐标和当前点坐标一起画一条直线,用很多直线就可以组成一条比较平滑的曲线

濠江区13568292403: vb函数曲线绘制程序的代码 -
善衬丹仑: Option Explicit Const STEP_PAI As Double = 0.0031415926535 Dim xisu As Double Private Sub drawPoint(Optional ByVal lngColor As Long = vbBlue) Cls Dim i As Long Dim r As Double Dim angle As Double Dim x As Double Dim y As Double...

濠江区13568292403: 关于圆弧曲线拟合的程序设计的VB程序代码应该怎么设计 -
善衬丹仑: Declare Function Arc& Lib "gdi32" (ByVal hdc As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long, ByVal X3 As Long, ByVal Y3 As Long, ByVal X4 As Long, ByVal Y4 As Long) Declare Function ArcTo& Lib ...

濠江区13568292403: 如何利用VB根据一个公式生成一条曲线啊? -
善衬丹仑: Private Sub Command1_Click() Dim i As Long Form1.Cls Form1.CurrentX = 500 Form1.CurrentY = Form1.Height - 1500 Form1.Line -(Form1.Width - 500, Form1.Height - 1500) '生成横坐标 Form1.CurrentX = 500 + (Form1.Width - 1000) / 2 Form...

濠江区13568292403: VB对一系列离散点进行曲线拟合并积分 -
善衬丹仑: 一般都是用matlab搞定的,它里面有现成的函数供使用的 典型程序解析: x=[0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1];%input xi data y=[1.978 3.28 6.16 7.08 7.34 7.66 9.56 9.48 9.30 11.2]; % input yi data n=2; % polynomial order p=polyfit(x, y, n)% ...

濠江区13568292403: vb怎么通过编程来编辑图形曲线? -
善衬丹仑: 可以通过画单个点的方式连成一条曲线.首先最好先定义坐标系 scale(x1,y1)-(x2,y2) 例如:画一条y=x^3+2的图像 范围从-2到2 那么可以这么编程 dim x#,y# scale (-2,4)-(2,-4)'这表示将窗体左上角定义为(-2,4),右下角定义为(2,-4) for x=-2 to ...

濠江区13568292403: vb画曲线 -
善衬丹仑: 楼主你好,专门为你写了一个 首先要说的是,要想连着,最好用画线的方法,不能用画点的方法 我帮你修改了你的代码里面的几个错误 对了楼主你注意一下这行:y = 150 - Sin(i / 180 * 3.1415926) * 100 之所以用150减去后面的东西,目的是得...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网