QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 22152|回复: 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自定义插值函数插值计算数值计算: B) k* t: {, [' X1 G6 n9 r- E 版本号: 04y09m28 ; R. M: k! D7 `' n分类: 工程设计应用 6 `1 M8 U" q3 c* a性质: 免费软件" E$ d. j5 S1 e1 |4 m 使用说明:

    # x. I6 J& m" [

    人们对EXCEL普遍熟悉的功能是表图的处理,不太知道其在工程计算(如锅炉设计计算)中的应用。复杂的工程计算常常用专业编程语言(Fortran、C、Pascal 等)来编制计算程序解决,用专业编程语言编制工程计算程序往往有下面二个缺点: + ?" p8 l0 l1 d K' j5 [5 O % ]% r4 K$ N& z0 O 1) 编程语言专业性强,一般工程技术人员难以掌握,由这些专业编程语言编制的计算应用程序的维护、修改、升级都比较困难。

    4 E* r& [9 i4 x6 w* h# s

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

    2 K5 O. O2 J/ [$ D: B( w9 ?

    EXCEL每一个单元格就是一个电子表格,很容易进行一般的加、减、乘、除、乘方、开方,而三角函数、指数函数在EXCEL中可以直接引用内部函数。用EXCEL编制一般的工程计算程序还需解决的有以下两个问题:(1)循环计算,(2)表、单曲线、曲线组的查找(如:锅炉设计计算中的焓值)。对于问题(1)循环计算,EXCEL在工具菜单中提供了两个命令:单变量求解和规划求解,利用这两条命令很容易解决问题(1)。对于问题(2)表、曲线的查找,EXCEL没有提供现成的函数,但也可用VLOOKUP、MATCH、IF、OFFSET等函数的组合勉强近视解决,本文重点介绍表、曲线的查找自定义函数的定义及使用。/ x( f: Y# |) z" k 4 j* ^ }% O* ~& i9 J# f 为了更好地解决曲线查找的问题,应用C++程序设计语言,用拉格朗日插值计算法在EXCEL中建立了自定义函数,单曲线插值函数TWLQ(变量,"带路径的保存数据的文件名"),曲线组插值函数THLQ(变量1,变量2,"带路径的保存数据的文件名")。单曲线插值函数、曲线组插值函数的"带路径的保存数据的文件"包含着特定对映表、曲线的信息和计算精度的要求 (文件为Notepad编辑的txt文件) 。- v: s: L$ _) h6 V' Y7 p+ i 单曲线lagrange插值函数:double twlq(double x,char* filename);+ Q8 t+ f" E2 C+ O7 {' x! c# S5 q: o double twlx(double q,char* filename);$ g# w6 w N+ `8 c/ T$ ]# G9 ?) f 曲线组lagrange插值函数: ! X7 C# Y! z6 X! b! } \ double thlq(double x,double y,char* filename); 9 C# Q4 g5 I# G x double thlx(double y,double q,char* filename);+ x8 {2 v: \: d$ S4 n) E double thly(double x,double q,char* filename);。

    g5 ^9 x: _ J2 Y

    例:单曲线插值函数 "带路径的保存数据的文件"结构如下: - E D6 l3 P0 m8 h@ Description @ 3 a8 C; S% x4 b- }$ y n, nsel; 4 g1 b' ^. i3 d( e' w4 Ix[0],x[1], x[2],··, x[n-2],x[n-1]; 8 C* O: X5 Z$ _7 J3 O7 G* ]0 vq[0],q[1], q[2],··, q[n-2],q[n-1];: R4 R* w1 }4 k: j$ R MinX=0.7,MaxX=0.9,OverRangeAlm=1,X=电压,XUnit=mv,Q=电流,QUnit=mA

    3 e \7 [; J& D2 J

    注解:4 q7 F4 r2 Y1 m3 X5 { Description:用户自定义描述字符串(Description中不可有@符号); 3 E0 Y3 [$ B' s( u4 |# `2 X& D n: 总插值点个数; ) D+ U( i6 K/ G! ?' X nsel:实际参与插值计算的插值点个数;, i6 m ~9 h6 H! b) ?$ B MinX=0.7,MaxX=0.9 取值范围;. p4 _ B* X6 l, P" a0 [, }8 ]0 _ OverRangeAlm=1 越限报警 1:报, 0:不报; * W: _5 M& E( s# }2 r4 L1 f X=电压,XUnit=mv,变量名称,单位。

    . j" K0 L% V1 w2 C% d0 i+ g! B

    ****结论:+ K+ \* a: {& T l)图形化界面的插值函数数据文件生成器 LCZMaker 方便快捷生成单曲线或曲线组插值函数数据文件。 $ ~( u+ ?/ x6 y2 a o. Y* X/ z2 [/ Q 2)应用EXCEL自定义插值函数,在EXCEL中进行工程计算编程极为便利,比专业编程语言程序设计更易学易用、直观明了,用EXCEL编制的工程计算应用程序更易维护、修改、升级。0 o" H4 u8 s( s% t: Y. A 3) EXCEL本身长于表格制作,在EXCEL中进行工程计算编程人机界面友好,输入前、输出后处理方便简单。+ d: ~( m/ k1 |/ T4 Q 4)在某大型锅炉厂电站锅炉性能设计计算中已显神力。

    . Z9 v* T; A4 s0 m+ `1 P

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

    # P% \5 D1 U7 {- U; 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. ) L5 ^5 `  k( A
    2. /* TODO: Lagrange interpolating 8 W$ y5 X* ?  C\" H: P- }
    3. *( n/ K) `8 j5 P
    4. * For example, if lg2.71 = 0.4330, lg2.72 = 0.4346, then lg2.718 = ?
      . D1 b! Q) s; l- H4 e
    5. * In this situation, it could be solved via lagrange interpolating
      & Y- Z. A4 l+ ~+ q9 ?1 g- P+ Y5 a
    6. ** y* K3 G9 S, a9 n* q) L\" s
    7. * */+ u; _/ q! O\" \
    8. 9 [3 p0 O  \* Z/ X  }% R
    9. #include <stdio.h>* S# e( Z6 G% i; f. m1 t+ S7 n
    10. #include <stdlib.h>( e9 q( _0 d  F. B  m: H
    11. #include <string.h>
      ( D2 d* P6 J0 t' o3 h. G- O

    12. 1 x# R2 K9 ?# _* g! p, j0 N
    13. #define DEBUG 0
      2 @9 `8 ?/ q; ^1 g5 ?6 i  x8 K

    14. . j. D4 ?* w( s$ I! L0 ^
    15. static float m_p = 0.5635;
      * Q- g  }\" ]9 A6 D$ A; o
    16. static char *m_xi = NULL;
      $ {: y9 a$ L# X2 t
    17. static char *m_yi = NULL;: |+ ?! \) u- O1 \. h
    18. static float m_arr[] = {};! h( i; X# z7 `* F
    19. static unsigned int m_n = 0;
      1 E\" _  G& p( d6 ]/ V

    20. 7 C! l: n5 e8 m  B\" g6 `, P
    21. static void m_lagrange_interpolating_usage();7 J0 N5 V\" W2 G8 N- m0 J5 q
    22. static int m_lagrange_interpolating_set_n_arr();
      / B/ u\" |. T8 Z' e  V
    23. static float m_lagrange_interpolating();$ P8 G) }% ^3 K8 B\" j7 T

    24. 7 |\" u/ [' G& T- K8 \0 s
    25. static void
      , M* [0 g- [\" A! a4 i! I9 n, i: k4 B
    26. m_lagrange_interpolating_usage()
      7 }$ q6 s1 l' S; e
    27. {
      ! L% v; `3 z1 n. q2 i0 h5 D
    28.   printf("Lagrange Interpolating Usage:\n");
      6 T( D8 J/ X6 j& u9 r. K. X' E
    29.   printf("bin/li -p ** -x ** -y **\n");
      , V1 u\" x\" a- \2 C7 \
    30.   printf("-p 0.5635\n");: o9 i3 P# n5 ~. a3 C- ]. A+ }( O
    31.   printf("-x 0.56160,0.56280,0.56401,0.56521\n");
      5 r% U' C: t' `4 u; {
    32.   printf("-y 0.82741,0.82659,0.82577,0.82495\n");
      1 v\" c' a$ I/ u! |
    33. }
      # r: E+ j( \5 A9 @8 g; n
    34. 8 p1 s. F, H7 h/ F
    35. static int & Q; u' ^4 T8 A  c* d6 M
    36. m_lagrange_interpolating_set_n_arr() ( D6 G; [8 [\" t- }
    37. {
      : i: K  k0 J* O' Y
    38.   int xi_n = 0;
      5 @% m  W# }; Z  m
    39.   int yi_n = 0;# p! q! N( N9 ]
    40.   int n = 0;
      , W4 o! t- E( f2 _! w+ S9 ~! Q
    41.   char *token = NULL;: t+ y  r9 h; d6 Q\" c
    42.   const char *delim = ",";( m: @: P2 j8 k5 \% r/ j& K

    43. # T: x1 R+ x+ F0 v! @* \
    44.   token = strtok(m_xi, delim);
      3 k- Y1 q' q: y! J
    45.   while (token)
      # o6 h1 {\" z/ M: G3 C# G
    46.   {
      . n( ?+ ~0 ^1 [8 I% Q( o
    47.     xi_n++;! ^8 j$ w/ j\" z' S
    48.     n++;
      7 L! y+ ]; g8 p. Z% ^8 ^
    49.     m_arr[n] = (float) atof(token);. h2 H& Y0 O\" ^
    50.     token = strtok(NULL, delim);
      1 d: {4 E' }( q8 N5 o% y6 {4 o\" I
    51.   }
      : ?  S1 V, S+ F) k
    52.   c, d, V  M7 K* o2 t2 s
    53.   token = strtok(m_yi, delim);$ A3 H: I2 l# G3 H. z4 X8 _
    54.   while (token)
      + u\" C7 K& o) N7 g% d
    55.   {
      + i4 B+ r- o7 q\" o2 @. N
    56.     yi_n++;! w# c! O  C, G
    57.     n++;) X3 s8 |3 T# X' p
    58.     m_arr[n] = (float) atof(token);
      , a! ^. y3 E0 q/ V* y: [9 t
    59.     token = strtok(NULL, delim);8 ?# y9 P: b6 d0 L, w* t0 x
    60.   }
      : ^; C4 ]6 C7 y' M  |
    61.   
      9 [9 \, v3 z\" D+ L1 g9 W
    62.   if (xi_n != yi_n)
      3 D$ @; b! U5 j. n* g. \
    63.   {
      , I. {$ p7 ]) X; I( b: j3 ^
    64.     return 0;\" [2 O3 J2 ?. K6 |3 j+ m# s\" }
    65.   }
      ! F# @8 _6 s# K$ _  X/ T

    66. 9 h8 v4 }3 B. r0 _& \' }- l
    67.   m_n = xi_n = yi_n;, ^* V% k- E4 F
    68. . D7 T2 m5 i6 a1 L
    69.   return 1;
      ! D/ C0 h/ \1 w0 Q: O& s
    70. }/ u# P$ N: f8 q) D) v

    71. 3 F- Z$ L- _% E
    72. static float
      7 H0 z+ f3 v- b
    73. m_lagrange_interpolating()
      ! ]- ?) U  D7 }& Z9 r/ w) i
    74. {+ I( u9 h, F$ S7 l* P  C1 U  ?
    75.   float l = 0.00000;
      / s3 m  {+ T, c! e( B9 U9 S
    76.   float li;
      # ~; F% t- W3 e' q+ s
    77.   int i;& w+ Q: g( X+ w; ?: G0 {
    78.   int j;- N% w8 T\" v! r2 S
    79. 5 H\" ~$ w/ G; }8 H% D6 S
    80. #if DEBUG
      ; B! X& u1 A# v4 a6 M. r
    81.   printf("DEBUG at %d: enable debug mode\n", __LINE__);/ o- ~! o1 r0 L' U# S
    82.   unsigned int m_n = 3;- I3 i$ h8 b8 C  e/ F2 \/ \
    83.   float m_p = 0.5635;  Y2 \; _/ b% w
    84.   float m_x[] = {0.56160, 0.56280, 0.56401, 0.56521};5 W' V- P' e\" i8 }4 i% @
    85.   float m_y[] = {0.82741, 0.82659, 0.82577, 0.82495};. r  c6 C3 C7 a+ S7 r1 z8 l2 a0 {4 K
    86.   * F! P# l' W- |7 `5 c3 |- r
    87.   for (i = 0; i < m_n; i++)
      % \* c' }& Z6 A0 G9 d
    88.   {
      * x& n\" P/ T, Q2 b: X/ ]\" i+ m\" I
    89.     li = 1.0000000;
      4 h4 q( B) E1 u% c
    90.     for (j = 0; j < m_n; j++)6 K: [6 }% P' ]: @6 F4 ]3 T) O
    91.     {
        R1 g7 h1 k- q\" X7 I
    92.       if (j != i)5 E! W: g9 _* D7 G# s$ m$ l
    93.       {
      * R( U2 w2 E7 _/ m  h- v
    94.         li = li * (m_p - m_x[j]) / (m_x[i] - m_x[j]);
      6 M4 W8 }# ^% o0 \
    95.       }6 G6 }6 L6 c3 |
    96.     }' ?' J4 {# t2 s1 Y5 I  j$ {
    97.     l = l + li * m_y[i];
      9 i7 _1 ~- E' W- N5 m
    98.   }
      ; R+ {; v* ?; E5 `) Q0 c; p: Z4 A& b
    99. #else4 U* b& q) x/ g7 p; U5 `
    100.   if (!m_lagrange_interpolating_set_n_arr()) \" u% e* E8 H2 Y- \' V3 y
    101.   {2 B; d3 C* c* V, v
    102.     printf("Error: xi and yi counter is diff\n");! K. f- X; O& Z
    103.     $ i; r\" ~8 A' h' ~6 l# |
    104.     return 0;
      + D) A5 Y8 Q4 n' |1 O0 j; u
    105.   }3 C7 ^; B. u0 c

    106. # y- E: k6 w( L, V$ F( a6 o) g8 y\" e
    107.   for (i = 0; i < m_n; i++)
      ; ^3 C\" ^5 O; D
    108.   {! R- X, K7 n# Q
    109.     li = 1.0000000;) r, s# r' ~3 p0 R. Y
    110.     for (j = 0; j < m_n; j++)
      ; w7 K. X\" |* j% _8 T8 S: m
    111.     {7 [' z, B9 |2 `9 ^9 c
    112.       if (j != i) : J9 K- I) J$ d$ {6 T  Y+ W
    113.       {
      3 K1 _$ i1 a' A) g+ d) _1 }8 L
    114.         li = li * (m_p - m_arr[j + 1]) / (m_arr[i + 1] - m_arr[j + 1]);% {5 q7 }, B8 ?\" H) I! }+ a
    115.       }
      6 k0 R5 `0 W0 v$ V' \
    116.     }
      % {: F9 i$ ^- `
    117.     l = l + li * m_arr[i + m_n + 1];
      / C+ S* y9 T( ]( L2 p; p% B3 e
    118.   }: `: @# Z- K* j. s+ U
    119. #endif
      / V# b\" E% H# b9 _6 j1 V: G, x, n
    120. ' u& D/ C5 B) O  u; X8 a( |3 Q
    121.   return l;
      \" o( |8 p) ]' |; \1 l. w7 m3 A
    122. }
      ' Q: Q- W2 `+ M/ G& p9 f

    123.   C3 c. r* B9 L\" f5 F
    124. int
      4 a! k* Y8 ~# V6 h& Y
    125. main(int argc, char **argv)
      6 W6 D$ [1 X. i' b) g6 J$ y# `* I& v
    126. {1 u' c\" s, E3 F! h! i. M
    127.   int c;
      / k  |3 N  S% t. A3 i! ~
    128.   extern char *optarg;
      ! ]* A  G\" R5 b0 S3 N, s/ q
    129.   float res;
      $ g, J7 u; y/ t0 K% z8 Q

    130. , j+ T0 o. }\" |1 Y) v4 ?
    131.   if (argc < 2)
      3 J, L, |\" _7 U/ p\" D! ~
    132.   {
      $ H+ J% ^- C( d& P( O7 `
    133.     m_lagrange_interpolating_usage();' l0 R1 C) k) g# ^4 H( C3 ~
    134.    
      ' }0 R; X6 O! h7 s. }+ X
    135.     return -1;9 z7 E6 n. N7 F' P) n( o4 \! S8 {$ `
    136.   }
      5 d/ w\" I. G4 b0 P& e
    137. ; y6 V; o\" d) ~8 z3 n
    138.   while ((c = getopt(argc, argv, "p:x:y:")) != -1) 7 j: c# J; C, e. s1 s( C. x
    139.   {( u% k# R) s1 E8 n2 I4 _9 x
    140.     switch (c) 9 \' N- Z- [5 @; @
    141.     {% v& z3 e, A) @6 K3 T3 o) q4 p% K
    142.       case 'p':
      9 p& t# ]' R- t5 W
    143.               m_p = (float) atof(optarg);
      ) g, K8 [6 X2 K2 A3 h1 b
    144.       case 'x':
        r: B- y0 V6 Z* ]
    145.         m_xi = optarg;
      ; B- M: X1 ^2 t0 d) f! J
    146.         break;: @/ {6 R- E2 q$ m0 _; @
    147.       case 'y':
      - j# S\" g+ x1 d8 ~
    148.         m_yi = optarg;\" U8 s2 P\" R  ]
    149.         break;0 Q# \: B2 W& o$ P5 @5 E
    150.     }
      & X, [( A' T2 W3 y9 @
    151.   }
      . W* Z& g' o$ K' b3 a: y. ]
    152. - s6 E  y- P! x0 z* |7 R
    153.   res = m_lagrange_interpolating();
      2 e3 h  x6 T1 H- C; _7 `
    154.   printf("Lagrange interpolating with %.4f result is %.7f\n", m_p, res);5 D1 q7 u: b/ G( }
    155.   0 Z5 e+ Z$ H0 C% K\" j2 L# h2 j$ T
    156.   return 0;
      ( ?. R4 t( _$ L& E+ x7 c- u' U
    157. }! e5 ]5 n! u% r- y
    复制代码
    回复

    使用道具 举报

    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-11 17:40 , Processed in 0.547672 second(s), 105 queries .

    回顶部