agoojje 发表于 2012-6-9 14:41:47

『跪求』【急急】vb中,如何分离文本数据并绘图?

本帖最后由 agoojje 于 2012-6-9 14:43 编辑

数据如下,绘制P--R曲线???




diddom 发表于 2012-6-9 14:48:34

本帖最后由 diddom 于 2012-6-9 15:13 编辑

別急~

Project 還真不小~{:soso_e113:}

agoojje 发表于 2012-6-9 14:50:09

diddom 发表于 2012-6-9 14:48 static/image/common/back.gif
別急~

整快半个月了,快崩溃了

马大哈 发表于 2012-6-9 22:18:56

有什么问题?想达到啥效果?我下载了代码,不知道你是想做什么呢?

agoojje 发表于 2012-6-10 07:28:40

本帖最后由 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-λ曲线即可,其他曲线不用显示。

agoojje 发表于 2012-6-10 07:38:49

p-R曲线可能需要进行曲线拟合。下边是EXCEL出图效果:

agoojje 发表于 2012-6-11 07:55:00

求大神回复{:soso_e154:}{:soso_e154:}{:soso_e154:}{:soso_e154:}{:soso_e154:}

diddom 发表于 2012-6-13 08:46:11

本帖最后由 diddom 于 2012-6-13 13:53 编辑

可以先了解一下吗?

好似要用双精度浮点数 Double Type?

N:-00.07;R:0260.3;P:0.0020;?

N = ? 怎有负号?

R = 转速吗?

P = 功率吗?

diddom 发表于 2012-6-13 09:48:04


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

agoojje 发表于 2012-6-13 10:37:27

diddom 发表于 2012-6-13 08:46 static/image/common/back.gif
可以先了解一下吗?

好似要用双精度浮点数 Bouble Type?


N代表转矩T(有负号)。
R转速。
p功率。

agoojje 发表于 2012-6-13 10:40:41

diddom 发表于 2012-6-13 09:48 static/image/common/back.gif
Private Type Data
    N As String
    R As String


大神能帮我整合到我上传的源码里吗?

diddom 发表于 2012-6-13 13:38:31

本帖最后由 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:27:23

本帖最后由 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:}

agoojje 发表于 2012-6-13 16:39:56

马大哈 发表于 2012-6-9 22:18 static/image/common/back.gif
有什么问题?想达到啥效果?我下载了代码,不知道你是想做什么呢?

跪求管理员给“diddom”会员颁发“乐于助人勋章”。

diddom 发表于 2012-6-13 16:53:55

本帖最后由 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


agoojje 发表于 2012-6-13 17:40:32

diddom 发表于 2012-6-13 16:53 static/image/common/back.gif
管理员给我一年的核心会员了

已经是给我最好的礼物了


由于风力机功率和转速波动,在近似计算中就求一下“两者的”平均值就行啦。
PS:大神太谦虚啦。

diddom 发表于 2012-6-13 19:32:14


我必须先休息一下, 希望你也早点歇息

我喜欢半夜写程式 (没有吵杂声)

我醒来还是会以你这主题为先

我这阵子在弄 NDIS, 属於 firewall 的部分

NDIS不重要, 你的比较重要

我好怕耽误你的 Project



oopww 发表于 2012-6-13 20:01:28

变初级会员了!~~~
你这个用matlab绘制最还了!~~

admin 发表于 2012-6-13 20:40:15

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.发一篇原创文章和一个(半)原创的代码

当初把你加入核心会员应该是管理员误操作。

agoojje 发表于 2012-6-13 22:51:05

diddom 发表于 2012-6-13 19:32 static/image/common/back.gif
我必须先休息一下, 希望你也早点歇息

我喜欢半夜写程式 (没有吵杂声)


多谢大神

diddom 发表于 2012-6-14 08:25:44

本帖最后由 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次方,不知道

没实验不知道准不准, 能不能用








diddom 发表于 2012-6-14 08:41:13


下面是一个一元二次方程式的曲线拟合源代码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 08:44:10

本帖最后由 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:}

agoojje 发表于 2012-6-14 08:51:21

diddom 发表于 2012-6-14 08:41 static/image/common/back.gif
下面是一个一元二次方程式的曲线拟合源代码

多谢大神

agoojje 发表于 2012-6-14 09:03:32

本帖最后由 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:06:28

本帖最后由 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组件实现样条曲线拟合.   对于现在数据采集重绘处理,很多情况下都用到了曲线重绘,而曲线生成的方法也有多种最简单的一种就是两点一线法,简单来说就是对每个采集点做直线连接,使到其趋向一曲线,这种方法的好处是保证数据的真实性,但同时也引申出很多问题.首先,采集点必须要足够多,否则的话就成了线段组,而并非曲线了,这样对于一些无法多点采集的技术领域,或者采集成本很高的技术领域来说,便无法满足其分析需求了.因此,产生了样条曲线的计算方法.   ......



diddom 发表于 2012-6-14 09:16:41

agoojje 发表于 2012-6-14 09:03 static/image/common/back.gif
大神先给我一个没拟合的P-R曲线的整合源程序吧。
今天有急用。

我试看看, 但要今天可能有困难

因为我连第三方绘图控件都还没熟悉

oopww 发表于 2012-6-14 13:08:27

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 16:51:35

本帖最后由 diddom 于 2012-6-14 17:01 编辑

绘图的部分我已经写好了

但没有曲线拟合,你先看一下

用 3m8.txt 当试验

在静态的部分,先选择档案,然後再"读取数据并计算"

再到 Pn曲线的绘点按钮按一下



我顺便找了几个 PlotLineControl.ocx 这个 AC(Activex Control) 的 usage sample

放在 Form4~Form6,你可以玩玩看

diddom 发表于 2012-6-16 12:10:43

try it

diddom 发表于 2012-6-17 02:59:00

希望你別被我是不是核心會員所影響

至少我們在這快樂一起討論程式是怎樣及如何寫{:soso_e113:}



页: [1]
查看完整版本: 『跪求』【急急】vb中,如何分离文本数据并绘图?