QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 22417|回复: 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自定义插值函数插值计算数值计算( N. P8 ~" W* ] H3 I: K9 Z 版本号: 04y09m28; ]$ t: v5 [& G/ a 分类: 工程设计应用, a3 N* g& h' A/ |8 @; V* M c W4 G 性质: 免费软件 / B7 N I5 M" b使用说明:

    : d8 i" K& O& }( l$ v, _

    人们对EXCEL普遍熟悉的功能是表图的处理,不太知道其在工程计算(如锅炉设计计算)中的应用。复杂的工程计算常常用专业编程语言(Fortran、C、Pascal 等)来编制计算程序解决,用专业编程语言编制工程计算程序往往有下面二个缺点: 1 U( I+ {4 v2 y& Q # N& o* ~* D& ]; z1 x/ q 1) 编程语言专业性强,一般工程技术人员难以掌握,由这些专业编程语言编制的计算应用程序的维护、修改、升级都比较困难。

    4 R0 h( O1 u/ J6 Q- ?) Z7 @) w

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

    ; q! A+ f0 R$ Q% u. }

    EXCEL每一个单元格就是一个电子表格,很容易进行一般的加、减、乘、除、乘方、开方,而三角函数、指数函数在EXCEL中可以直接引用内部函数。用EXCEL编制一般的工程计算程序还需解决的有以下两个问题:(1)循环计算,(2)表、单曲线、曲线组的查找(如:锅炉设计计算中的焓值)。对于问题(1)循环计算,EXCEL在工具菜单中提供了两个命令:单变量求解和规划求解,利用这两条命令很容易解决问题(1)。对于问题(2)表、曲线的查找,EXCEL没有提供现成的函数,但也可用VLOOKUP、MATCH、IF、OFFSET等函数的组合勉强近视解决,本文重点介绍表、曲线的查找自定义函数的定义及使用。 ; U' \7 P: R3 ^ ( J; x8 S) A. E, \$ ~# h, n9 C$ F 为了更好地解决曲线查找的问题,应用C++程序设计语言,用拉格朗日插值计算法在EXCEL中建立了自定义函数,单曲线插值函数TWLQ(变量,"带路径的保存数据的文件名"),曲线组插值函数THLQ(变量1,变量2,"带路径的保存数据的文件名")。单曲线插值函数、曲线组插值函数的"带路径的保存数据的文件"包含着特定对映表、曲线的信息和计算精度的要求 (文件为Notepad编辑的txt文件) 。5 R( _. }' {2 O) R% m) ]4 ? 单曲线lagrange插值函数:double twlq(double x,char* filename);2 k; }' A5 U6 [+ M }0 D, n double twlx(double q,char* filename); 3 H. {8 q) n5 L曲线组lagrange插值函数:' ? M& o1 \5 R4 H# ^! L, e% P% t6 { double thlq(double x,double y,char* filename);1 N) q+ @$ T' m double thlx(double y,double q,char* filename);8 f3 {2 F; O0 |4 X double thly(double x,double q,char* filename);。

    * b2 T& B g3 f8 w1 Z+ T

    例:单曲线插值函数 "带路径的保存数据的文件"结构如下: + }$ q4 k. O2 Z. I' c, z@ Description @0 J1 U5 Z3 W* q n, nsel; ) K- x4 ~+ d9 U7 \; s# Z6 e8 i1 |x[0],x[1], x[2],··, x[n-2],x[n-1]; - _& {4 _: Q* v( C5 Jq[0],q[1], q[2],··, q[n-2],q[n-1]; $ Y# A4 r# G" v9 D1 l' vMinX=0.7,MaxX=0.9,OverRangeAlm=1,X=电压,XUnit=mv,Q=电流,QUnit=mA

    ; b8 C3 }) l T- W

    注解:) @) T8 c. \$ V! k Description:用户自定义描述字符串(Description中不可有@符号);3 n7 c2 v& w J/ c1 O n: 总插值点个数;% i) D7 t: }' Z$ M" | nsel:实际参与插值计算的插值点个数; 8 d& h+ V8 J$ H MinX=0.7,MaxX=0.9 取值范围;$ e9 [9 w" Q4 ~: t8 x' ` OverRangeAlm=1 越限报警 1:报, 0:不报;7 L" F; n; l% e, D2 O" F5 W2 _ X=电压,XUnit=mv,变量名称,单位。

    4 e8 q8 C/ `$ m) }7 S

    ****结论:3 D# [! m* X( m/ T l)图形化界面的插值函数数据文件生成器 LCZMaker 方便快捷生成单曲线或曲线组插值函数数据文件。( ], C5 A1 H' ~2 z0 [0 x7 @/ v! L 2)应用EXCEL自定义插值函数,在EXCEL中进行工程计算编程极为便利,比专业编程语言程序设计更易学易用、直观明了,用EXCEL编制的工程计算应用程序更易维护、修改、升级。! R0 u0 y% t( o- B7 w) [4 V# `7 R 3) EXCEL本身长于表格制作,在EXCEL中进行工程计算编程人机界面友好,输入前、输出后处理方便简单。. z% G% X5 G9 i3 V: B1 f5 t1 o' S 4)在某大型锅炉厂电站锅炉性能设计计算中已显神力。

    1 W# O, j3 e' R$ ]# \& n

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

    ! P( q+ p. k/ X7 \6 z) v) j

    [分享]插值软件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. 8 I- S% P( F0 ^$ \. K; L9 n0 n
    2. /* TODO: Lagrange interpolating
      $ L3 t& a: L1 [8 t
    3. *
      + \: S  [8 i\" g
    4. * For example, if lg2.71 = 0.4330, lg2.72 = 0.4346, then lg2.718 = ?
      $ U' R( h- J3 }% x; k( G9 n0 k
    5. * In this situation, it could be solved via lagrange interpolating
      . ^: Z4 F2 h: U/ V0 a) C, w
    6. *( s; G7 A8 e+ y. k: Z4 I( j
    7. * */) f5 }1 t& r. J2 |\" l\" T# G
    8. 6 W0 N6 c( J0 i# p7 H1 [
    9. #include <stdio.h>
      ) t* [, \! P% x  E4 j0 g\" I
    10. #include <stdlib.h>
      + A( d& O0 [, E  S0 k. k
    11. #include <string.h>3 x: ?6 k$ q# f4 V+ e3 h
    12. * z0 g  O# K) B3 y7 r: r) n
    13. #define DEBUG 04 N+ `8 Y0 c6 @4 R8 N, F; S
    14. ; D* V\" C* N& {( D( E: z9 q$ U
    15. static float m_p = 0.5635;( v3 r# y6 G- l# o
    16. static char *m_xi = NULL;7 E1 ?- n. ?3 L/ u. d9 z
    17. static char *m_yi = NULL;$ u2 f- O! d) G9 G8 S1 x9 J
    18. static float m_arr[] = {};
      & v% ^4 t+ {( C5 S' \2 N
    19. static unsigned int m_n = 0;
      + R0 N0 _. E  [
    20. 4 _! Q& l9 W4 v
    21. static void m_lagrange_interpolating_usage();2 q, R9 t% r- V( c\" P+ P9 @
    22. static int m_lagrange_interpolating_set_n_arr();* L+ X5 r# ]% z8 O4 i$ f) a  M8 G; r0 M
    23. static float m_lagrange_interpolating();
      # x4 X, D4 o\" @' U8 J: k! K1 z

    24. 6 r. [0 o3 u; \+ F8 w
    25. static void . O9 q* Y% z$ Z( `. r
    26. m_lagrange_interpolating_usage() - x- J, Z$ r- ?& `( i5 o
    27. {5 h: G; Z$ H3 |: r0 O0 a2 {
    28.   printf("Lagrange Interpolating Usage:\n");! z/ k# |. m) d# n5 X6 I
    29.   printf("bin/li -p ** -x ** -y **\n");
      / p( [4 n9 G& _6 i- {( D6 t$ s
    30.   printf("-p 0.5635\n");0 B: Q+ A; k\" G2 @8 x
    31.   printf("-x 0.56160,0.56280,0.56401,0.56521\n");
      1 }6 \# B) ]$ d% P
    32.   printf("-y 0.82741,0.82659,0.82577,0.82495\n");
      9 V# ^# q8 G* r% R7 L
    33. }6 z, J( X6 m: P+ J5 F/ E. y

    34. ( r5 p  W$ \! L& z- h
    35. static int
      0 r& \( Y7 g( {1 f
    36. m_lagrange_interpolating_set_n_arr() 8 T/ b2 G7 E0 ]' ^0 L
    37. {
      # {+ O! {# ^5 ?+ g; C5 Z* n# e
    38.   int xi_n = 0;* M4 m! G# j$ _  h
    39.   int yi_n = 0;) g1 _5 I9 s; F3 t9 ]
    40.   int n = 0;
      0 h6 U\" p! t% A
    41.   char *token = NULL;. t, J, }1 O- q3 u% C1 p; [
    42.   const char *delim = ",";, }' b- M( O# Q# ?1 I* N
    43. - J2 o% e7 O* u& N+ ?' v
    44.   token = strtok(m_xi, delim);! i1 \( i& x5 T  u
    45.   while (token)6 u6 k\" {4 U' S4 |8 S
    46.   {# e- H( M\" Z! S2 s6 Z1 U
    47.     xi_n++;
      4 b& T# T' i& o  W, @1 {9 w, ^' r8 C
    48.     n++;- J\" B( q, w\" X\" a0 J
    49.     m_arr[n] = (float) atof(token);
      2 U9 i# C: u/ y5 R9 s4 f
    50.     token = strtok(NULL, delim);
        J2 \- p: t# `2 C  }
    51.   }4 P( v2 Y+ R7 U2 E* J

    52. 5 F- m/ ?# F1 s! c0 @
    53.   token = strtok(m_yi, delim);; ]* D2 B8 h) O8 ~) W1 z
    54.   while (token)
      / U( a; O  ]6 g7 `
    55.   {
      6 h  R8 P' X\" G7 Y
    56.     yi_n++;; ^\" D& _. ?8 _0 }
    57.     n++;& @9 `& ~# I! d
    58.     m_arr[n] = (float) atof(token);
      1 V  [\" D# ^1 w( q( [
    59.     token = strtok(NULL, delim);( y( a1 ?/ ~. e
    60.   }# @2 @8 l$ w' E( z* q\" ]5 B2 |5 y
    61.   
        M5 M, Y( s  ]9 L  E4 B
    62.   if (xi_n != yi_n)
      $ ^% ]5 j; V$ j/ x. \
    63.   {
      / \. u4 ^1 _, @- X1 r9 A# _
    64.     return 0;
      * g, |6 m$ I( ^4 b
    65.   }\" [* M; |/ T& i2 E
    66. 5 N! @2 A\" z+ Y  O; W
    67.   m_n = xi_n = yi_n;
      ! N' ?+ t+ X1 T1 F  v
    68. # O, G& e, ?! o; w/ a8 K5 s
    69.   return 1;
      3 v! \# N. o* ^
    70. }
      % h0 y  h) S/ _( C0 k2 Y# E

    71. 6 f# V+ D& A! K$ V+ ?: F
    72. static float 8 Z- J# K( z0 P7 i
    73. m_lagrange_interpolating() 2 f. q\" i! \$ r* D
    74. {
      ! |# P+ Y  W5 S4 S3 _! c* q7 F
    75.   float l = 0.00000;
      : E. H5 `9 g/ @8 G- ^% ]' G
    76.   float li;\" L4 D\" l\" H! I) J. F
    77.   int i;+ _8 h& Y/ s/ @5 d7 t3 ?0 e
    78.   int j;
      - V- @0 Z9 m9 X6 U5 w

    79.   {3 |1 h, M7 E7 u- `' S  V, B0 B
    80. #if DEBUG# o% U8 w0 V7 Q& Y4 q* l
    81.   printf("DEBUG at %d: enable debug mode\n", __LINE__);' E2 `7 A; b& \: e
    82.   unsigned int m_n = 3;$ q7 l. }- Z! W' j3 \$ O
    83.   float m_p = 0.5635;
      4 N* |2 E5 p- J4 D9 `; c, x# B\" ?
    84.   float m_x[] = {0.56160, 0.56280, 0.56401, 0.56521};
      4 I) J3 A+ G' K
    85.   float m_y[] = {0.82741, 0.82659, 0.82577, 0.82495};' p5 {3 e; w* d. y7 l
    86.   
      6 n3 {2 t' i- e& v
    87.   for (i = 0; i < m_n; i++)
      7 X3 a  A\" h! O* n
    88.   {
      ! G/ \; ]\" L9 @- B2 d: u9 w
    89.     li = 1.0000000;
      , x+ l( K6 K4 Q2 h- u0 z+ i
    90.     for (j = 0; j < m_n; j++)\" F% O\" ]6 e2 i, R
    91.     {
      $ I* B8 J2 S\" R: ]
    92.       if (j != i)
      \" s! o- V0 G, L
    93.       {- Y2 u5 u/ M* N# S\" k
    94.         li = li * (m_p - m_x[j]) / (m_x[i] - m_x[j]);
      % i  `3 p( {\" H2 }
    95.       }* _\" |) [* |2 L) x5 I1 G7 [
    96.     }
      ! e$ ]0 q7 o$ @1 ~  j\" r7 x. Z5 P& Q
    97.     l = l + li * m_y[i];
      ' g- P8 {1 o: Y( c* x# n/ i
    98.   }
        c1 p$ W. O0 u2 M\" L
    99. #else1 a- A, A& t\" c' J
    100.   if (!m_lagrange_interpolating_set_n_arr())
      ; `$ ?- l5 \3 V8 _
    101.   {4 l- B+ u( w/ t# O
    102.     printf("Error: xi and yi counter is diff\n");; ^8 W% i7 K; o
    103.    
      * r* _' v8 E4 q5 V% G& ~
    104.     return 0;
      3 c8 S* G' Q, Z& ^\" c% s: D1 @
    105.   }& V2 T- z2 q) ~
    106. : [2 D3 R! O' D; k  ?3 G\" j8 t
    107.   for (i = 0; i < m_n; i++)
      : h& W3 w' F& ^! N6 u
    108.   {+ d7 Y/ ~; J, t/ x
    109.     li = 1.0000000;7 _! F( p1 Y8 Z, V( n' s
    110.     for (j = 0; j < m_n; j++)
      9 z- G& R. \- n6 [+ w) g1 V# W
    111.     {5 A2 E; E. D2 \! z$ ^; n, `
    112.       if (j != i)
      0 @$ O  _3 r; w& t\" `\" U
    113.       {
      6 Y; B4 |- a2 }' q1 ?
    114.         li = li * (m_p - m_arr[j + 1]) / (m_arr[i + 1] - m_arr[j + 1]);
      7 j\" y$ S4 w5 F% ^% y2 ~
    115.       }
      ! ?# b: F9 G+ B3 Y
    116.     }
      , r, s, C3 W5 S2 T
    117.     l = l + li * m_arr[i + m_n + 1];
      7 p, U, ~4 x4 @/ q  @. d\" X
    118.   }
      ( E) v* _0 E' d  C
    119. #endif
      ( ~7 s9 v7 @4 Q* t/ Z! V- ?- _0 a, P
    120. $ w\" P- h: {2 [$ n
    121.   return l;4 Q! B9 F: m- u+ {2 V( K# G+ f4 h
    122. }
      + k% X8 ?: T8 N1 [9 G
    123. $ [) {9 U  V: t2 k) |
    124. int
      ) B4 n. U5 z8 i* P1 u8 @# W
    125. main(int argc, char **argv) ) s+ x$ H# U* N. R' S2 h
    126. {
      ; m, P( f, I. l! r
    127.   int c;
      6 _9 p% _4 t) b\" u4 L' f( u
    128.   extern char *optarg;\" g! N0 ?8 p& e- n\" D1 \1 I
    129.   float res;
      , l3 }  b5 Y: i2 l9 r

    130. + ~* f& f- _8 A% p4 D
    131.   if (argc < 2) * |& J7 q. g* i. u
    132.   {
      + A0 e' `2 y& g1 z( {  P
    133.     m_lagrange_interpolating_usage();/ x- L& h% G$ f2 T
    134.     : p4 @  q4 q. p& A% L# e
    135.     return -1;* a2 J* x8 A- X6 ^$ I. k& P
    136.   }
      ; ]% b5 J: }5 {+ Q

    137. 5 e1 z) u( C* `! S
    138.   while ((c = getopt(argc, argv, "p:x:y:")) != -1)
      & A\" N& s$ O' R- L! j- Z
    139.   {
      7 |4 A4 g5 `; e
    140.     switch (c)
      7 H' H0 |2 W$ |' V5 [  O( ^
    141.     {
      8 Y\" x4 X\" ~\" w! L2 z
    142.       case 'p':
      * G& D  W: e' T! d
    143.               m_p = (float) atof(optarg);: p- w2 e% |) o, \
    144.       case 'x':
      # D# m% N3 I. q: O% w
    145.         m_xi = optarg;
      $ Z& |% a; K, M! }: t
    146.         break;# J9 ^6 D0 t7 Y3 R' N
    147.       case 'y':
      : ]# w0 c! R3 _# L
    148.         m_yi = optarg;0 ?* `\" ?8 Z% D4 y4 l
    149.         break;& @, g& p9 t- r3 K. S1 _
    150.     }6 N3 u, d, o; M) [
    151.   }
      , b3 C; J7 R2 Y( ]! n\" K

    152. , J: X/ b, V) `) u4 O, m
    153.   res = m_lagrange_interpolating();
      # `- n  C' B- X1 z, m8 L. Q' g# z7 y
    154.   printf("Lagrange interpolating with %.4f result is %.7f\n", m_p, res);
      & E: R# a# A* H6 O0 S6 Q. B1 Z
    155.   : n- w% s  _' w. l# l+ Z( V& h
    156.   return 0;: r5 i5 W3 ~! k
    157. }8 s8 A* z3 B' U5 s+ }# G8 K
    复制代码
    回复

    使用道具 举报

    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-7-27 19:14 , Processed in 0.405304 second(s), 104 queries .

    回顶部