QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 22402|回复: 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自定义插值函数插值计算数值计算 ) M5 c$ {1 X) D6 M* W# ?版本号: 04y09m28 9 u6 [- |5 [7 y/ {, k( f分类: 工程设计应用 / C/ u) W: R$ C$ ?" r$ H; J5 H5 u! Y性质: 免费软件 ' x @. d; F. R. X0 ~使用说明:

    M5 k3 A( S# J( P

    人们对EXCEL普遍熟悉的功能是表图的处理,不太知道其在工程计算(如锅炉设计计算)中的应用。复杂的工程计算常常用专业编程语言(Fortran、C、Pascal 等)来编制计算程序解决,用专业编程语言编制工程计算程序往往有下面二个缺点:1 \' Z( O! G+ O" H % u( }: L2 p5 x& E 1) 编程语言专业性强,一般工程技术人员难以掌握,由这些专业编程语言编制的计算应用程序的维护、修改、升级都比较困难。

    @( ]$ P' Q8 w6 a" e+ B* m& h% p

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

    1 d+ r6 k# k! L7 P, F: A2 z% ^- d

    EXCEL每一个单元格就是一个电子表格,很容易进行一般的加、减、乘、除、乘方、开方,而三角函数、指数函数在EXCEL中可以直接引用内部函数。用EXCEL编制一般的工程计算程序还需解决的有以下两个问题:(1)循环计算,(2)表、单曲线、曲线组的查找(如:锅炉设计计算中的焓值)。对于问题(1)循环计算,EXCEL在工具菜单中提供了两个命令:单变量求解和规划求解,利用这两条命令很容易解决问题(1)。对于问题(2)表、曲线的查找,EXCEL没有提供现成的函数,但也可用VLOOKUP、MATCH、IF、OFFSET等函数的组合勉强近视解决,本文重点介绍表、曲线的查找自定义函数的定义及使用。 $ d1 n/ u4 A$ M( Q6 g1 ^' s- z7 A& } . a2 g- n, s; E9 _' {5 O" C3 | 为了更好地解决曲线查找的问题,应用C++程序设计语言,用拉格朗日插值计算法在EXCEL中建立了自定义函数,单曲线插值函数TWLQ(变量,"带路径的保存数据的文件名"),曲线组插值函数THLQ(变量1,变量2,"带路径的保存数据的文件名")。单曲线插值函数、曲线组插值函数的"带路径的保存数据的文件"包含着特定对映表、曲线的信息和计算精度的要求 (文件为Notepad编辑的txt文件) 。 6 Z ^" |( P. q" `% h; T, Z* r1 s7 Z单曲线lagrange插值函数:double twlq(double x,char* filename);# g( d) _' e T- a5 q' W4 I double twlx(double q,char* filename);, x2 O$ M' W# C 曲线组lagrange插值函数:) C. G& f7 h7 r double thlq(double x,double y,char* filename); - P1 `% l0 q$ d# y# F8 t9 q' i double thlx(double y,double q,char* filename); 1 s4 V% C- i5 ^" |4 j7 P7 A double thly(double x,double q,char* filename);。

    + P' U& H) W) D9 A. p. U* [8 y

    例:单曲线插值函数 "带路径的保存数据的文件"结构如下: 5 j% W! C. [0 y" j@ Description @ 1 X: X- Z5 @0 Q2 [" a n, nsel; 5 f" F5 N" t vx[0],x[1], x[2],··, x[n-2],x[n-1];/ R+ e1 r! ^ E$ g6 m q[0],q[1], q[2],··, q[n-2],q[n-1]; 6 p: A4 T" z3 | n" \" b1 ^MinX=0.7,MaxX=0.9,OverRangeAlm=1,X=电压,XUnit=mv,Q=电流,QUnit=mA

    ! H9 W# r: K- N- [ E( q

    注解:$ W7 ^; P3 N' Q$ Z1 R, a% B( M Description:用户自定义描述字符串(Description中不可有@符号); % m" ]; L( m% u2 F `2 Y% ? n: 总插值点个数;% b9 s z' `$ W% ~ nsel:实际参与插值计算的插值点个数; & U+ }0 k; m. \* j% A5 T MinX=0.7,MaxX=0.9 取值范围;; S; O) h3 y0 e/ g' O7 A1 [ OverRangeAlm=1 越限报警 1:报, 0:不报; t; T5 o5 S, p X=电压,XUnit=mv,变量名称,单位。

    , |: d0 ^) q. D: |

    ****结论:9 Z$ g/ I. U8 y; j( c) ^& q. \ l)图形化界面的插值函数数据文件生成器 LCZMaker 方便快捷生成单曲线或曲线组插值函数数据文件。4 P4 O' @( y- }- [* T 2)应用EXCEL自定义插值函数,在EXCEL中进行工程计算编程极为便利,比专业编程语言程序设计更易学易用、直观明了,用EXCEL编制的工程计算应用程序更易维护、修改、升级。3 d$ \" w/ S6 f0 f 3) EXCEL本身长于表格制作,在EXCEL中进行工程计算编程人机界面友好,输入前、输出后处理方便简单。, r: q+ ?$ ^% [9 [" |# I* [$ o) z 4)在某大型锅炉厂电站锅炉性能设计计算中已显神力。

    ! n0 e. P& C8 c1 B( k( b

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

    ! Z+ T8 H# G) K) P1 C: R6 i

    [分享]插值软件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. . ~! @* C- _  E( e
    2. /* TODO: Lagrange interpolating 3 H  B2 z1 k# t; p1 C$ F2 Z\" \
    3. *
      1 k: }: A5 N( p0 n' S6 c4 V# K  m
    4. * For example, if lg2.71 = 0.4330, lg2.72 = 0.4346, then lg2.718 = ?
      8 _8 o8 U2 T9 o: ]5 ~' S
    5. * In this situation, it could be solved via lagrange interpolating+ B4 R% }0 O7 v$ o, r# _
    6. *
      - \$ T5 X# M* ^
    7. * */
      1 ^* [7 {5 w6 u/ ^. A
    8.   @% o2 n8 u1 H# G/ p7 h
    9. #include <stdio.h>+ c3 t4 A. n\" n. U
    10. #include <stdlib.h>; A) J  B7 `% D! l  v, L% n
    11. #include <string.h>3 c- ~3 `- j# H( j6 C* z8 A\" W; I

    12. ( l9 v5 R8 G: Q7 ^
    13. #define DEBUG 0; w' ]3 F4 E+ Y. z! e
    14. & w# N* ?6 O. `8 \
    15. static float m_p = 0.5635;) G( P0 L& `* J
    16. static char *m_xi = NULL;' K+ {: C, [% a) {2 a
    17. static char *m_yi = NULL;) }0 V+ X, ^% k
    18. static float m_arr[] = {};3 H) s\" s8 ]2 v3 e1 J7 T% J( F. V
    19. static unsigned int m_n = 0;- d7 V: N; Y7 X2 E/ r7 w0 P1 Y2 a  E' u
    20. 6 ]- I* {: p\" V/ m1 ]3 \) U% h' H, G
    21. static void m_lagrange_interpolating_usage();
      * T4 Q0 y  Z0 V8 K; _
    22. static int m_lagrange_interpolating_set_n_arr();& u! P% o4 n; C. \+ b& L  a
    23. static float m_lagrange_interpolating();
        T3 F) j* I$ L. @0 C) u- D; R
    24. 5 H* P3 I7 \3 c4 w, t
    25. static void
      + r* i2 W  _4 I- [) |
    26. m_lagrange_interpolating_usage() 1 m6 b+ h. o/ e
    27. {
      7 C( J2 O\" v* D9 P5 d) j
    28.   printf("Lagrange Interpolating Usage:\n");' m& [$ C8 d) A$ ~1 Q. V8 `5 M
    29.   printf("bin/li -p ** -x ** -y **\n");- l$ \! B* a$ j( L' X! A. M
    30.   printf("-p 0.5635\n");1 a2 ]4 F3 \, D% i
    31.   printf("-x 0.56160,0.56280,0.56401,0.56521\n");\" O6 F: ^# \; d! u
    32.   printf("-y 0.82741,0.82659,0.82577,0.82495\n");/ H8 d, F$ \' r; k
    33. }: q) l$ m! T9 M  c4 ]; B

    34. $ c& E. {0 Q( Q\" ~7 K* Q
    35. static int 2 e/ G9 d9 z) K) S
    36. m_lagrange_interpolating_set_n_arr()
      - V7 c6 A* J/ f$ o
    37. {4 |: D! h6 Z# U
    38.   int xi_n = 0;
      / O0 A- j! e) B* F3 u) {4 Q* e
    39.   int yi_n = 0;! u' o7 Q# @; _
    40.   int n = 0;
      - W9 L# H* |6 _! [, V
    41.   char *token = NULL;1 e! ]7 H5 y, h9 [7 H/ x9 ~5 W3 V
    42.   const char *delim = ",";% a! @5 `# y0 t. i& e; j8 u: z

    43. ; d- |8 L2 k. e# L( ?% o
    44.   token = strtok(m_xi, delim);2 k: Q- n/ s9 O! W7 Q
    45.   while (token)
      * H0 M% t$ H% F) V/ n
    46.   {4 I* J  o& d) g
    47.     xi_n++;
      5 K# N. U3 t8 a$ p! E! n4 G
    48.     n++;: h3 C8 n0 ~4 C4 K6 }1 l
    49.     m_arr[n] = (float) atof(token);
      1 I2 @6 k* Q& s4 b4 @9 ]9 W* R
    50.     token = strtok(NULL, delim);
      ' N% M; N( v  i) @
    51.   }
      , f/ K; y6 l2 _* N: Y

    52. 9 [6 F; R  ^: f3 q2 s
    53.   token = strtok(m_yi, delim);\" M* ]4 B/ E. h1 G% b7 d! D# ~
    54.   while (token)
      0 F  p5 Y: x& `# D6 R- h
    55.   {# w6 I* @3 k8 [) e/ q\" c; D
    56.     yi_n++;
      : b  Q\" D' o2 l5 u) Z# K! Y0 ~
    57.     n++;
        ]8 @3 N  j6 ]
    58.     m_arr[n] = (float) atof(token);
      1 {5 A( r) e1 Q9 w( x7 r! N. _
    59.     token = strtok(NULL, delim);
      : {& S% {8 S% B. j  Z- U
    60.   }
      / j7 R7 }6 c- [6 n  l1 P  {
    61.   
      * Z% j\" C! M3 G* X) ?\" Z* X
    62.   if (xi_n != yi_n) ) ]0 Q. K4 `( z' u! U5 X( _5 L
    63.   {
      6 L9 d/ \# I! z. c+ V8 @
    64.     return 0;' y1 A; L2 ?2 Y% S' Q
    65.   }
        N6 \, C( c' ~3 j

    66. 1 Y0 w+ r8 {( Q4 u5 T9 e
    67.   m_n = xi_n = yi_n;
      ; ?  t  t! h& n3 O$ n\" w

    68. 5 G, A, k0 y  `; n) O, o
    69.   return 1;
      4 P0 W. F2 w& q: t$ S8 [
    70. }\" ?( U7 q- v8 N/ p+ H3 s' o

    71. 4 B2 C% |3 G# U% L
    72. static float
      ; Y+ G, G! Q% ^# N
    73. m_lagrange_interpolating()
      4 R8 U/ T* W- J& Y' B
    74. {* u* ^6 c& u, U3 H- r
    75.   float l = 0.00000;: J  ?# ]3 ?- W6 W8 }0 |! }
    76.   float li;
      $ C: r' h! @  @8 B
    77.   int i;# j0 [4 C; D, w+ w
    78.   int j;
      8 y& _# q  o2 h, @& V0 t

    79. # r! y6 f$ r$ K\" g; N$ ^
    80. #if DEBUG
      , n$ D7 d  I/ b  G- N; d1 H
    81.   printf("DEBUG at %d: enable debug mode\n", __LINE__);/ c4 I7 N6 z$ |- Z
    82.   unsigned int m_n = 3;
      1 D0 c7 b2 ^  j: C, y+ o; T
    83.   float m_p = 0.5635;9 e1 u$ b3 J, U% [7 _, Z
    84.   float m_x[] = {0.56160, 0.56280, 0.56401, 0.56521};
      : L5 F% d) I4 U\" m, u/ T
    85.   float m_y[] = {0.82741, 0.82659, 0.82577, 0.82495};
      1 @: X- M! ~& F. K' I3 @
    86.   
      $ g\" Y5 h( q\" Z* F# w, B/ f0 ~& b, f
    87.   for (i = 0; i < m_n; i++)  l8 g5 X% l3 E( x+ _* d
    88.   {; D6 y2 z6 |6 _3 \+ p
    89.     li = 1.0000000;8 P* f! k4 ]: T# x, @! }
    90.     for (j = 0; j < m_n; j++)
      2 c* D  R  s& x( Z4 B5 A3 [; P* D6 S
    91.     {
      ( T8 G; \( ^; m8 Q+ \
    92.       if (j != i)) w) f9 n+ Y1 O( b9 h
    93.       {6 g- X$ z( b5 c5 X- _
    94.         li = li * (m_p - m_x[j]) / (m_x[i] - m_x[j]);$ F' X! Z4 l* X# U
    95.       }6 n! d, U' H7 H
    96.     }
      ' Q. M8 h9 c2 ~
    97.     l = l + li * m_y[i];
        Q( H4 B3 F: h0 h# y9 C# L
    98.   }
      1 _6 L8 ]$ ?, [) U) O
    99. #else
      ) j: d% }* [0 d8 }
    100.   if (!m_lagrange_interpolating_set_n_arr()) \" T3 j4 b! ^* O3 c8 n* L
    101.   {. O! a: D2 T; s. h5 q+ u
    102.     printf("Error: xi and yi counter is diff\n");
      & I5 L  x* v: }9 T+ e* B- b* N
    103.    
      6 \\" P5 D; ^  @* A: |
    104.     return 0;& {9 t' s$ k* S& V
    105.   }
      % f% I4 v9 Z- a9 |\" v( f1 S8 e# S

    106. \" F' k' n$ R* {
    107.   for (i = 0; i < m_n; i++) 4 J. M. z0 k5 g4 T4 F
    108.   {
      ) V/ B7 q% H) w! \7 I, K8 R
    109.     li = 1.0000000;; r: ]! F0 n+ o0 B3 J
    110.     for (j = 0; j < m_n; j++)
      8 e8 g4 Z* @\" |/ ]- E
    111.     {3 j& ^  l3 D; R
    112.       if (j != i) 0 _% z+ Q  X5 o% z+ I
    113.       {
      ) w8 n* p5 S2 K; \( E8 j\" R
    114.         li = li * (m_p - m_arr[j + 1]) / (m_arr[i + 1] - m_arr[j + 1]);
      ! B0 k9 C+ i# R9 b. J
    115.       }; Z) l7 }' `7 O# s( q) R4 {! {
    116.     }
      . |! |; y6 x0 g; ]3 [/ E
    117.     l = l + li * m_arr[i + m_n + 1];
      # H6 K/ }\" T* D. B
    118.   }
      7 O! W( \7 f9 R: t, b9 u- Y  K
    119. #endif8 M) j3 M+ C+ V- u\" b
    120.   W  N. l% g8 U# Y
    121.   return l;
      9 X2 T0 S- e! o
    122. }
      # f0 e% D1 `5 J\" [; B4 G. @

    123. & D6 z1 Q  D+ J1 o# P5 I9 p
    124. int ( N- l8 D9 h\" D' g9 c9 I
    125. main(int argc, char **argv)
      5 x# b8 f7 P6 K
    126. {5 ~4 }* o9 C7 r* t% F# d0 Z, w
    127.   int c;9 Z3 Y' Y, ]3 }9 N: I& m/ m* t
    128.   extern char *optarg;\" U/ B) Q9 B2 {* z$ D! y; w
    129.   float res;: J: V8 K( e; m, ]) n) r
    130. 2 x% m\" o. u3 ~- h
    131.   if (argc < 2) # `, i! [$ Y4 H) G& {
    132.   {
      \" S2 y) T7 S! N0 H7 s7 B\" a
    133.     m_lagrange_interpolating_usage();2 Z* w! d( f) Y( G7 M2 G$ z
    134.     1 ~( q- q: B+ u# S
    135.     return -1;
      ; q6 {1 I' s- `: G
    136.   }5 b7 a- y) I: q4 e  L8 M\" I+ I! U6 \
    137. & f! V9 V' I! b) `; H) `  H2 p; h) G
    138.   while ((c = getopt(argc, argv, "p:x:y:")) != -1) , f\" j9 \% J1 ~* k9 e/ F! S
    139.   {3 E* W  W, l7 g+ L
    140.     switch (c) 6 ^2 X+ ^% ^  u0 d2 n0 x- q\" ?
    141.     {0 I  z, }& x& Y: J) R# J5 G; ?
    142.       case 'p':- C* j3 o0 v% O  W: y3 S# |
    143.               m_p = (float) atof(optarg);* W; w. [( t6 ^3 x+ c2 L; X* d
    144.       case 'x':2 H+ ]+ }9 e8 N) V4 N5 ~
    145.         m_xi = optarg;
      7 }  h9 y8 n4 _$ V' }; C
    146.         break;! O  b0 ]1 P; G5 [( E4 y
    147.       case 'y':+ b3 N4 {9 s$ y4 g# n
    148.         m_yi = optarg;: b2 h5 c' C- _* o* S, `+ ~- w\" c
    149.         break;2 p$ C, h$ D& b1 b
    150.     }
      5 S& p3 |* z, }0 O
    151.   }
      5 A8 R: q( h! f$ {* q

    152. 6 e1 i3 }3 I3 p; B0 `. W
    153.   res = m_lagrange_interpolating();
      ; N. ^. S0 B6 b7 F- Q; U8 m
    154.   printf("Lagrange interpolating with %.4f result is %.7f\n", m_p, res);
      1 S) |' r9 Y( Q* \' \7 A- }: a  T
    155.   
      $ r  H) V% _. y/ T9 a2 _0 O0 I9 d
    156.   return 0;; a2 A2 X3 h( f9 n* E
    157. }, H, w' q1 y) ~: W0 t
    复制代码
    回复

    使用道具 举报

    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 01:01 , Processed in 0.588070 second(s), 104 queries .

    回顶部