QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 22151|回复: 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自定义插值函数插值计算数值计算( h, j% E. X3 l) y 版本号: 04y09m283 s" `8 U' X8 [+ Z0 ~9 s 分类: 工程设计应用2 K- n$ Q! D6 u& @- t 性质: 免费软件 & X6 O. b2 f E; v. x' ^# `7 V使用说明:

    $ V# i4 d6 Q l E% u! E* _! i4 l

    人们对EXCEL普遍熟悉的功能是表图的处理,不太知道其在工程计算(如锅炉设计计算)中的应用。复杂的工程计算常常用专业编程语言(Fortran、C、Pascal 等)来编制计算程序解决,用专业编程语言编制工程计算程序往往有下面二个缺点:6 f2 O/ g5 G: W! [ $ i1 p2 {8 e2 s 1) 编程语言专业性强,一般工程技术人员难以掌握,由这些专业编程语言编制的计算应用程序的维护、修改、升级都比较困难。

    * ?, W: D9 ^' r2 p8 r

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

    3 k5 ~, T$ Y3 g; u4 _ M4 G0 C

    EXCEL每一个单元格就是一个电子表格,很容易进行一般的加、减、乘、除、乘方、开方,而三角函数、指数函数在EXCEL中可以直接引用内部函数。用EXCEL编制一般的工程计算程序还需解决的有以下两个问题:(1)循环计算,(2)表、单曲线、曲线组的查找(如:锅炉设计计算中的焓值)。对于问题(1)循环计算,EXCEL在工具菜单中提供了两个命令:单变量求解和规划求解,利用这两条命令很容易解决问题(1)。对于问题(2)表、曲线的查找,EXCEL没有提供现成的函数,但也可用VLOOKUP、MATCH、IF、OFFSET等函数的组合勉强近视解决,本文重点介绍表、曲线的查找自定义函数的定义及使用。 # K/ P9 X5 K Z1 R5 u( W% d , [9 ^. Y6 s3 S4 K 为了更好地解决曲线查找的问题,应用C++程序设计语言,用拉格朗日插值计算法在EXCEL中建立了自定义函数,单曲线插值函数TWLQ(变量,"带路径的保存数据的文件名"),曲线组插值函数THLQ(变量1,变量2,"带路径的保存数据的文件名")。单曲线插值函数、曲线组插值函数的"带路径的保存数据的文件"包含着特定对映表、曲线的信息和计算精度的要求 (文件为Notepad编辑的txt文件) 。 8 M3 S9 q# [- u( x3 f2 Q单曲线lagrange插值函数:double twlq(double x,char* filename); 8 z9 |* R( T% ], C& t) d8 u double twlx(double q,char* filename);- K, O: r$ A9 R" D 曲线组lagrange插值函数:9 X/ U6 ]5 z/ T double thlq(double x,double y,char* filename);: L V! k$ y1 U& f4 {& {8 e double thlx(double y,double q,char* filename); " G& r% r- O9 R1 o double thly(double x,double q,char* filename);。

    / v0 I$ D6 R+ H' B

    例:单曲线插值函数 "带路径的保存数据的文件"结构如下: / Q- t d5 g9 H1 I0 `@ Description @ 3 k; V9 b8 U7 ~: Q# m! L n, nsel;( p) c+ s' w- V' J$ Q x[0],x[1], x[2],··, x[n-2],x[n-1]; + c- i: d% B) ^7 t3 oq[0],q[1], q[2],··, q[n-2],q[n-1];. c9 J& `/ D' E: t" _6 \# ? MinX=0.7,MaxX=0.9,OverRangeAlm=1,X=电压,XUnit=mv,Q=电流,QUnit=mA

    % l0 k5 R' i; k

    注解:" D* B K( m! z9 z, q4 _/ @ Description:用户自定义描述字符串(Description中不可有@符号);, n- V* r4 v2 A4 q n: 总插值点个数; ' C6 A/ j3 }, @ Z5 D nsel:实际参与插值计算的插值点个数; , M/ s; w8 Z) V1 Z6 w MinX=0.7,MaxX=0.9 取值范围;8 } `0 K9 H; j+ H7 Z OverRangeAlm=1 越限报警 1:报, 0:不报; ]8 O1 j3 C) c$ Y" r5 } X=电压,XUnit=mv,变量名称,单位。

    * p* R) N' Y' v# g0 _

    ****结论: 2 M+ t) U) {. R" a l)图形化界面的插值函数数据文件生成器 LCZMaker 方便快捷生成单曲线或曲线组插值函数数据文件。$ d6 M% G1 ?* x7 H+ E 2)应用EXCEL自定义插值函数,在EXCEL中进行工程计算编程极为便利,比专业编程语言程序设计更易学易用、直观明了,用EXCEL编制的工程计算应用程序更易维护、修改、升级。 5 p0 m% Z/ E7 E5 ` 3) EXCEL本身长于表格制作,在EXCEL中进行工程计算编程人机界面友好,输入前、输出后处理方便简单。 4 u/ H9 C, ^ A 4)在某大型锅炉厂电站锅炉性能设计计算中已显神力。

    , h) \! C& ~; s! Q, ^( o

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

    + O1 s7 @$ L8 H: q- U! i) g

    [分享]插值软件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. 6 Q5 q+ f) {+ e
    2. /* TODO: Lagrange interpolating
      7 C( u\" _: n# u2 k
    3. *
      9 y+ w7 \! j6 G
    4. * For example, if lg2.71 = 0.4330, lg2.72 = 0.4346, then lg2.718 = ?\" a+ m+ d& K- f- B9 w$ y
    5. * In this situation, it could be solved via lagrange interpolating
      # v- k. ]( n$ p* n
    6. *, ~( Q5 D) ?- \/ W
    7. * */' `/ F  f9 O# E
    8. 8 L/ A1 f* ^* N* `
    9. #include <stdio.h>
      2 {# X9 J' V- ~4 B3 b+ ?
    10. #include <stdlib.h>7 b- U+ L7 N, t4 P. r6 [9 C
    11. #include <string.h>  d; y3 h' z5 h
    12. + x! U, j$ b% R+ ?9 o$ V
    13. #define DEBUG 0
      , o\" v2 @2 n  R
    14. : k9 ^5 N4 G. l) q- X# I% b  y, J2 \
    15. static float m_p = 0.5635;4 ?3 S- t+ K, p+ H
    16. static char *m_xi = NULL;& B9 F4 x& F/ |% I
    17. static char *m_yi = NULL;
      + v/ z/ D' P9 B' ^; S2 ]! D
    18. static float m_arr[] = {};
      7 l3 _* j/ ^+ g: f) I9 t) i
    19. static unsigned int m_n = 0;
      8 w- z5 J& D6 X5 t$ ^: t

    20. 5 P9 [) ?, Q- y6 y' X
    21. static void m_lagrange_interpolating_usage();
      & q5 |; S& I0 M6 U
    22. static int m_lagrange_interpolating_set_n_arr();; T$ G, j* X  {: d
    23. static float m_lagrange_interpolating();
      ( S1 c: J. D; c, l3 b

    24. * O- B4 z3 B7 u( k
    25. static void
      ; D5 ]  a  b9 N' n, ^. L\" u3 P
    26. m_lagrange_interpolating_usage() / }' w( f/ F9 q4 }\" l1 ?
    27. {
      # S2 c( F, h4 F
    28.   printf("Lagrange Interpolating Usage:\n");
      , S0 [* i& ?& f# A/ S4 v: Q* X
    29.   printf("bin/li -p ** -x ** -y **\n");
      3 }) X8 W6 J* Z7 t7 E
    30.   printf("-p 0.5635\n");
      & s5 j5 W) N3 y+ Z  x/ g
    31.   printf("-x 0.56160,0.56280,0.56401,0.56521\n");) O  u% U! s8 Z: D/ ]% ?# m( s' n* A3 I
    32.   printf("-y 0.82741,0.82659,0.82577,0.82495\n");
      - n4 M+ q3 v4 \/ k' @! N
    33. }
      \" S# B4 t5 s9 P' A2 y( I
    34. / f; A5 x: B  r) ~% s
    35. static int 3 K5 u( h0 x- @- D5 s& R* S
    36. m_lagrange_interpolating_set_n_arr()
      4 e2 u9 w8 y4 s) L
    37. {
      \" Y# X; c/ N% d( r5 |7 h$ H
    38.   int xi_n = 0;/ w( b7 n- Z: P- Y( W. Y- Q
    39.   int yi_n = 0;
      1 w1 h+ r* x9 @
    40.   int n = 0;+ i. w5 W/ g5 h
    41.   char *token = NULL;
      + v  F$ j1 W  A, k) S
    42.   const char *delim = ",";
      ! Y# p0 b) S1 P8 v. H
    43. 2 G/ |* t* Q+ M& B
    44.   token = strtok(m_xi, delim);9 x+ \/ w% O7 ]& a6 b: D, Q7 z/ L
    45.   while (token)* B' Y+ X2 O% Z4 b/ ?7 G
    46.   {
      \" _! r4 x& W8 p9 {2 \
    47.     xi_n++;
      ; `0 I- i0 T/ E. I
    48.     n++;
      7 M! {& J( R; b) w
    49.     m_arr[n] = (float) atof(token);
      9 l1 X, E7 s& h/ I  f% T: G. r
    50.     token = strtok(NULL, delim);5 ~) \5 T( U5 H8 ]  C: K
    51.   }
      6 F& w. M1 D4 ?* j& E/ I

    52. 1 q& ^* o0 q( x, I7 y! @) r
    53.   token = strtok(m_yi, delim);
      2 Q# p5 A4 {1 F# Y; ^6 |
    54.   while (token)7 M4 O6 u* }8 t0 _0 M4 [( W8 k& Z
    55.   {
      5 t! o; w4 b8 `$ W# V( h
    56.     yi_n++;' w$ K* q3 a# p$ J8 p) F6 B
    57.     n++;! a; \+ |1 _\" R3 o8 p\" g& G! V% M
    58.     m_arr[n] = (float) atof(token);6 G. x8 ]. h1 ?  W: H& t4 D* [; x
    59.     token = strtok(NULL, delim);
      ' i! d: `# C. u4 r4 B
    60.   }
      : a; y( E: v8 f# O$ o1 l( m7 U. s
    61.   
      / c* E0 E7 H* u$ M* Q# \9 ]
    62.   if (xi_n != yi_n)
      4 r' I$ n% Q2 l0 Y2 q
    63.   {
      1 A9 a  O* C. t$ P2 u\" d4 V) x1 p
    64.     return 0;
      8 _6 F1 D; M5 R) P6 ^
    65.   }2 ^$ z9 P! M2 U8 Q8 l2 ]5 s: _

    66. . d. m6 r: H4 y( G
    67.   m_n = xi_n = yi_n;( m( n6 Y/ r  F6 x, U( M2 F, T

    68. 4 s$ a; a& h' m4 e9 o. A, j3 S
    69.   return 1;
      : z5 N! s( S. u9 v  N# e! j
    70. }8 ~$ a0 U8 Y' U2 A' m
    71. + \: u. \  `  _
    72. static float . G, E, z! ~$ N: b+ Q0 `
    73. m_lagrange_interpolating()
      \" l# ]5 w\" I! J( o/ Y; L1 Z
    74. {
      * O( I  G+ D% L5 C+ I\" L* \
    75.   float l = 0.00000;* M8 e+ i$ ^% G) l7 V) S- S) x
    76.   float li;
      ; d3 @3 M0 e  c, {/ T( Z% d
    77.   int i;- x7 _6 E& _$ `! T. j4 L- }
    78.   int j;/ L! z/ X5 z# @3 U9 ~

    79. 9 |- \7 s4 x7 A) M
    80. #if DEBUG
        f! F. ~, S7 c0 J6 h4 b, l
    81.   printf("DEBUG at %d: enable debug mode\n", __LINE__);
        M/ f: l6 C) S9 c* Z4 R# ]0 ~# b
    82.   unsigned int m_n = 3;
      * z6 r% t* D  Y, j+ @
    83.   float m_p = 0.5635;
      ! j1 P9 d' W6 p! d. V2 i
    84.   float m_x[] = {0.56160, 0.56280, 0.56401, 0.56521};
      6 ~4 m, D\" N4 E8 f) o8 r
    85.   float m_y[] = {0.82741, 0.82659, 0.82577, 0.82495};
      % j  x8 M: l3 S( _# @. \
    86.   
      ! P) A3 Q  O5 D
    87.   for (i = 0; i < m_n; i++)) H\" S1 x( v1 q! {& k- @
    88.   {( E) c! n% ~9 |, m
    89.     li = 1.0000000;) l. R. [\" b( D/ @% i
    90.     for (j = 0; j < m_n; j++)4 q# \& w2 N% T2 N& p& N1 R- u
    91.     {
      6 X% N/ A% c. A. ^1 R+ P% z
    92.       if (j != i)3 S- a: y\" N7 p\" v/ S
    93.       {0 c\" z( K3 ~2 R( h, K  b$ h
    94.         li = li * (m_p - m_x[j]) / (m_x[i] - m_x[j]);) N3 r/ T+ `0 i+ |4 ]
    95.       }$ n  m% @$ [! O8 ]2 g  ~' W
    96.     }) d$ U$ M6 }\" r, B4 t+ M\" m
    97.     l = l + li * m_y[i];
      : ?7 r. w7 ^5 a3 |9 f# B# F% n
    98.   }
      . j; |! r; t  s6 N! A0 H/ a
    99. #else
      3 U# n7 j! X$ \
    100.   if (!m_lagrange_interpolating_set_n_arr())
      0 V6 o8 g3 c0 S
    101.   {
      $ F; g5 D9 R$ C9 U  R
    102.     printf("Error: xi and yi counter is diff\n");2 r' B: D2 E1 q
    103.    
      + H4 }6 c) |! B2 J& ?# \# ?
    104.     return 0;
      . ?\" W5 N; ^) L; D* W) u: r
    105.   }7 a* A- {\" e7 K: s+ N8 ]
    106. 2 ?: Z3 ], Y1 F( _8 d7 i9 x2 E\" n
    107.   for (i = 0; i < m_n; i++) - W9 ^- Q6 G; z9 b3 \
    108.   {
      0 L$ S4 Z+ _% u4 Y* Z; Z- U9 g6 b
    109.     li = 1.0000000;
      % Z% [7 x4 P& i: `! u1 o9 @* M
    110.     for (j = 0; j < m_n; j++)
      3 {5 c. ]- I: ~/ T& ]0 J7 E! t/ W2 y& }
    111.     {' R7 e  [' B+ A& b' e) L9 ?
    112.       if (j != i) 9 D8 [+ x' `# L
    113.       {
      2 N. `) I0 ?9 k, ?+ H1 k7 _! z9 L/ J
    114.         li = li * (m_p - m_arr[j + 1]) / (m_arr[i + 1] - m_arr[j + 1]);
      2 H7 I5 K- f6 ~\" z\" m2 D, N
    115.       }
      0 R. o  G: ^  I3 d- Z
    116.     }9 l0 s% ~0 `& x\" h. G. m/ T9 x
    117.     l = l + li * m_arr[i + m_n + 1];/ u6 Z+ H! a3 g% z* G; ?
    118.   }
      : w) \% G\" j3 a4 K; n
    119. #endif+ w4 T* t- f9 a

    120. $ w$ w  l1 ?0 E+ f
    121.   return l;8 E/ m/ U1 s6 \
    122. }
      . _! `( a! ~& r( a- g) l* s\" F# F

    123. ! [- A/ M% m6 H6 y2 E+ [- ]
    124. int : m9 Y8 t6 W) ?- N$ ~: @7 S
    125. main(int argc, char **argv)
      3 V# @* V- c; S6 s; f# `7 k- |
    126. {4 E4 F2 f9 V. ^) ]. t8 ?
    127.   int c;
      8 `; V7 K3 x- ~+ t& Q& p
    128.   extern char *optarg;
      # M; ?% Z7 O% d3 c0 n
    129.   float res;) q7 g2 x$ r/ f

    130. ' j$ k0 S8 N' C5 G
    131.   if (argc < 2) 4 s$ _  @4 z; d6 m' S/ d\" v$ Z0 W
    132.   {9 u1 \- |7 _/ r
    133.     m_lagrange_interpolating_usage();+ Q; y' Y( i7 p6 u4 d
    134.     * ?\" T* V! w7 A4 s\" n% h
    135.     return -1;, i$ U7 O5 J1 R! d
    136.   }
      ' `\" Z' [+ k4 }1 [  d- ^

    137. 7 I1 [- n* ^6 x5 E; A+ p
    138.   while ((c = getopt(argc, argv, "p:x:y:")) != -1)
      2 A4 G7 `\" T% [. ]. d\" A- e/ K
    139.   {* E& o- U, v; Q0 V
    140.     switch (c)
      5 [6 M* x1 b3 X. ^, E0 m
    141.     {6 G. p1 o+ c* H+ Z% X
    142.       case 'p':
      / S/ P9 O6 E$ e5 c# Z3 z
    143.               m_p = (float) atof(optarg);9 R. T, D4 i! r3 Q; N- L
    144.       case 'x':& M$ J( F) x+ m* G5 Q( }
    145.         m_xi = optarg;
      \" S  F8 j7 r( w, _
    146.         break;( [3 k4 S7 I# _: U& T\" Q
    147.       case 'y':* a4 T! D\" _, f
    148.         m_yi = optarg;, M2 k9 [8 l0 v$ R& j4 F
    149.         break;7 d6 J2 P\" `* U
    150.     }
      ! r; \4 r1 q# y+ q
    151.   }) E/ [+ l! I\" y, @% S: J2 J
    152. * R3 U* f: a4 M3 N0 f7 H) S0 D
    153.   res = m_lagrange_interpolating();
      ! b3 B7 P\" m5 K* h1 Z# L
    154.   printf("Lagrange interpolating with %.4f result is %.7f\n", m_p, res);
      9 j. h1 G2 }( I- d' h
    155.   
      : k$ S8 g3 m2 T# E% V) J, E
    156.   return 0;
      \" J9 B: Q* y  B: Q1 d
    157. }
      3 k% I0 y\" k& h! z7 W
    复制代码
    回复

    使用道具 举报

    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 14:24 , Processed in 0.447950 second(s), 105 queries .

    回顶部