QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 22241|回复: 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自定义插值函数插值计算数值计算 % O: T1 v( }2 V4 a3 A版本号: 04y09m28 1 ^' \- B: e& v2 _! m5 |; |分类: 工程设计应用8 z" F5 W, g; M) H& E 性质: 免费软件+ A7 {: o' i" ~* k* ]+ g) [: x/ H' L1 } 使用说明:

    $ N* u4 v( K/ m) O9 E

    人们对EXCEL普遍熟悉的功能是表图的处理,不太知道其在工程计算(如锅炉设计计算)中的应用。复杂的工程计算常常用专业编程语言(Fortran、C、Pascal 等)来编制计算程序解决,用专业编程语言编制工程计算程序往往有下面二个缺点: 9 d; g* P4 n( n0 H ; i1 ^. @* ~! m1 O& l4 g7 p 1) 编程语言专业性强,一般工程技术人员难以掌握,由这些专业编程语言编制的计算应用程序的维护、修改、升级都比较困难。

    2 z# ]4 ?" F, K' ~

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

    ! g6 f5 i6 p+ U* \

    EXCEL每一个单元格就是一个电子表格,很容易进行一般的加、减、乘、除、乘方、开方,而三角函数、指数函数在EXCEL中可以直接引用内部函数。用EXCEL编制一般的工程计算程序还需解决的有以下两个问题:(1)循环计算,(2)表、单曲线、曲线组的查找(如:锅炉设计计算中的焓值)。对于问题(1)循环计算,EXCEL在工具菜单中提供了两个命令:单变量求解和规划求解,利用这两条命令很容易解决问题(1)。对于问题(2)表、曲线的查找,EXCEL没有提供现成的函数,但也可用VLOOKUP、MATCH、IF、OFFSET等函数的组合勉强近视解决,本文重点介绍表、曲线的查找自定义函数的定义及使用。 : @, N2 f: ~& I- p6 m: Y/ C4 z& k & Q2 }% U8 I$ S% O 为了更好地解决曲线查找的问题,应用C++程序设计语言,用拉格朗日插值计算法在EXCEL中建立了自定义函数,单曲线插值函数TWLQ(变量,"带路径的保存数据的文件名"),曲线组插值函数THLQ(变量1,变量2,"带路径的保存数据的文件名")。单曲线插值函数、曲线组插值函数的"带路径的保存数据的文件"包含着特定对映表、曲线的信息和计算精度的要求 (文件为Notepad编辑的txt文件) 。/ q7 v/ h" U) p% l# r+ s 单曲线lagrange插值函数:double twlq(double x,char* filename); / S' {5 d5 X( i- U* j& ?! O4 p- Q( ^ double twlx(double q,char* filename);9 d! l) G; w2 q: d5 |2 S 曲线组lagrange插值函数: ' i1 b0 F T, f! p* g double thlq(double x,double y,char* filename); - W& Z# N$ h. H4 j0 m. U# R8 B double thlx(double y,double q,char* filename); 4 P, a4 n' L, ^( h double thly(double x,double q,char* filename);。

    : w/ ]. l# l) C

    例:单曲线插值函数 "带路径的保存数据的文件"结构如下: U# _# `6 Z1 h( A@ Description @ ! l: O+ |- L( f8 v/ O, u8 I n, nsel;; L9 u. Q4 a, ?2 [ x[0],x[1], x[2],··, x[n-2],x[n-1]; ]& t9 C3 ]. J4 y' w7 qq[0],q[1], q[2],··, q[n-2],q[n-1];4 l; k8 m: }( U: u MinX=0.7,MaxX=0.9,OverRangeAlm=1,X=电压,XUnit=mv,Q=电流,QUnit=mA

    4 {3 H' |. y5 v6 a" x4 T! `

    注解:5 g. \5 T% S& G- z7 [, j, o5 x- O Description:用户自定义描述字符串(Description中不可有@符号); 9 H# u% S4 B1 }6 v$ X% n n: 总插值点个数; . S! y; X6 `# J2 y nsel:实际参与插值计算的插值点个数; " w- f+ b' Z6 a4 l6 n3 B; r MinX=0.7,MaxX=0.9 取值范围;4 U/ }+ P1 q; c5 u% s OverRangeAlm=1 越限报警 1:报, 0:不报; ! ^; i5 a# I ]. ]4 }9 D( J X=电压,XUnit=mv,变量名称,单位。

    6 }1 @( w* A/ l8 u

    ****结论: K% h4 I: \. Q0 e% R l)图形化界面的插值函数数据文件生成器 LCZMaker 方便快捷生成单曲线或曲线组插值函数数据文件。 $ T" q8 w6 A W7 h% g( z 2)应用EXCEL自定义插值函数,在EXCEL中进行工程计算编程极为便利,比专业编程语言程序设计更易学易用、直观明了,用EXCEL编制的工程计算应用程序更易维护、修改、升级。8 m7 @3 A& I) y' L) Q 3) EXCEL本身长于表格制作,在EXCEL中进行工程计算编程人机界面友好,输入前、输出后处理方便简单。 2 N, k4 y8 b# u 4)在某大型锅炉厂电站锅炉性能设计计算中已显神力。

    ) t% y7 r9 ^9 J4 o6 V( B8 C6 L8 d5 u

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

    2 B% O5 w# l; o4 L1 Q+ y* X

    [分享]插值软件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. # s7 ~5 Z3 L! D. K, B3 `- T0 S
    2. /* TODO: Lagrange interpolating . v1 V( h/ g# y& O2 \- E
    3. *
      9 H9 Q# y2 w4 T. C1 Q7 D: N
    4. * For example, if lg2.71 = 0.4330, lg2.72 = 0.4346, then lg2.718 = ?6 b% O# C8 p, r% }+ I2 J* W% L# M4 |
    5. * In this situation, it could be solved via lagrange interpolating4 u7 q: \: Y9 i2 t* H; H: T
    6. *5 K& j0 r3 \\" n$ P
    7. * */
      2 B$ p$ Y0 ]8 j* ]

    8. \" M' ~! x9 j9 `
    9. #include <stdio.h>  `( \2 {; ?2 u
    10. #include <stdlib.h>3 T/ v) q6 ^3 {# R( a! d\" W
    11. #include <string.h>
      6 M/ D/ S& `* Y( P/ |: W
    12. + _3 U4 U& U$ Q9 Z4 x6 J
    13. #define DEBUG 0
      7 [7 f7 T5 O/ d$ W. |
    14. ) L9 W8 B! Y* l. f7 P
    15. static float m_p = 0.5635;
      * h3 O\" H1 G5 C' @6 y# d1 }) M. t& V
    16. static char *m_xi = NULL;
      ( Y% C/ ?/ z0 L5 k( ^% N7 Z: a( n
    17. static char *m_yi = NULL;: u; R: [2 N; }2 M. w
    18. static float m_arr[] = {};\" ?  U+ C: h, @4 b
    19. static unsigned int m_n = 0;
      + m8 a0 i$ F8 Q% i1 b+ d
    20. 6 S7 w3 Z\" ~7 x7 [4 ~
    21. static void m_lagrange_interpolating_usage();
      4 R6 O$ t. h3 ~
    22. static int m_lagrange_interpolating_set_n_arr();
      7 X9 w2 k$ L- Z! H( W3 D
    23. static float m_lagrange_interpolating();9 M2 f4 \* l: y\" @' M

    24. # B/ R$ _9 I6 e0 M/ H
    25. static void
      1 h6 Q4 ^3 o0 B# k0 N& `! X5 r
    26. m_lagrange_interpolating_usage() ! W. S% F; b& L6 D/ G
    27. {
      # X! q% Z4 l6 L9 e
    28.   printf("Lagrange Interpolating Usage:\n");
      \" o\" ?6 O7 [  }' l) A3 P9 Q
    29.   printf("bin/li -p ** -x ** -y **\n");; N* N9 b\" c- I. b\" o
    30.   printf("-p 0.5635\n");
      \" L! s\" n3 V+ a
    31.   printf("-x 0.56160,0.56280,0.56401,0.56521\n");
      ' }8 z. z, C# q
    32.   printf("-y 0.82741,0.82659,0.82577,0.82495\n");
      9 ?2 S( U8 R9 b( ?2 {\" e, o
    33. }
      3 h+ b* w8 b% P0 f

    34.   c  T( C' q. w) U& J+ V5 q
    35. static int
      9 n. G( r* @2 A) E1 o1 z. f
    36. m_lagrange_interpolating_set_n_arr()
      4 [\" I/ x8 Y* ^  Q
    37. {8 f! M/ |# s# n) S5 e$ t3 O' x) v
    38.   int xi_n = 0;1 O# W: u2 N0 `' p: |0 ~5 x
    39.   int yi_n = 0;! r, \3 n2 K- K' H) H6 K0 W: m/ ~
    40.   int n = 0;! o0 f; f, q- Q* L' F\" u8 i
    41.   char *token = NULL;
      * `2 u% k( U4 n8 s+ \1 F4 b
    42.   const char *delim = ",";
      7 f1 o  Q3 q3 X1 ], z
    43. / r. ?8 g) H( v  N/ _1 Z
    44.   token = strtok(m_xi, delim);
      # |\" t* Y! `5 _2 f; j/ ?( Y& x4 ^
    45.   while (token)& Q* P5 ^& W, |5 {7 q* e
    46.   {% h; O, c' h% I1 _
    47.     xi_n++;. Y\" l  `/ T4 E4 R8 V0 d
    48.     n++;- N3 b7 z- ?$ k% |/ i  O7 g, F7 V' ]7 |
    49.     m_arr[n] = (float) atof(token);
      / _) @! Q5 d4 }7 I( N4 |
    50.     token = strtok(NULL, delim);4 W$ y5 k4 s+ v+ d6 L4 q
    51.   }\" r# n# d; w+ o5 S
    52. 5 B; d. z\" D- [1 f! U  P
    53.   token = strtok(m_yi, delim);% N; a; [: G/ l\" j( M- X' e
    54.   while (token)
      ' M1 r) P+ `: r( o; h
    55.   {
      $ L1 S3 N+ X& W0 b5 M
    56.     yi_n++;
      . W5 F, ?. g/ b. C% F) C; M$ X
    57.     n++;7 o( {7 g7 U+ ^5 Y9 e
    58.     m_arr[n] = (float) atof(token);$ V5 m. T! l( j, H0 o% u
    59.     token = strtok(NULL, delim);
      \" Q( g3 V# `9 {5 V7 ]
    60.   }0 j. W3 @* M2 c, @- |
    61.   
      5 w( ]8 g$ t& V8 f$ c
    62.   if (xi_n != yi_n)
        f9 S0 O! D: e/ n8 L
    63.   {6 G9 l3 M$ |: |3 N- [& P) `# O
    64.     return 0;
      4 P$ o! a/ x. b7 `+ Z$ o' z+ }
    65.   }
      $ _3 o% y: }8 o* c6 N
    66. ; F. J6 ]6 }4 ^4 K2 }. s* g1 V
    67.   m_n = xi_n = yi_n;
      : q/ b$ P, ^( `' o6 |6 u0 c* e
    68. + s% T* k+ O& c6 i
    69.   return 1;& h1 p5 ]& Z. G6 |9 M6 q- P
    70. }; C  q6 n/ u\" T7 E# @# i5 H# _) B
    71. + g9 z  y; ~* X) H% S1 ~
    72. static float . a# L! J( u1 b3 j/ Y
    73. m_lagrange_interpolating()
      * |$ H\" i* h, F# v3 s
    74. {1 i) M8 C6 A, [  O! e- \
    75.   float l = 0.00000;, a$ t$ L* L7 ?1 Z1 {! s6 A
    76.   float li;
      , k3 H5 X, o. n; d: F& \3 G: k: E
    77.   int i;
      , p\" Z: @! Z' @! w6 u  t5 L; S
    78.   int j;
      \" Y! p- t8 Y; @# Y1 ~+ D4 E$ k4 d) d
    79. ) {3 Q% a9 j8 E9 |! [- k
    80. #if DEBUG
      : ^9 b. j- o2 b# B- K4 _+ d- i
    81.   printf("DEBUG at %d: enable debug mode\n", __LINE__);& @  L\" O/ l7 U
    82.   unsigned int m_n = 3;
      8 t( n) R5 [! f- {( |% }/ y
    83.   float m_p = 0.5635;) c) T! o5 p7 M  ~! P- r
    84.   float m_x[] = {0.56160, 0.56280, 0.56401, 0.56521};. ]- W2 i( Q) q
    85.   float m_y[] = {0.82741, 0.82659, 0.82577, 0.82495};* x( o$ a5 P2 o$ `\" g3 v/ U
    86.   
      7 B7 [: S  l$ X8 i5 X: h$ H
    87.   for (i = 0; i < m_n; i++)
      ! b' t8 P- f# |& h
    88.   {
      * v% k3 e) I\" z4 t, Z6 S
    89.     li = 1.0000000;
      \" y' G; b\" o0 ]0 I! w3 l# h
    90.     for (j = 0; j < m_n; j++)# S0 d' S+ T% y# W8 u4 g
    91.     {/ N3 x: g3 U; }
    92.       if (j != i)- ]: c* k' T- v9 o; x# O/ d( ?
    93.       {
      1 s% \\" r& P  z: _0 G1 U
    94.         li = li * (m_p - m_x[j]) / (m_x[i] - m_x[j]);1 L$ C. ~6 \8 q! h
    95.       }
      9 W2 q+ J- t% z) }, B
    96.     }
      & d- C1 I; }& @- h/ ?9 K* I) F
    97.     l = l + li * m_y[i];
      ' d8 e/ ^# ?2 G5 i: F- x  i$ w\" H
    98.   }3 H  s\" B3 y* j7 D/ }' C+ u& R5 G
    99. #else2 ^5 E\" u8 h* V
    100.   if (!m_lagrange_interpolating_set_n_arr()) ! r0 \6 I; w\" U: Q; w+ x' i
    101.   {
      \" w3 ?5 ^; g( Q! \
    102.     printf("Error: xi and yi counter is diff\n");2 g0 h% H1 c5 q- ]' o% I6 c\" a
    103.    
      ' Y* F5 T' j\" {8 b\" m
    104.     return 0;2 {& h: j- K! j6 Z# \. N1 ]
    105.   }
      4 H7 w- ^\" y5 `% E, u
    106. ( y0 X4 I3 `, k/ R2 J0 ?
    107.   for (i = 0; i < m_n; i++)
      ' G1 y3 t2 o5 Z. [7 d3 E% C
    108.   {% R$ d: v; G$ o, ]  L; p8 {- N
    109.     li = 1.0000000;
      1 y; j3 b# J2 @5 V1 R
    110.     for (j = 0; j < m_n; j++) ! o- _1 C( W6 p# t, ^& v
    111.     {; u\" {+ k- H7 u. B+ y# x6 X# V
    112.       if (j != i)   I3 M, W) i$ X& V: J7 e7 d
    113.       {! t% z+ }: ?9 M7 i! T
    114.         li = li * (m_p - m_arr[j + 1]) / (m_arr[i + 1] - m_arr[j + 1]);
      . H8 |) R' `. Q* Y* v
    115.       }
      5 j' B! a5 e, B+ `. Q: ?% I9 m, @
    116.     }& u, a6 [# q) c; ^' k# F1 L5 d) p
    117.     l = l + li * m_arr[i + m_n + 1];4 D% y9 G, c\" _- J# L\" ^7 Q+ `8 ^
    118.   }
      . b. B% d9 _' o
    119. #endif2 i- K% o( r5 y* _. Q& ]# H8 i\" S

    120. 5 m5 _& P8 `) T3 x+ B! j\" \
    121.   return l;
      \" F8 D* c' [  ]  D
    122. }
      / p: E% m- e+ d( H5 \5 D0 \

    123. , r, E$ A- \$ U- T
    124. int % S; Z+ C& |# m( D$ v+ @! U8 O* Z
    125. main(int argc, char **argv)
      ' s( M+ h% f7 I5 H$ a  u
    126. {
      9 s- d- W5 n( n- o# {' g, ?. f
    127.   int c;
      ) f% c  Y\" o5 P/ y$ V0 D
    128.   extern char *optarg;
      8 i6 ?7 `- a1 V) ]
    129.   float res;8 U( o. x& C8 Z6 Q# s' R7 B
    130. # {. p. S6 v6 o
    131.   if (argc < 2) 4 g& V7 a6 j# ~& {0 @; F# E
    132.   {
      2 Q+ u% E  M* z/ D2 v7 n
    133.     m_lagrange_interpolating_usage();
      # T: {: e( k) A, x3 w
    134.    
      3 [+ i\" E9 T( y. b+ O5 x/ u% h& t, L
    135.     return -1;
      0 ?( e1 G- V& m5 @8 S
    136.   }; W5 J, K6 E, J8 ^1 F7 O4 T
    137. 5 a2 x/ `5 k8 S  z
    138.   while ((c = getopt(argc, argv, "p:x:y:")) != -1)   j; Q1 ?\" \( \3 [; ~* D
    139.   {: @: W* \* |4 j, y/ E
    140.     switch (c) + B5 z1 A- H: Y& q4 i
    141.     {- }( M. V! D& X* r2 W3 \/ u
    142.       case 'p':; Z3 a* M( t7 n$ ?
    143.               m_p = (float) atof(optarg);
      ' z7 N6 E0 [+ A/ h1 @1 O
    144.       case 'x':0 m) }! l. j7 f: m# P% ~5 U
    145.         m_xi = optarg;8 G6 {& ^1 B% f+ e, P
    146.         break;1 a& t4 G1 o+ ^; \
    147.       case 'y':/ E4 K0 z% S+ q, a7 @+ Q( m
    148.         m_yi = optarg;
      ( g% E5 |1 a+ e
    149.         break;1 n( g3 S' m# W( m
    150.     }
      ( G6 L# `) x$ f! Z7 a  R% P+ y% ]
    151.   }- ~; ^8 k( }/ y4 }- g

    152. \" p; c' O3 z# z, `9 e0 u
    153.   res = m_lagrange_interpolating();
      , D1 ]* Z/ e1 A$ X; B
    154.   printf("Lagrange interpolating with %.4f result is %.7f\n", m_p, res);3 U\" F6 g7 N* R# W1 y
    155.   
        T' Z+ s3 F# V1 f; B2 p9 o
    156.   return 0;. i8 _0 H+ _& a5 h8 \
    157. }
      5 g( [7 i6 v  a& a2 f
    复制代码
    回复

    使用道具 举报

    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, 2026-5-27 01:05 , Processed in 0.891854 second(s), 104 queries .

    回顶部