QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 22167|回复: 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自定义插值函数插值计算数值计算 ) _ {; Z6 c# Y- E版本号: 04y09m286 B7 p# I# [! w* s+ ~0 Q8 ^ 分类: 工程设计应用7 n" z7 q, |- \; C4 d6 k 性质: 免费软件& I S' Z& M n% \% W' O/ X; O1 { 使用说明:

    8 _1 N- [# B( K

    人们对EXCEL普遍熟悉的功能是表图的处理,不太知道其在工程计算(如锅炉设计计算)中的应用。复杂的工程计算常常用专业编程语言(Fortran、C、Pascal 等)来编制计算程序解决,用专业编程语言编制工程计算程序往往有下面二个缺点: ) i3 x* @2 ]) [- a, t9 L2 h 8 { p9 i, f0 [. |) d/ |# u 1) 编程语言专业性强,一般工程技术人员难以掌握,由这些专业编程语言编制的计算应用程序的维护、修改、升级都比较困难。

    / R( ^6 Y+ D: H: D4 L# N0 `

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

    . N: y# p* e; p+ ^) |

    EXCEL每一个单元格就是一个电子表格,很容易进行一般的加、减、乘、除、乘方、开方,而三角函数、指数函数在EXCEL中可以直接引用内部函数。用EXCEL编制一般的工程计算程序还需解决的有以下两个问题:(1)循环计算,(2)表、单曲线、曲线组的查找(如:锅炉设计计算中的焓值)。对于问题(1)循环计算,EXCEL在工具菜单中提供了两个命令:单变量求解和规划求解,利用这两条命令很容易解决问题(1)。对于问题(2)表、曲线的查找,EXCEL没有提供现成的函数,但也可用VLOOKUP、MATCH、IF、OFFSET等函数的组合勉强近视解决,本文重点介绍表、曲线的查找自定义函数的定义及使用。 5 ^$ I5 Q: |8 P# t8 a + s- |. S ~! S8 n- g* c# | 为了更好地解决曲线查找的问题,应用C++程序设计语言,用拉格朗日插值计算法在EXCEL中建立了自定义函数,单曲线插值函数TWLQ(变量,"带路径的保存数据的文件名"),曲线组插值函数THLQ(变量1,变量2,"带路径的保存数据的文件名")。单曲线插值函数、曲线组插值函数的"带路径的保存数据的文件"包含着特定对映表、曲线的信息和计算精度的要求 (文件为Notepad编辑的txt文件) 。9 a6 J! j4 F9 E, g 单曲线lagrange插值函数:double twlq(double x,char* filename);' c2 J5 [% g" | double twlx(double q,char* filename); : l ]+ a/ z) T曲线组lagrange插值函数:2 g! ^' ]! _, @8 ^( M double thlq(double x,double y,char* filename);" A" i M! N9 q$ `# d" G! @: m double thlx(double y,double q,char* filename);' M- ~$ Z* U) c) P: ~: ] double thly(double x,double q,char* filename);。

    m6 l3 L" z. T2 k* t, M

    例:单曲线插值函数 "带路径的保存数据的文件"结构如下:( a) h1 E! O z @ Description @! I& o$ J0 [" U2 V" ^2 J/ u k+ A n, nsel; 3 j& V+ d$ o) @7 _8 t% Dx[0],x[1], x[2],··, x[n-2],x[n-1]; T' j* N0 p5 f' yq[0],q[1], q[2],··, q[n-2],q[n-1]; ! r! u8 r9 x1 g. \, c; _+ HMinX=0.7,MaxX=0.9,OverRangeAlm=1,X=电压,XUnit=mv,Q=电流,QUnit=mA

    : ?' V. J7 d2 {( d8 \0 g: W4 |

    注解: + I2 T8 f6 a" i$ I9 Q Description:用户自定义描述字符串(Description中不可有@符号);( a' q4 m2 T. e n: 总插值点个数; 8 l# a. k- O" t" l nsel:实际参与插值计算的插值点个数; - P- H: A- s* X/ ~1 K1 u I- b MinX=0.7,MaxX=0.9 取值范围; # L& }* a/ O, ?$ D# X OverRangeAlm=1 越限报警 1:报, 0:不报; 0 C# m7 l k3 r4 ~" P+ m X=电压,XUnit=mv,变量名称,单位。

    / q0 ]1 z0 l1 O3 K" g- N; J) _

    ****结论:+ b2 T- ^6 j* M7 A l)图形化界面的插值函数数据文件生成器 LCZMaker 方便快捷生成单曲线或曲线组插值函数数据文件。, n3 B [9 R+ D( d1 ?4 a1 N 2)应用EXCEL自定义插值函数,在EXCEL中进行工程计算编程极为便利,比专业编程语言程序设计更易学易用、直观明了,用EXCEL编制的工程计算应用程序更易维护、修改、升级。# y) j# u" r/ T, ? 3) EXCEL本身长于表格制作,在EXCEL中进行工程计算编程人机界面友好,输入前、输出后处理方便简单。 5 D; C# n, p. z 4)在某大型锅炉厂电站锅炉性能设计计算中已显神力。

    , |/ o2 Z+ r. ~7 i A" V& D

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

    % Q2 o2 Z3 h9 M% U3 q+ h ~

    [分享]插值软件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. & n, H5 K% v- V, c' i3 t
    2. /* TODO: Lagrange interpolating
      9 a3 a9 Y\" a\" x6 r% s
    3. *5 `3 M* @0 B- V
    4. * For example, if lg2.71 = 0.4330, lg2.72 = 0.4346, then lg2.718 = ?* Z% ^% C# A, m0 X+ {
    5. * In this situation, it could be solved via lagrange interpolating/ e* n5 [- W& O. J\" [$ H7 Q/ |
    6. *
      : B! Q( P1 r# \/ {: Z9 h7 N( }- U2 f; ^
    7. * */
      , n9 L4 ?% v, G1 r, v

    8. 0 C. P* h; L9 |\" ^: G
    9. #include <stdio.h>! e5 P$ U* y/ s+ g* C# n! P
    10. #include <stdlib.h>
      7 `8 B2 r; s: x6 X+ q
    11. #include <string.h>( s9 H7 p3 j) o( B3 n
    12. 4 q. A' x7 q9 R; a' u
    13. #define DEBUG 0% ~8 ~1 \- c1 W% x
    14. 7 l( P# O' E& F0 R- Y$ s6 ~
    15. static float m_p = 0.5635;3 S5 _\" w* d, c7 v
    16. static char *m_xi = NULL;
      : e, _3 Z# E2 J; V. p+ J
    17. static char *m_yi = NULL;
      4 S) F) `/ T: M# K
    18. static float m_arr[] = {};
      7 f! X) v, f\" w2 t* `4 X
    19. static unsigned int m_n = 0;: k9 @+ z/ l0 r7 N6 k  Q

    20. & z1 l1 n) G; H- F( u9 e/ o5 o
    21. static void m_lagrange_interpolating_usage();8 o/ V& Y* r0 h5 d, W  m\" x2 Q' L/ x
    22. static int m_lagrange_interpolating_set_n_arr();; [$ N2 g9 c4 X4 B' g0 A' D
    23. static float m_lagrange_interpolating();
      2 Z; ^1 ?$ S) W5 s  C- A% v, a
    24. + Q3 e1 M! x- J/ n: S9 @! Q$ F
    25. static void \" P0 D: q: p- a& L  d; K8 X
    26. m_lagrange_interpolating_usage()
      * R( J7 Q' n+ |6 F' m9 Y/ ?- {, `. [\" u
    27. {
      , C/ ?/ _6 q/ T. W; H% A. T
    28.   printf("Lagrange Interpolating Usage:\n");; O3 q( `8 p# ?
    29.   printf("bin/li -p ** -x ** -y **\n");5 W% w+ |2 P7 T' c# @( g! @\" m
    30.   printf("-p 0.5635\n");
      ) n% v+ L' s0 M3 u+ _
    31.   printf("-x 0.56160,0.56280,0.56401,0.56521\n");6 T! ^7 n3 |* P5 f
    32.   printf("-y 0.82741,0.82659,0.82577,0.82495\n");$ C8 ^8 S2 {! \6 u8 _' D
    33. }
      ) f; _4 k. Z, }( _. ~  w, _
    34. * o: `+ @$ L2 V# ?0 @7 U! P9 n
    35. static int
      ( [; T# ^2 P' a) r
    36. m_lagrange_interpolating_set_n_arr() / ]2 D  o5 x$ a9 g& }( Z
    37. {
      ! T  F$ d8 L/ b
    38.   int xi_n = 0;6 L5 i& b& Z* I; \
    39.   int yi_n = 0;
      ! u6 E4 H! w. k9 P  M5 S0 i
    40.   int n = 0;% ]3 i) N3 b4 s$ Q7 P
    41.   char *token = NULL;. J4 Z8 w2 }* V. d\" q$ Y4 p9 U5 A
    42.   const char *delim = ",";
      2 E- P4 ^2 V/ Z7 q
    43. % {5 p* U$ \# Q5 g* C+ W& b/ U& v: }
    44.   token = strtok(m_xi, delim);  S+ B\" @, U4 N5 B/ X
    45.   while (token)* ~1 U. O7 }$ v
    46.   {
      ' A4 M0 U8 x* n) Q
    47.     xi_n++;
      / {1 p- M/ F9 t0 C
    48.     n++;+ R# K1 x% @, ~+ V\" c\" w! r7 O
    49.     m_arr[n] = (float) atof(token);8 M# F0 f5 P# ~
    50.     token = strtok(NULL, delim);
      5 j- G/ l9 Z. n5 Z8 ?& p
    51.   }6 g- `- j- N& r\" ^$ y) }! ^

    52. & ]- @4 g& Z9 Q% i$ D( J
    53.   token = strtok(m_yi, delim);- C\" O# R8 {& |9 H# F
    54.   while (token)
      0 H  ~, \* F7 a3 X7 o
    55.   {
      2 s, a- H+ S' t* |1 n
    56.     yi_n++;0 F, U- i$ x1 y$ V
    57.     n++;6 C$ `' ~0 j4 a$ t\" r. ^
    58.     m_arr[n] = (float) atof(token);3 Y, T  L- A2 r3 R7 H3 X
    59.     token = strtok(NULL, delim);- L7 r, q8 n, z  c
    60.   }
      - m; Z. r; e* D- h1 k9 u
    61.   & y  X/ y: ^( b, g1 h1 V4 o) z
    62.   if (xi_n != yi_n)
      0 u* i: g6 B% @  M\" w, m
    63.   {4 c+ l! P2 J' g\" ~\" @
    64.     return 0;
      \" \) X% \2 \0 q! d
    65.   }) P3 p) ^' H. n8 v' m4 u

    66. ) P2 _0 E1 _6 w' O: w
    67.   m_n = xi_n = yi_n;+ k  \; z) J$ @' D$ m: W- L% K

    68. ( s0 Z3 Y3 M5 ~9 s( B  R, Z
    69.   return 1;/ P9 Q5 y- k/ {! i# }' }
    70. }
      # Y0 a. ]0 m! |1 V/ ?
    71. - o( x% U\" v) J5 ?5 f( j! e0 N6 a
    72. static float
      + U* J+ M% H3 j6 s. b6 f! `% w
    73. m_lagrange_interpolating()
      ; H- v$ W* j( b$ h
    74. {
        _  S6 W* A; I  Z( F. R* I- `
    75.   float l = 0.00000;/ z\" W' K8 @\" ~7 o4 c) K# F
    76.   float li;+ d) h7 V+ W4 X, R# |: v4 {' r
    77.   int i;7 |; X; X5 A0 b9 m5 b
    78.   int j;- _  Z( U% E6 X: ?/ o  x

    79. 9 ~7 K9 \( `, e
    80. #if DEBUG
      ( A& E, A\" s% f* m+ ]. A$ e/ O3 R
    81.   printf("DEBUG at %d: enable debug mode\n", __LINE__);
      8 ?' }$ d2 k6 z5 t( p
    82.   unsigned int m_n = 3;* M% }- O% e8 t0 Z
    83.   float m_p = 0.5635;
      % o1 ^+ D  ~+ l. z
    84.   float m_x[] = {0.56160, 0.56280, 0.56401, 0.56521};5 t4 {3 h9 Y7 Q. I( S
    85.   float m_y[] = {0.82741, 0.82659, 0.82577, 0.82495};
      * y% A3 ]; ?5 g! m3 W- [& J
    86.   
      1 Z% n3 T' N5 m2 C; ~
    87.   for (i = 0; i < m_n; i++)* g6 i' B( ]\" u8 v
    88.   {
      : V2 l$ l' C3 y
    89.     li = 1.0000000;
      9 h1 i+ W) C) V7 B
    90.     for (j = 0; j < m_n; j++)
      1 M0 l4 |  s3 \$ F: C; y8 A7 m
    91.     {
      ; `9 |/ r2 ?+ k3 k+ `1 ]
    92.       if (j != i)! c8 x, F* O  ^2 m7 Z
    93.       {
      : _! |4 J8 T9 k4 u# r- {; N7 x
    94.         li = li * (m_p - m_x[j]) / (m_x[i] - m_x[j]);5 V% W4 l3 D6 R' F
    95.       }
      . P6 ?. m6 l4 v+ @1 N8 V# |* \
    96.     }, _3 o+ C  i# M8 W; k. h$ F
    97.     l = l + li * m_y[i];& c& N$ w: k! ?1 l
    98.   }5 Z$ {* x. g' ^1 l. I5 Z
    99. #else. \3 C- c0 R# b% R3 `
    100.   if (!m_lagrange_interpolating_set_n_arr()) & L3 T2 @! V5 |
    101.   {
      ' ^$ z- i+ t6 e6 ~( n0 J
    102.     printf("Error: xi and yi counter is diff\n");
      % x# D8 Q  M6 d
    103.     1 f& R- p6 q\" c7 v- x- ~
    104.     return 0;# v% |% F4 M, C1 F
    105.   }
      & f# p3 s  C0 E# ]5 y

    106. , O: A9 |8 K% ~4 e) `, [
    107.   for (i = 0; i < m_n; i++) + t2 e( F4 u( q& x2 H  V
    108.   {\" s' ]1 j! C' Y- B
    109.     li = 1.0000000;
      : o\" n  h- z- w) d7 t
    110.     for (j = 0; j < m_n; j++)
      0 P\" i3 N\" }: l3 _6 i, R8 i5 W
    111.     {% E$ V$ q* a3 T. x) E5 i7 X
    112.       if (j != i) ; }7 e! W\" W( A
    113.       {
      ) h0 U+ Y5 [, a' g6 _) k7 z1 [
    114.         li = li * (m_p - m_arr[j + 1]) / (m_arr[i + 1] - m_arr[j + 1]);
      % c! y' U5 I, ^6 i- U; Q
    115.       }/ n2 j( r& O4 w, k% ]
    116.     }5 H9 M; G) B  k7 K& f
    117.     l = l + li * m_arr[i + m_n + 1];
      / X. j. g8 g9 `! q  X) z% H
    118.   }
      8 }( m- z# D  S\" z2 [  d\" e
    119. #endif2 ], W/ Q3 Z& t, W0 c- b- A2 q
    120. * w3 t, o/ p# |4 E
    121.   return l;
      5 Y% c2 ^- ~/ @
    122. }
      8 R6 U\" m. x5 A# k) a( \
    123. ; Y3 g# I) Y' v) n
    124. int 2 _1 x$ K  {3 [5 p5 l
    125. main(int argc, char **argv)
      9 G3 H+ u( }. e. b  O
    126. {
      + ], s5 ~, T7 K' P% E2 Z
    127.   int c;/ l# m( ~1 X1 _3 }
    128.   extern char *optarg;; S( X! @7 h, @' {  p, t+ V
    129.   float res;  g\" ?6 _9 c  v3 `# M7 W3 T8 C
    130. 2 X) v. U( Y\" b
    131.   if (argc < 2) 4 r; T5 R- f- q
    132.   {1 ]/ f1 g4 j0 b
    133.     m_lagrange_interpolating_usage();
      1 G: ~/ {( ^2 p2 }4 K
    134.    
      & N: n4 N) k\" I/ i
    135.     return -1;- g- w* y4 J+ P2 Y7 @5 B0 h
    136.   }
      . m; r1 l6 B/ e  _

    137. 3 i3 q7 A6 ^  E# T0 l! n2 ~
    138.   while ((c = getopt(argc, argv, "p:x:y:")) != -1)
      4 e: x, ^/ O4 ]; h
    139.   {
      ; z$ q! {0 k' Y
    140.     switch (c)
      \" b6 m/ R* {  m3 N) ]$ X! P
    141.     {
        M/ Z  j/ E3 n: x$ v9 ^$ g
    142.       case 'p':2 \! E7 Z* z) n8 u! \5 ^
    143.               m_p = (float) atof(optarg);
      / L0 o) Q+ z0 J
    144.       case 'x':% e2 i: \% Z# Y+ v+ |
    145.         m_xi = optarg;
      1 }: }5 @6 j: k  m- @$ \% ^6 H6 C
    146.         break;
      . J( X1 s. P* i- g
    147.       case 'y':  T- H: U; o) j. C6 @8 K: w
    148.         m_yi = optarg;
      ; R7 P  R+ u) T6 ^) ?0 X) _8 |8 ?3 r
    149.         break;
      . u\" y9 w  P6 W8 {9 L
    150.     }& x/ n( R& P# H8 P7 \3 n
    151.   }
      ! t5 t8 f9 j4 Z\" ?; }4 W3 `
    152. $ z* u* x\" ]( j, U\" _$ l$ {
    153.   res = m_lagrange_interpolating();
      4 ?3 K. f4 s$ A/ j5 H\" F+ V
    154.   printf("Lagrange interpolating with %.4f result is %.7f\n", m_p, res);
      % Q% ~( }2 V- f7 j\" u& ]
    155.   
      1 I% U; h5 B5 Q  g- l1 W+ V
    156.   return 0;
      6 i9 t5 M, c5 X* j. v9 n
    157. }
      + U& [$ b2 H$ l: Z, o
    复制代码
    回复

    使用道具 举报

    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-4-17 03:59 , Processed in 0.636645 second(s), 105 queries .

    回顶部