『跪求』【急急】vb中,如何分离文本数据并绘图?
本帖最后由 agoojje 于 2012-6-9 14:43 编辑数据如下,绘制P--R曲线???
本帖最后由 diddom 于 2012-6-9 15:13 编辑
別急~
Project 還真不小~{:soso_e113:} diddom 发表于 2012-6-9 14:48 static/image/common/back.gif
別急~
整快半个月了,快崩溃了 有什么问题?想达到啥效果?我下载了代码,不知道你是想做什么呢? 本帖最后由 agoojje 于 2012-6-10 07:31 编辑
马大哈 发表于 2012-6-9 22:18 static/image/common/back.gif
有什么问题?想达到啥效果?我下载了代码,不知道你是想做什么呢?
只做“静态”的。代码里有个“原始数据”文件夹,其中“2m8.txt,3m8.txt,4m8.txt,5m8.txt,6m8.txt一直到13m8.txt”是一个系列,其中“2,3,4,5,6到13”表示风速(用V表示),m8表示8个叶片,上述一个系列的每个text文本绘制一个P-R曲线并找出P-R曲线的最大P(Pmax)和对应的最大R(Rmax),P表示功率,R(代码里用n表示)表示转速。每个txt计算一个Cp和λ值,得到一个(Cp,λ)点(一个系列共12个这样的点用来绘制Cp-λ曲线),Cp=PMax/(0.5*ρ*A*V*V)其中ρ为空气密度(常数ρ=1.226),A为叶轮面积(常数A=0.283).V表示风速(计算2m8.txt时,V=2);λ=(3.1415926*0.3*Rmax)/(30*V)其中V为风速。只要绘出Cp-λ曲线即可,其他曲线不用显示。 p-R曲线可能需要进行曲线拟合。下边是EXCEL出图效果:
求大神回复{:soso_e154:}{:soso_e154:}{:soso_e154:}{:soso_e154:}{:soso_e154:} 本帖最后由 diddom 于 2012-6-13 13:53 编辑
可以先了解一下吗?
好似要用双精度浮点数 Double Type?
N:-00.07;R:0260.3;P:0.0020;?
N = ? 怎有负号?
R = 转速吗?
P = 功率吗?
Private Type Data
N As String
R As String
P As String
End Type
Dim FileName As String
Private Sub Command1_Click()
On Error Resume Next
Dim i As Long
Dim StrData As String
Dim strLine
Dim strSplit
Dim AryData(1 To 500) As Data
With CommonDialog1
.DialogTitle = "Open"
.Filter = "Text Files (*.txt)|*.txt|All Files (*.*)|*.*"
.ShowOpen
End With
FileName = CommonDialog1.FileName
If FileName = "" Then Exit Sub
Open FileName For Input As #1
Input #1, StrData
Close #1
strLine = Split(StrData, "N:")
For i = 1 To UBound(strLine)
strSplit = Split(strLine(i), ";")
AryData(i).N = strSplit(0)
AryData(i).R = strSplit(1)
AryData(i).P = strSplit(2)
Next
'至此 3m8.txt 资料已经分离完毕
End Sub diddom 发表于 2012-6-13 08:46 static/image/common/back.gif
可以先了解一下吗?
好似要用双精度浮点数 Bouble Type?
N代表转矩T(有负号)。
R转速。
p功率。 diddom 发表于 2012-6-13 09:48 static/image/common/back.gif
Private Type Data
N As String
R As String
大神能帮我整合到我上传的源码里吗? 本帖最后由 diddom 于 2012-6-13 15:21 编辑
agoojje 发表于 2012-6-13 10:40 static/image/common/back.gif
大神能帮我整合到我上传的源码里吗?
好的~
但有些细节我希望能了解
你在6楼贴的那张 Excel 输出的图 (p-R曲线图), x轴代表什麽, y轴代表什麽
方便给出那张图 Excel 的VBA吗?
最大P(Pmax)和对应的最大R(Rmax)有数学公式可以计算吗?
还是只要比对出该 Text File 中最大的 P 值(功率)就可以了?
然後再找出该笔资料所对应的最大R(Rmax)
至於 Cp 和 lambda 你已经有贴出数学公式, 转变成 VB 这很简单
对了, 你下下次的上来BBS的时间是几点,早上还是晚上
本帖最后由 agoojje 于 2012-6-13 16:35 编辑
diddom 发表于 2012-6-13 13:38 static/image/common/back.gif
好的~
但有些细节我希望能了解
1.6楼贴的那张 Excel 输出的图 (p-R曲线图), x轴代表R(转速), y轴代表P(功率)。
2.最大P(Pmax)和对应的最大R(Rmax)只要比对出该 Text File 中最大的 P 值(功率)就可以了。(但最好能找出“P-R拟合曲线”的顶点),P-R拟合曲线即6楼贴的那张 Excel 输出的图内的那条黑线。
3.我上BBS的时间基本上是早上6点,大概1个小时刷新一次。
4.excel的VBA,我不太了解,但可以把excel处理的实验数据发给你。
{:soso_e154:} 马大哈 发表于 2012-6-9 22:18 static/image/common/back.gif
有什么问题?想达到啥效果?我下载了代码,不知道你是想做什么呢?
跪求管理员给“diddom”会员颁发“乐于助人勋章”。 本帖最后由 diddom 于 2012-6-13 17:23 编辑
agoojje 发表于 2012-6-13 16:39 static/image/common/back.gif
跪求管理员给“diddom”会员颁发“乐于助人勋章”。
管理员给我一年的核心会员了
已经是给我最好的礼物了
agoojje 感谢你对我的抬爱^^
再问一下
在 3m8.txt 里面
有两笔最大功率
N:-00.09;R:0242.3;P:0.0025;?
N:-00.09;R:0242.3;P:0.0025;?
这样最大R是 0242 吗?
还是
N:-00.08;R:0261.8;P:0.0022;?
N:-00.08;R:0261.8;P:0.0022;?里面的 0261 ?
抱歉喔, 因为我笨笨的, 才会一直问{:soso_e113:}
我看我必须先了解你刚刚发的 2m8处理.rar
diddom 发表于 2012-6-13 16:53 static/image/common/back.gif
管理员给我一年的核心会员了
已经是给我最好的礼物了
由于风力机功率和转速波动,在近似计算中就求一下“两者的”平均值就行啦。
PS:大神太谦虚啦。
我必须先休息一下, 希望你也早点歇息
我喜欢半夜写程式 (没有吵杂声)
我醒来还是会以你这主题为先
我这阵子在弄 NDIS, 属於 firewall 的部分
NDIS不重要, 你的比较重要
我好怕耽误你的 Project
变初级会员了!~~~
你这个用matlab绘制最还了!~~ oopww 发表于 2012-6-13 20:01 static/image/common/back.gif
变初级会员了!~~~
你这个用matlab绘制最还了!~~
看核心会员要求:http://www.m5home.com/bbs/thread-4777-1-1.html
申请条件:
1.发两篇原创的文章
2.发两个(半)原创的代码
3.发一篇原创文章和一个(半)原创的代码
当初把你加入核心会员应该是管理员误操作。 diddom 发表于 2012-6-13 19:32 static/image/common/back.gif
我必须先休息一下, 希望你也早点歇息
我喜欢半夜写程式 (没有吵杂声)
多谢大神 本帖最后由 diddom 于 2012-6-14 09:22 编辑
我们也用 VB 来玩一下 PR曲线要吗?
我想实验一下曲线拟合
我刚刚收集了一些关於曲线拟合的函数
'****************************************************************************************************'
' 編程世界:www.ibiancheng.cn
' X()------Double 實型一維數組,長度為 n 。存放給定 n 個數據點的 X 坐標。 **
' Y()------Double 實型一維數組,長度為 n 。存放給定 n 個數據點的 Y 坐標。
' n-------Integer 變量。給定數據點的個數。 **
' a()------Double 實型一維數組,長度為 m 。返回 m-1 次擬合多項式的 m 個系數。
' m-------Integer 變量。擬合多項式的項數,即擬合多項式的最高次數為 m-1。
' 要求 m<=n 且m<=20。若 m>n 或 m>20 ,則本函數自動按 m=min{n,20} 處理。
' rdblAverageX--Double 變量,返回給定n個數據點的 X 坐標的平均值
' dt()------Double 實型一維數組,長度為 3。其中:
' dt(0) 返回擬合多項式與數據點誤差的平方和;
' dt(1) 返回擬合多項式與數據點誤差的絕對值之和;
' dt(2) 返回擬合多項式與數據點誤差絕對值的最大值。
'*****************************************************************************************************'Public Sub Iapcir(X() As Double, _
Y() As Double, _
ByVal n As Integer, _
ByRef a() As Double, _
ByVal m As Integer, _
ByRef rdblAverageX As Double, _
ByRef dt() As Double)
Dim I As Integer
Dim J As Integer
Dim K As Integer
Dim Z As Double
Dim P As Double
Dim C As Double
Dim G As Double
Dim Q As Double
Dim D1 As Double
Dim D2 As Double
Dim S(19) As Double
Dim T(19) As Double
Dim B(19) As Double
For I = 0 To m - 1
a(I) = 0
Next I
If m > n Then m = n
If m > 20 Then m = 20
Z = 0#
For I = 0 To n - 1
rdblAverageX = rdblAverageX + X(I)
Z = Z + X(I) / (1# * n)
Next I
rdblAverageX = rdblAverageX / n
B(0) = 1#
D1 = 1# * n
P = 0#
C = 0#
For I = 0 To n - 1
P = P + (X(I) - Z)
C = C + Y(I)
Next I
C = C / D1
P = P / D1
a(0) = C * B(0)
If m > 1 Then
T(1) = 1#
T(0) = (-1) * P
D2 = 0#
C = 0#
G = 0#
For I = 0 To n - 1
Q = X(I) - Z - P
D2 = D2 + Q * Q
C = C + Y(I) * Q
G = G + (X(I) - Z) * Q * Q
Next I
C = C / D2
P = G / D2
Q = D2 / D1
D1 = D2
a(1) = C * T(1)
a(0) = C * T(0) + a(0)
End If
For J = 2 To m - 1
S(J) = T(J - 1)
S(J - 1) = (-1) * P * T(J - 1) + T(J - 2)
If J >= 3 Then
For K = J - 2 To 1 Step -1
S(K) = (-1) * P * T(K) + T(K - 1) - Q * B(K)
Next K
End If
S(0) = (-1) * P * T(0) - Q * B(0)
D2 = 0#
C = 0#
G = 0#
For I = 0 To n - 1
Q = S(J)
For K = J - 1 To 0 Step -1
Q = Q * (X(I) - Z) + S(K)
Next K
D2 = D2 + Q * Q
C = C + Y(I) * Q
G = G + (X(I) - Z) * Q * Q
Next I
C = C / D2
P = G / D2
Q = D2 / D1
D1 = D2
a(J) = C * S(J)
T(J) = S(J)
For K = J - 1 To 0 Step -1
a(K) = C * S(K) + a(K)
B(K) = T(K)
T(K) = S(K)
Next K
Next J
dt(0) = 0#
dt(1) = 0#
dt(2) = 0#
For I = 0 To n - 1
Q = a(m - 1)
For K = m - 2 To 0 Step -1
Q = a(K) + Q * (X(I) - Z)
Next K
P = Q - Y(I)
If Abs(P) > dt(2) Then
dt(2) = Abs(P)
End If
dt(0) = dt(0) + P * P
dt(1) = dt(1) + Abs(P)
Next I
End Sub这是网路上公版的曲线拟合函数
它好像可以算到 N项M次方,不知道
没实验不知道准不准, 能不能用
下面是一个一元二次方程式的曲线拟合源代码Public Sub qxnh2() '最小二乘曲線擬合y=a+bx+cx^2
Dim B, C, m, n, a(1 To 10, 1 To 10) As Double
Dim I, J, K, d(10) As Double
'm = 14 '9 'm為數據個數
For I = 1 To 10 Step 1
d(I) = 0
Next I
For I = 1 To m Step 1
d(1) = d(1) + X(I)
a(1, 2) = d(1)
d(2) = d(2) + X(I) ^ 2
a(1, 3) = d(2)
d(3) = d(3) + Y(I)
a(1, 4) = d(3)
d(4) = d(4) + X(I) ^ 3
a(2, 3) = d(4)
d(5) = d(5) + X(I) * Y(I)
a(2, 4) = d(5)
d(6) = d(6) + X(I) ^ 4
a(3, 3) = d(6)
d(7) = d(7) + X(I) ^ 2 * Y(I)
a(3, 4) = d(7)
Next I
a(1, 1) = m
a(2, 1) = a(1, 2)
a(2, 2) = a(1, 3)
a(3, 1) = a(1, 3)
a(3, 2) = a(2, 3)
n = 3 'n為行數
m = 4 'm為列數
For K = 1 To n - 1 Step 1
For I = K + 1 To n Step 1
For J = K + 1 To m Step 1
a(I, J) = a(I, J) - a(I, K) * a(K, J) / a(K, K)
Next J
Next I
Next K
Z(n) = a(n, m) / a(n, n)
For K = n - 1 To 1 Step -1
Z(K) = 0
For J = n To K + 1 Step -1
Z(K) = Z(K) + a(K, J) * Z(J)
Next J
Z(K) = (a(K, m) - Z(K)) / a(K, K)
Next K
xs(1) = Z(1)
xs(2) = Z(2)
xs(3) = Z(3)
xs(4) = 0
End Sub 本帖最后由 diddom 于 2012-6-14 09:01 编辑
oopww 发表于 2012-6-13 20:01 static/image/common/back.gif
变初级会员了!~~~
你这个用matlab绘制最还了!~~
我也是觉得用Matlab比较方便
不过 LZ 想用 VB控件实现,
所以玩看看, 玩得起来就开心一下{:soso_e113:}
有没有兴趣要顺便加入这 project{:soso_e113:} diddom 发表于 2012-6-14 08:41 static/image/common/back.gif
下面是一个一元二次方程式的曲线拟合源代码
多谢大神 本帖最后由 agoojje 于 2012-6-14 09:05 编辑
diddom 发表于 2012-6-14 08:44 static/image/common/back.gif
我也是觉得用Matlab比较方便
不过 LZ 想用 VB控件实现,
大神先给我一个没拟合的P-R曲线的整合源程序吧。
今天有急用。 本帖最后由 diddom 于 2012-6-14 09:13 编辑
agoojje 发表于 2012-6-14 08:51 static/image/common/back.gif
多谢大神
别一直谢我, Project 都还没完成呢 ><"
刚刚无意间发现的曲线拟合绘制控件
有上传到 TotalVirus 验毒了,安全没毒
如果你想使曲线拟合能够很方便快捷,请使用Xeden的CtlPointsCurve.dll组件
http://blog.csdn.net/Xeden
摘要:使用自制CtlPointsCurve.dll组件实现样条曲线拟合. 对于现在数据采集重绘处理,很多情况下都用到了曲线重绘,而曲线生成的方法也有多种最简单的一种就是两点一线法,简单来说就是对每个采集点做直线连接,使到其趋向一曲线,这种方法的好处是保证数据的真实性,但同时也引申出很多问题.首先,采集点必须要足够多,否则的话就成了线段组,而并非曲线了,这样对于一些无法多点采集的技术领域,或者采集成本很高的技术领域来说,便无法满足其分析需求了.因此,产生了样条曲线的计算方法. ......
agoojje 发表于 2012-6-14 09:03 static/image/common/back.gif
大神先给我一个没拟合的P-R曲线的整合源程序吧。
今天有急用。
我试看看, 但要今天可能有困难
因为我连第三方绘图控件都还没熟悉
admin 发表于 2012-6-13 20:40 static/image/common/back.gif
看核心会员要求:http://www.m5home.com/bbs/thread-4777-1-1.html
当初把你加入核心会员应该是管理员误 ...
。。。。
当初把你加入核心会员应该是管理员误操作。。。
没事了!~~~
你们慢慢玩啊!~~我只是围观者!~~但是你们当初失误也太大了吧! 本帖最后由 diddom 于 2012-6-14 17:01 编辑
绘图的部分我已经写好了
但没有曲线拟合,你先看一下
用 3m8.txt 当试验
在静态的部分,先选择档案,然後再"读取数据并计算"
再到 Pn曲线的绘点按钮按一下
我顺便找了几个 PlotLineControl.ocx 这个 AC(Activex Control) 的 usage sample
放在 Form4~Form6,你可以玩玩看 try it
希望你別被我是不是核心會員所影響
至少我們在這快樂一起討論程式是怎樣及如何寫{:soso_e113:}
页:
[1]