QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 21775|回复: 12
打印 上一主题 下一主题

[分享]插值软件langrang

[复制链接]
字体大小: 正常 放大
ilikenba 实名认证       

1万

主题

49

听众

2万

积分

  • TA的每日心情
    奋斗
    2024-6-23 05:14
  • 签到天数: 1043 天

    [LV.10]以坛为家III

    社区QQ达人 新人进步奖 优秀斑竹奖 发帖功臣

    群组万里江山

    群组sas讨论小组

    群组长盛证券理财有限公司

    群组C 语言讨论组

    群组Matlab讨论组

    跳转到指定楼层
    1#
    发表于 2005-3-20 11:55 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta

    软件名称:EXCEL自定义插值函数插值计算数值计算 - M0 ?) N: I- R% _( m E版本号: 04y09m28 & K! ^, w0 \9 x% ]8 V分类: 工程设计应用 0 O$ T: v4 r1 H; L7 f5 V2 a. b; P性质: 免费软件8 j& h1 N- @/ W) t 使用说明:

    & R( W; w1 s2 @& Q M# T5 A

    人们对EXCEL普遍熟悉的功能是表图的处理,不太知道其在工程计算(如锅炉设计计算)中的应用。复杂的工程计算常常用专业编程语言(Fortran、C、Pascal 等)来编制计算程序解决,用专业编程语言编制工程计算程序往往有下面二个缺点: ' J3 R* Y: o8 Z! \+ z2 d6 W , m4 ?. O% c- u7 J 1) 编程语言专业性强,一般工程技术人员难以掌握,由这些专业编程语言编制的计算应用程序的维护、修改、升级都比较困难。

    ; |% _/ K: S4 E7 `8 B

    2) 由专业编程语言编制的工程计算应用程序人机界面不友好,常常需要复杂的输入前、输出后处理。

    & A1 e0 ]% K0 U/ c# W

    EXCEL每一个单元格就是一个电子表格,很容易进行一般的加、减、乘、除、乘方、开方,而三角函数、指数函数在EXCEL中可以直接引用内部函数。用EXCEL编制一般的工程计算程序还需解决的有以下两个问题:(1)循环计算,(2)表、单曲线、曲线组的查找(如:锅炉设计计算中的焓值)。对于问题(1)循环计算,EXCEL在工具菜单中提供了两个命令:单变量求解和规划求解,利用这两条命令很容易解决问题(1)。对于问题(2)表、曲线的查找,EXCEL没有提供现成的函数,但也可用VLOOKUP、MATCH、IF、OFFSET等函数的组合勉强近视解决,本文重点介绍表、曲线的查找自定义函数的定义及使用。2 t) w& G H( \9 t / Z# K; Y# ^2 b8 [# r1 ] 为了更好地解决曲线查找的问题,应用C++程序设计语言,用拉格朗日插值计算法在EXCEL中建立了自定义函数,单曲线插值函数TWLQ(变量,"带路径的保存数据的文件名"),曲线组插值函数THLQ(变量1,变量2,"带路径的保存数据的文件名")。单曲线插值函数、曲线组插值函数的"带路径的保存数据的文件"包含着特定对映表、曲线的信息和计算精度的要求 (文件为Notepad编辑的txt文件) 。 x3 {4 V8 y/ Z, X, E5 E2 R 单曲线lagrange插值函数:double twlq(double x,char* filename); 2 ~9 A2 w9 e& J$ G4 X double twlx(double q,char* filename);- y! x% _$ V q! c1 H! f1 F 曲线组lagrange插值函数: : k |/ k5 z1 `9 c double thlq(double x,double y,char* filename); - e' n- ]7 O) E# N6 D1 ^- B! [ double thlx(double y,double q,char* filename); # Q5 ]7 f6 _9 ~% }" k double thly(double x,double q,char* filename);。

    * V( e- g; A3 l6 o, Y) y7 g

    例:单曲线插值函数 "带路径的保存数据的文件"结构如下:- D _, y& i& X' [ p2 ~ @ Description @ 9 \, y0 r' I) C n, nsel;4 M* n9 T6 e) ~# z' l x[0],x[1], x[2],··, x[n-2],x[n-1];$ @* {1 G/ m" I( G* \4 S$ F2 y q[0],q[1], q[2],··, q[n-2],q[n-1]; ! F% C8 h& j4 ^0 E- F! U0 v, j& TMinX=0.7,MaxX=0.9,OverRangeAlm=1,X=电压,XUnit=mv,Q=电流,QUnit=mA

    0 |; c$ U9 e& H; r7 \4 P: r" A

    注解:5 Y( o/ _6 q. H5 q1 m Description:用户自定义描述字符串(Description中不可有@符号); ' G* W6 m' R" Z" H5 a+ ` n: 总插值点个数;" [$ i* @3 {- h4 b nsel:实际参与插值计算的插值点个数; ) ?* b0 k( v6 U# w8 F MinX=0.7,MaxX=0.9 取值范围; ' `/ Y( j c p0 U& q+ J( Q8 P OverRangeAlm=1 越限报警 1:报, 0:不报; x' X! O6 P( o+ P F5 X X=电压,XUnit=mv,变量名称,单位。

    6 U } X- S1 v* s7 M

    ****结论: / ~# w( O) y% s+ W$ i6 R l)图形化界面的插值函数数据文件生成器 LCZMaker 方便快捷生成单曲线或曲线组插值函数数据文件。* s; _! D$ j' H# } 2)应用EXCEL自定义插值函数,在EXCEL中进行工程计算编程极为便利,比专业编程语言程序设计更易学易用、直观明了,用EXCEL编制的工程计算应用程序更易维护、修改、升级。 - ]$ G, v1 Y7 }/ n+ m 3) EXCEL本身长于表格制作,在EXCEL中进行工程计算编程人机界面友好,输入前、输出后处理方便简单。 - B) ?1 `9 d% R4 e | 4)在某大型锅炉厂电站锅炉性能设计计算中已显神力。

    * M8 y9 ~/ ], d7 N2 C0 }' l: B7 i, `/ x

    附含壁温计算,强度计算,热电偶/阻,水阻力,烟气阻力,蒸汽性质等现成数据。

    1 g0 o: ^8 V. p* X$ P k0 {

    [分享]插值软件langrang.zip

    419.84 KB, 下载次数: 85, 下载积分: 体力 -2 点

    [分享]插值软件langrang

    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持1 反对反对0 微信微信
    ww991616        

    0

    主题

    3

    听众

    17

    积分

    升级  12.63%

    该用户从未签到

    新人进步奖

    回复

    使用道具 举报

    ft12345 实名认证       

    0

    主题

    0

    听众

    13

    积分

    升级  8.42%

    该用户从未签到

    自我介绍
    200 字节以内

    不支持自定义 Discuz! 代码
    回复

    使用道具 举报

    0

    主题

    3

    听众

    14

    积分

    升级  9.47%

    该用户从未签到

    自我介绍
    爱打羽毛球的程序员

    1. $ e2 V\" H$ u\" L* K
    2. /* TODO: Lagrange interpolating , W6 o  L7 J# ~; J\" A2 i
    3. *
      ; d5 F- i6 T' h9 `* k) D' c
    4. * For example, if lg2.71 = 0.4330, lg2.72 = 0.4346, then lg2.718 = ?6 A( l$ a! h1 t) ]; f
    5. * In this situation, it could be solved via lagrange interpolating
      0 N+ Z9 E- `2 R0 G8 Z/ _' K$ b
    6. *4 w& o$ Z; M/ s5 d5 C. S
    7. * */. V( C/ H7 k. Z8 T  P: k+ {

    8. ) r7 E\" E. |6 \  p
    9. #include <stdio.h>
      : j' K0 s; \6 X7 v
    10. #include <stdlib.h>& _$ [/ f! {) }; t\" k
    11. #include <string.h>& \1 x1 H  o4 S\" [- r2 q
    12. \" _8 \1 t8 E$ L. D
    13. #define DEBUG 0& h7 Z) I) Y  h4 W/ @

    14. ) j2 `2 K' B$ c3 x# @2 n
    15. static float m_p = 0.5635;& k- F6 V8 |  s! F- X& M
    16. static char *m_xi = NULL;
      + J, G3 x! e% S7 |
    17. static char *m_yi = NULL;0 k. Q. R& K2 n, ^+ ]; S( x
    18. static float m_arr[] = {};
      5 \6 Q1 I4 F8 }0 Z
    19. static unsigned int m_n = 0;
      9 [5 U% w% r\" ?& K
    20. ) p% K9 H. ^0 K0 I4 ^
    21. static void m_lagrange_interpolating_usage();8 p$ A. M3 _' b' S* [
    22. static int m_lagrange_interpolating_set_n_arr();
      ; _4 p1 O, N' a/ P
    23. static float m_lagrange_interpolating();$ b6 u1 _/ K$ s1 y

    24. . q2 ~: |, m0 }; S4 Q8 g9 W
    25. static void ; o& {3 T3 v- W# m
    26. m_lagrange_interpolating_usage()
      ' I2 O2 {5 w* m. w6 Y1 s
    27. {
      . s  O+ q5 v' ~7 ]% y: C
    28.   printf("Lagrange Interpolating Usage:\n");5 m5 N7 G2 |1 [) s$ H* i
    29.   printf("bin/li -p ** -x ** -y **\n");4 Q8 z6 F( H. M, V( j. J+ s
    30.   printf("-p 0.5635\n");
      9 d- ?& p$ r/ K$ I: Q( y
    31.   printf("-x 0.56160,0.56280,0.56401,0.56521\n");0 l. j. Z) O2 l4 p) t0 e, R
    32.   printf("-y 0.82741,0.82659,0.82577,0.82495\n");% c: d& O9 D3 W4 t0 u) p
    33. }
      , c9 d# E0 U' q5 U: b
    34. 4 r/ f$ D# X3 R( o: W
    35. static int
      - @9 d% K0 l& S2 Q0 U/ ~
    36. m_lagrange_interpolating_set_n_arr()
      2 _( u  S2 ~- y9 i  y
    37. {
      ) x4 S# s3 ~) [0 p9 U& |$ Y
    38.   int xi_n = 0;$ m2 [7 d6 S- z5 j1 d
    39.   int yi_n = 0;
      7 z; A- {5 l2 G8 D
    40.   int n = 0;# ]6 _# g+ D9 j
    41.   char *token = NULL;7 |0 G4 z4 l; a3 w! Q% Y$ i
    42.   const char *delim = ",";* y0 u% G. P1 m$ `0 k: E

    43. 2 H2 q+ N- ]& i
    44.   token = strtok(m_xi, delim);5 ~\" Y# f' x% M2 n
    45.   while (token)# b5 W; Y7 q. b. R# a\" Y6 P8 O
    46.   {
      $ ?( n/ @$ Y. Y5 ~7 G
    47.     xi_n++;
      ) [\" F6 D0 p5 Y6 u. d! k  o. a6 }
    48.     n++;
      ' f; ]7 I# Q5 R; M- W+ _& r6 u* ^
    49.     m_arr[n] = (float) atof(token);
      3 E( b8 Y1 I/ e2 I3 e1 {
    50.     token = strtok(NULL, delim);) I3 X3 H# ~& R# B& y6 L: j
    51.   }
      : G( r; X+ m6 }% z

    52. - t0 b2 y* h, v\" Y0 I7 d
    53.   token = strtok(m_yi, delim);
        J1 t4 `! Z2 D0 X4 I4 v' Y# x
    54.   while (token)
      ; T4 F2 q3 F# d0 \3 ^\" u; u: p
    55.   {
      ' H9 o1 V, m8 F. V\" O
    56.     yi_n++;
      5 \# Q/ Q% @# M4 @( ?4 R. F$ ^
    57.     n++;, i  B; t  b, S6 v' \6 I1 I) H  h
    58.     m_arr[n] = (float) atof(token);$ b  P9 t3 Q7 M0 R% ?/ f! A
    59.     token = strtok(NULL, delim);4 r  N4 |& K( }# z  B: |1 X
    60.   }
      & q: B& u9 ^) }7 H! i; G+ R; S2 r
    61.   
      , P5 i# o* {3 X
    62.   if (xi_n != yi_n)
      ) g/ q5 _# W* k
    63.   {
        E0 |) ^  G8 c
    64.     return 0;
      9 x* p4 D- L5 M
    65.   }
      + ~' `6 h, z0 d6 Y
    66. - G- y. B  A! W9 u0 D: [
    67.   m_n = xi_n = yi_n;2 ~- J* O( M0 {/ W7 p\" ^* r
    68. 3 f& c9 `3 n* A2 a# C$ k# G6 o
    69.   return 1;5 x* G6 J- z' j  v
    70. }
      / p- v0 \' T1 W# J+ D& M7 {
    71. ' |% f1 T* W- p1 k/ H$ {
    72. static float 0 u4 r0 b4 E0 X1 c
    73. m_lagrange_interpolating() & Q# o$ Z; b4 c0 @8 F. H0 V
    74. {; `# Q8 i& f& j3 {. X0 \
    75.   float l = 0.00000;& x) f' f2 @/ P) d- d* [. f* v
    76.   float li;$ V- {9 Y( L& o, A0 i
    77.   int i;5 E# Z$ t+ F* `
    78.   int j;
      7 C9 ?  v' d! O0 ~7 s+ }- L
    79. 4 e/ k4 C% {' m$ w$ j2 I
    80. #if DEBUG
      \" P. F' o8 h2 q* z5 p8 g
    81.   printf("DEBUG at %d: enable debug mode\n", __LINE__);
      * u& x- u7 ]0 R5 J: T% g
    82.   unsigned int m_n = 3;
      6 `, }# v3 n& \* ~$ N# R' K
    83.   float m_p = 0.5635;- ?- c* a* `4 p9 u; C* ?$ `
    84.   float m_x[] = {0.56160, 0.56280, 0.56401, 0.56521};
      ; \9 O1 r! z1 L: W
    85.   float m_y[] = {0.82741, 0.82659, 0.82577, 0.82495};( R: L$ E. D! s+ `: M8 b
    86.   2 S9 f- h2 i5 u1 \  D
    87.   for (i = 0; i < m_n; i++)4 A) \% }0 N4 x2 {) G4 s0 }5 _
    88.   {0 W; W4 @0 W2 K! z
    89.     li = 1.0000000;) E9 W; X! J3 M- ?$ K' h
    90.     for (j = 0; j < m_n; j++)
      5 f: `* v0 H( J/ ^
    91.     {
      + `6 ]+ I4 v$ r\" Y  d2 h
    92.       if (j != i)
      2 ^4 c: ~! O/ P- w/ X. h+ B1 A
    93.       {
      , {8 Z0 b7 L\" n- S! }+ f- J* k
    94.         li = li * (m_p - m_x[j]) / (m_x[i] - m_x[j]);
      , W8 W+ K\" E+ L. d9 t
    95.       }. k5 o+ [! ^' {# {4 |1 R; H
    96.     }
      : `5 E  u/ T( H) h
    97.     l = l + li * m_y[i];  {( o2 F6 I+ d% u6 j
    98.   }
      : b+ ]/ C1 b! o1 Z
    99. #else
      1 f, U. K. ~; u9 c% R  y) ~4 X
    100.   if (!m_lagrange_interpolating_set_n_arr())
      0 X) Q: h/ O\" n
    101.   {& A! D' A2 d& W; t* a: ?* n6 g
    102.     printf("Error: xi and yi counter is diff\n");
      \" L8 U% `+ t3 A( u
    103.    
      : p- l% a8 A) r8 o
    104.     return 0;
      + N7 Z- u# p( W% q
    105.   }* j% d9 `\" w& a4 w/ k& c( L4 l5 a

    106. 8 ^# h+ p1 y6 k* G9 M+ X
    107.   for (i = 0; i < m_n; i++)
      ! ^# e9 v% W: e1 E% E$ X# n
    108.   {
      % `  z5 _4 h& P
    109.     li = 1.0000000;2 x% a# r: ?% q! s- i
    110.     for (j = 0; j < m_n; j++) # C2 _\" a. u. v$ ]% }; j+ h% w' ~) y
    111.     {% e' Z% x  }& I, p' }
    112.       if (j != i) 2 ~+ g: a: e0 G$ G4 K  ^& o8 Q
    113.       {
      ' u$ Y. d* n  c  ?& J+ f4 ^# s4 J
    114.         li = li * (m_p - m_arr[j + 1]) / (m_arr[i + 1] - m_arr[j + 1]);) \9 P  `, Q* C5 s
    115.       }' B; T0 [8 Y7 ]+ @
    116.     }$ P% Q9 X9 e+ w0 I- F, a$ O1 U
    117.     l = l + li * m_arr[i + m_n + 1];\" w, u/ T( ^/ `( q3 G' x& w
    118.   }8 M\" x0 T  F: @, b9 r
    119. #endif
      : d1 j( K3 u0 }  z\" W2 I9 w
    120. ! m6 E' _\" y8 Y) O& x+ S! s- I
    121.   return l;
      3 n/ e$ D5 T5 ~+ F+ |0 y
    122. }
      + g$ E' |* d3 g! M- h/ _8 e
    123. + I, `7 B3 f, [' p/ w$ |
    124. int
      0 b9 Z# y& T4 P- r0 ~
    125. main(int argc, char **argv) , v: M8 O6 m0 V6 n5 d9 k* g$ a
    126. {1 P0 ?: O  z: P  ~; r4 H9 Q1 w
    127.   int c;/ G- C* w0 d& K
    128.   extern char *optarg;' y4 ]. n% G9 C( g2 u/ [
    129.   float res;
      \" \. V) }+ q, M. t9 J' V, P
    130. + L0 Q# y$ Q# Z& ]* x% N- H
    131.   if (argc < 2) 6 }( i3 [, m5 D
    132.   {5 x' h5 E/ ]  r- g
    133.     m_lagrange_interpolating_usage();, {\" z; y3 O1 P
    134.     4 P6 T! ~0 }  {+ }2 n
    135.     return -1;: \- B# P( \. Z% q9 Q+ M7 O  z
    136.   }5 |( r1 t  Z, ?7 Z) j3 v) k

    137. 5 l: n2 H. K0 W+ E8 q6 ?
    138.   while ((c = getopt(argc, argv, "p:x:y:")) != -1) ' B* G0 h5 }9 @7 {6 g: d
    139.   {. [1 G  L5 r+ s
    140.     switch (c)
      # i9 [+ V2 ]2 w: b* P: B# @8 M( a
    141.     {
      # `% f) @( d0 {6 j5 m8 E
    142.       case 'p':4 X0 C6 V2 C4 v7 s$ J, g& y
    143.               m_p = (float) atof(optarg);\" W; |- ^4 i/ }$ @7 D- m6 {2 D
    144.       case 'x':
      4 V7 a1 }5 R& f! r4 h( R
    145.         m_xi = optarg;- T/ u) P2 W; \/ o
    146.         break;
      ( V' |* G; H* W5 a* b4 K$ h: H
    147.       case 'y':  X& ]) m& Y- n/ C
    148.         m_yi = optarg;
      9 d' R, J$ _$ Y! W
    149.         break;
      4 z( T\" u& f2 e4 s5 n- _$ [% r
    150.     }5 W+ G3 u3 H: r! I
    151.   }6 y  h- {8 ]: i$ t3 O3 P4 j

    152. # A5 `2 U( ?. Q( a/ m8 R
    153.   res = m_lagrange_interpolating();\" h2 \  G; y9 ^  ]4 g% b: F. z
    154.   printf("Lagrange interpolating with %.4f result is %.7f\n", m_p, res);
      ( e8 Z' V: U4 c2 G; V9 Q, k
    155.   4 E# N5 ~# @) R( B$ C
    156.   return 0;( g\" G- K8 ?7 w4 x
    157. }' t  x& }9 Q! a$ e4 i
    复制代码
    回复

    使用道具 举报

    lll111 实名认证       

    0

    主题

    0

    听众

    1

    积分

    升级  20%

    该用户从未签到

    回复

    使用道具 举报

    xhz-hhu        

    0

    主题

    0

    听众

    2

    积分

    升级  40%

    该用户从未签到

    回复

    使用道具 举报

    depht858        

    0

    主题

    0

    听众

    2

    积分

    升级  40%

    该用户从未签到

    回复

    使用道具 举报

    hastykeys        

    0

    主题

    0

    听众

    4

    积分

    升级  80%

    该用户从未签到

    回复

    使用道具 举报

    芸芸芸        

    0

    主题

    0

    听众

    2

    积分

    升级  40%

    该用户从未签到

    回复

    使用道具 举报

    mao233        

    0

    主题

    0

    听众

    1

    积分

    升级  20%

    该用户从未签到

    自我介绍
    好好学习
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2025-9-26 21:16 , Processed in 0.812904 second(s), 105 queries .

    回顶部