QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 21846|回复: 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自定义插值函数插值计算数值计算; w1 \: ^3 R+ z- G. ^ 版本号: 04y09m28( g- h# U! P7 Z/ z1 r, O 分类: 工程设计应用: L$ ~, m# X p. x' a, F 性质: 免费软件6 q4 s4 r0 `. g" G) V0 I 使用说明:

    : l I! R1 m: m1 U0 V7 o" u1 W- H" t

    人们对EXCEL普遍熟悉的功能是表图的处理,不太知道其在工程计算(如锅炉设计计算)中的应用。复杂的工程计算常常用专业编程语言(Fortran、C、Pascal 等)来编制计算程序解决,用专业编程语言编制工程计算程序往往有下面二个缺点: 1 v$ T) J5 c5 @+ e/ R ( c. `# n; X) J% X 1) 编程语言专业性强,一般工程技术人员难以掌握,由这些专业编程语言编制的计算应用程序的维护、修改、升级都比较困难。

    8 K) J: d( d* E+ ]( [

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

    . [- e+ ^/ G" e+ ~% @

    EXCEL每一个单元格就是一个电子表格,很容易进行一般的加、减、乘、除、乘方、开方,而三角函数、指数函数在EXCEL中可以直接引用内部函数。用EXCEL编制一般的工程计算程序还需解决的有以下两个问题:(1)循环计算,(2)表、单曲线、曲线组的查找(如:锅炉设计计算中的焓值)。对于问题(1)循环计算,EXCEL在工具菜单中提供了两个命令:单变量求解和规划求解,利用这两条命令很容易解决问题(1)。对于问题(2)表、曲线的查找,EXCEL没有提供现成的函数,但也可用VLOOKUP、MATCH、IF、OFFSET等函数的组合勉强近视解决,本文重点介绍表、曲线的查找自定义函数的定义及使用。- U2 h, h# J; @2 f5 ^. d- U & l8 r) v9 ?! }6 ?7 b& b$ m 为了更好地解决曲线查找的问题,应用C++程序设计语言,用拉格朗日插值计算法在EXCEL中建立了自定义函数,单曲线插值函数TWLQ(变量,"带路径的保存数据的文件名"),曲线组插值函数THLQ(变量1,变量2,"带路径的保存数据的文件名")。单曲线插值函数、曲线组插值函数的"带路径的保存数据的文件"包含着特定对映表、曲线的信息和计算精度的要求 (文件为Notepad编辑的txt文件) 。- d A; w" G( y8 G% S" \ 单曲线lagrange插值函数:double twlq(double x,char* filename);% q- I4 z4 _0 L% e$ {5 K; V double twlx(double q,char* filename); # F5 o( v6 n+ C# E9 G曲线组lagrange插值函数: # \* `9 t5 f$ l# g double thlq(double x,double y,char* filename);' p5 O( x6 V1 S9 U" C double thlx(double y,double q,char* filename); 5 E8 U- O4 b5 ]" E+ p X double thly(double x,double q,char* filename);。

    6 h: k( m' u/ l, J6 z: U

    例:单曲线插值函数 "带路径的保存数据的文件"结构如下:8 ?' _( N0 d8 x" T0 J4 u @ Description @4 S% \' H G8 F; b- `2 t0 @ n, nsel; 6 V; M0 f, x. X1 x* m' Q6 Px[0],x[1], x[2],··, x[n-2],x[n-1]; : p$ T9 H" U! N8 v# Wq[0],q[1], q[2],··, q[n-2],q[n-1]; . }5 S9 F4 u L) O3 Z f# |MinX=0.7,MaxX=0.9,OverRangeAlm=1,X=电压,XUnit=mv,Q=电流,QUnit=mA

    8 K. f s0 U& p" Y

    注解: u! b( J8 z/ q7 g Description:用户自定义描述字符串(Description中不可有@符号); V/ r& }* b. T8 P# i# f. S+ b n: 总插值点个数; C+ @3 q" `* D$ R; t+ \$ d nsel:实际参与插值计算的插值点个数; . o: X6 ~" I) }2 A0 k- u. O MinX=0.7,MaxX=0.9 取值范围;! e8 I* ~; `% b, j& E OverRangeAlm=1 越限报警 1:报, 0:不报; 1 a- }5 P3 q* Z6 F( I X=电压,XUnit=mv,变量名称,单位。

    " z$ e. G+ U0 K9 I2 P) H. A) o9 t: t

    ****结论: - j5 Y- ]0 I, z' b; q1 f" a l)图形化界面的插值函数数据文件生成器 LCZMaker 方便快捷生成单曲线或曲线组插值函数数据文件。 : M9 Q$ u$ B0 \2 G 2)应用EXCEL自定义插值函数,在EXCEL中进行工程计算编程极为便利,比专业编程语言程序设计更易学易用、直观明了,用EXCEL编制的工程计算应用程序更易维护、修改、升级。 # M; ~2 W9 M7 j: T9 x 3) EXCEL本身长于表格制作,在EXCEL中进行工程计算编程人机界面友好,输入前、输出后处理方便简单。 * v$ t/ i$ n {" O9 Q2 I 4)在某大型锅炉厂电站锅炉性能设计计算中已显神力。

    0 j2 K4 V! ~1 p

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

    ) C$ N4 N y0 g5 t" `2 L( I4 b) q

    [分享]插值软件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. 7 C' d' o9 q8 a\" K  t6 A, q
    2. /* TODO: Lagrange interpolating
      ' ?! @4 J  \# z
    3. *8 [, u+ ^, e  h( r
    4. * For example, if lg2.71 = 0.4330, lg2.72 = 0.4346, then lg2.718 = ?
      & \9 }3 ?/ e! T1 i) a' y
    5. * In this situation, it could be solved via lagrange interpolating9 r. t/ \. X* Y\" P5 N
    6. *7 R8 p9 m& j6 {) e+ K\" i' w- K0 G
    7. * */# d1 O* L1 W* d8 C; c; _2 a

    8. * G6 P: J) Y8 Q: T# ~
    9. #include <stdio.h>- O3 n9 L/ Y& G7 p; F% }( |* H5 }, r
    10. #include <stdlib.h>: ?5 y$ `; ?: v# N5 f0 `
    11. #include <string.h>
      0 p$ o$ G+ R! @+ o, r( t

    12. 8 {. d$ l* Q4 F$ n) |) [+ \8 o
    13. #define DEBUG 0! E\" J$ v# J4 U
    14. * P# [3 d1 v+ ~
    15. static float m_p = 0.5635;
      - v4 ^, [3 N6 {+ S
    16. static char *m_xi = NULL;
      + u\" b' Y) y3 K$ Z# o4 |8 z2 g
    17. static char *m_yi = NULL;
      5 L2 `! |+ Z( j& E8 X/ m
    18. static float m_arr[] = {};2 j) W0 V. P9 \0 R9 k
    19. static unsigned int m_n = 0;( x7 }# a! z* `, d+ S

    20. 5 X& a1 `( p\" q  k
    21. static void m_lagrange_interpolating_usage();
      ) @1 ]  C+ @- n8 S8 i
    22. static int m_lagrange_interpolating_set_n_arr();$ }( f  D- [8 E* W* `( \
    23. static float m_lagrange_interpolating();
      * b( f0 w- B$ S9 W3 _6 b
    24. * I\" c7 J& |0 P2 e2 X6 x
    25. static void : H- C4 g  T/ q+ O  w! x\" U. J
    26. m_lagrange_interpolating_usage() % |1 x2 y\" D2 g2 z9 A! R
    27. {' b4 b) H) |: y
    28.   printf("Lagrange Interpolating Usage:\n");
      5 Y# P  Y- b) x+ |9 h. @; W
    29.   printf("bin/li -p ** -x ** -y **\n");
      9 H- `4 Y) z0 _8 D( h5 o5 Y
    30.   printf("-p 0.5635\n");' Z) J4 M7 Y/ [3 g
    31.   printf("-x 0.56160,0.56280,0.56401,0.56521\n");
      ' l0 O. Q) j4 h! I  O
    32.   printf("-y 0.82741,0.82659,0.82577,0.82495\n");
      \" [% U' Q' O. P2 y+ c
    33. }4 k8 v4 j6 f6 W0 E
    34. ; [  I& d5 i/ h5 [
    35. static int
      , H: f1 e1 y3 k3 L/ C
    36. m_lagrange_interpolating_set_n_arr() . O& W3 l4 g2 W3 a3 r4 u
    37. {6 G8 W7 h% _5 E# R9 b9 o\" U) |
    38.   int xi_n = 0;
      6 h2 o# F- X( N- m6 s0 @
    39.   int yi_n = 0;- b# S  m! ~: Z3 F
    40.   int n = 0;
      ! |% z0 f* B3 y( r
    41.   char *token = NULL;+ K3 H/ g\" o% m. n, `
    42.   const char *delim = ",";
      9 T' y4 B2 f* @% ?* L

    43. 3 n8 [: K! S8 J; z; ?7 P0 ?4 Z
    44.   token = strtok(m_xi, delim);, T1 k6 u- R0 K0 W' W\" ~. {1 d
    45.   while (token)
      6 s\" v4 l) G0 Q9 W% M) h
    46.   {+ @$ a/ f4 a# _, E% @
    47.     xi_n++;
      ) t\" J: o  r  M, J
    48.     n++;6 j: l2 A2 ^+ w/ s1 a3 c* Q! v: n
    49.     m_arr[n] = (float) atof(token);% @8 W1 t0 d2 u. l5 B! f
    50.     token = strtok(NULL, delim);
      6 Y/ C3 g4 I0 O3 M1 X- m8 f# J+ p
    51.   }
      7 [/ B. A0 S, S* H\" r

    52. 1 W/ R5 X+ Y' u
    53.   token = strtok(m_yi, delim);8 C* U& n\" H  u. F3 V: O+ I
    54.   while (token); }8 W  _( d; l+ ~4 E8 h6 m! C
    55.   {
      : a4 c/ A$ V& X7 R, @/ ~# V
    56.     yi_n++;4 }, m, D$ A9 H; _
    57.     n++;
      0 {0 n, x: q, n& @8 z. v2 Z
    58.     m_arr[n] = (float) atof(token);
      ; r* C% W& L  K+ G& O+ r# Q
    59.     token = strtok(NULL, delim);
      , }8 y$ ]4 L) t/ l
    60.   }
      ) v( W0 K8 c4 y* u; h
    61.   
      8 |8 x7 m. H& @( ~- ]* c
    62.   if (xi_n != yi_n)
      3 ~/ P, x' P+ W) K
    63.   {1 h. X/ c3 J  f$ b
    64.     return 0;) |; X' D% F\" e( |, I- _4 d
    65.   }
      , f. b6 h+ ~\" Z' p) ^  P% v

    66. ) m, H. L: y/ K/ T. I, {  b, B: {
    67.   m_n = xi_n = yi_n;& @! E* |) L' f5 j' Z- |
    68. $ P; s1 b7 S+ \- p: i5 X
    69.   return 1;
      + n$ T( K( Q' L) ^9 m: N# S0 X) s1 Y
    70. }0 D7 D. `\" n6 U1 m6 F
    71. 8 C* n\" c6 V( L
    72. static float
      . r6 V, s6 o& p* _8 P/ C
    73. m_lagrange_interpolating() + a, s( Z0 d\" ~% F& ]5 y\" F
    74. {
      8 F! v\" Z- [! X: j, s$ F
    75.   float l = 0.00000;
      ' k\" J' u: ^# W  \
    76.   float li;% L/ r# J6 C, @) C\" S/ l* l9 L) k
    77.   int i;$ F& p! |( s, e2 v1 X& k6 n# ^
    78.   int j;
      9 S! v/ F: ~* u4 H/ R
    79. # q\" d: y; l% ^+ {
    80. #if DEBUG+ s0 X8 \: l5 `- z, x& Y* R
    81.   printf("DEBUG at %d: enable debug mode\n", __LINE__);0 G* B7 }1 z; S0 v
    82.   unsigned int m_n = 3;3 h9 T' ?6 f8 u/ }$ O7 W% `' H\" R
    83.   float m_p = 0.5635;
        u- ^1 Q5 a7 r- e. T7 u/ L( j
    84.   float m_x[] = {0.56160, 0.56280, 0.56401, 0.56521};) S/ T3 E1 o, |
    85.   float m_y[] = {0.82741, 0.82659, 0.82577, 0.82495};
      . k- p3 y+ a2 w
    86.   
      7 d8 L\" y$ |: G9 \
    87.   for (i = 0; i < m_n; i++)
      7 u8 q# @7 }+ s* Z
    88.   {
      . S; u  ~) y. F# f! Q
    89.     li = 1.0000000;
      6 [' l  a. G. [3 P- `
    90.     for (j = 0; j < m_n; j++), S, f2 t1 O' A8 [' E+ a
    91.     {
      5 z+ T5 y, ~6 }( P/ h; X
    92.       if (j != i)
      / M& u# v! P6 ~, t$ A3 ?
    93.       {
      1 V2 b- G' G( ?' E\" m; A8 X
    94.         li = li * (m_p - m_x[j]) / (m_x[i] - m_x[j]);5 H8 G8 B% I; Z: z- _. M
    95.       }6 A, A, N4 q( m9 n
    96.     }! d\" ]! F3 Q. ^8 U  h, u
    97.     l = l + li * m_y[i];
      * h3 q# {6 \# l- B4 ~
    98.   }5 C% ~! D; P  t' t; u
    99. #else
      . G0 k9 E* Z! w7 T' L' R
    100.   if (!m_lagrange_interpolating_set_n_arr())
      , G. S  L' e! G. T) g
    101.   {
      0 E: E+ ?' H8 [; F9 m\" R- d
    102.     printf("Error: xi and yi counter is diff\n");( n2 H2 N+ g& I0 A5 r
    103.    
      4 C) x9 q2 v% d$ h0 J
    104.     return 0;) g2 |' _9 ?- W7 `% ?, J
    105.   }
      * ]) \+ j  Z% K- X6 L& h1 }
    106. ' {. c/ M/ p2 K
    107.   for (i = 0; i < m_n; i++)
      / y$ t/ H+ O; w8 N
    108.   {
      0 Y+ M- |4 S# }# r  W- G
    109.     li = 1.0000000;5 O7 e( E2 a5 i) d& v( F
    110.     for (j = 0; j < m_n; j++)
      . R. r6 f: h0 b* W5 A$ C( ]! E7 d
    111.     {8 q0 t: S/ N7 U( N3 C( T) j7 g; K
    112.       if (j != i) / }2 V+ l* u( t5 ^
    113.       {% ]2 W8 o& E% q$ v: c& F
    114.         li = li * (m_p - m_arr[j + 1]) / (m_arr[i + 1] - m_arr[j + 1]);% f; G+ T7 T0 `/ {1 i: g
    115.       }$ f) c6 [% X) \\" M* E: t
    116.     }, q; ~. W+ Q! \( J: k/ i0 e\" s
    117.     l = l + li * m_arr[i + m_n + 1];
      % Y4 e% A5 I* {
    118.   }) K, o/ X) R8 ~\" S) }: S
    119. #endif# C  l# w6 H% k( S) Q, @2 k
    120. 9 u\" E6 X\" b1 X8 C9 ^% _
    121.   return l;7 |1 K( \2 z( ^3 K
    122. }
      - T9 S* c% V4 {6 \) a
    123. , ]! I7 @' P% o8 y. Z
    124. int
      ) S) l4 ]2 R, z1 ^( p1 \
    125. main(int argc, char **argv)
      / v2 I& i8 _\" L. q) A( P) x; o
    126. {! i9 v/ i) u$ G/ Q4 Y
    127.   int c;# F: m. [  O; a' ^& r7 w5 t
    128.   extern char *optarg;' q  l( ?7 W+ A$ f+ H
    129.   float res;
      / x/ Z0 @+ f. @# [, u7 ~, Y

    130.   a; y7 f. r. u# ~+ l9 L  E
    131.   if (argc < 2) ; |# m, v: X\" m0 Z- k
    132.   {
      * H/ u7 @# @, ^- E  p
    133.     m_lagrange_interpolating_usage();
      ; k3 j& Y' J( U- J6 A
    134.    
      ! P! k+ `. q# v: c7 p; V$ ^5 v; x
    135.     return -1;
      0 L) B6 z* W' g: k3 I5 I
    136.   }
      * W. P8 y$ t2 r' C* P  J
    137. # {# U! J; k2 S1 U
    138.   while ((c = getopt(argc, argv, "p:x:y:")) != -1)
      ) O% S7 g9 N* `- @& _$ Z
    139.   {) \7 _3 t, H. n3 M' W
    140.     switch (c)   Z3 V( I9 N! G! L# i* p/ z
    141.     {' y* V  S* a\" k8 s
    142.       case 'p':
      : }% G# f( a; e+ W: R9 u5 y
    143.               m_p = (float) atof(optarg);5 [) z% \- ^: X7 |
    144.       case 'x':
      & x3 l5 ^% W: m7 U9 ]8 b3 _
    145.         m_xi = optarg;
      9 L& p# s5 R# _! u9 j. e5 O  p
    146.         break;0 p8 w0 v% T\" a! X$ f+ z
    147.       case 'y':
      3 a' `) B' @( T+ s+ ~
    148.         m_yi = optarg;
      - P' t+ H: ~/ Z; s! S
    149.         break;
      9 V+ r: ~0 B( k
    150.     }) C& B2 a/ s* G# \
    151.   }
      6 T1 I6 `$ p' K+ p! h
    152. ' ]* f; `- U! D3 q/ r3 O, W; i
    153.   res = m_lagrange_interpolating();
      # ^5 J\" W! b& f2 p6 G
    154.   printf("Lagrange interpolating with %.4f result is %.7f\n", m_p, res);
      3 E( e* P\" w  v) |, Q- E9 C3 J
    155.   
      & t0 u! c0 t7 r
    156.   return 0;0 H  T0 d; U. e2 |; }* X& o8 z- T: x
    157. }
      - M* g9 {2 H; v& g6 n  e0 U
    复制代码
    回复

    使用道具 举报

    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-11-12 06:41 , Processed in 2.245281 second(s), 105 queries .

    回顶部