QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 22164|回复: 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自定义插值函数插值计算数值计算 2 u+ Y1 n; [4 l" b# n版本号: 04y09m28 * R# _) U: P, F$ O8 E分类: 工程设计应用% o5 {+ z: Q. f 性质: 免费软件6 @- o. f1 Y9 _' Q3 A2 K% f' {4 K 使用说明:

    8 b& _8 t. y3 K0 I. U' i

    人们对EXCEL普遍熟悉的功能是表图的处理,不太知道其在工程计算(如锅炉设计计算)中的应用。复杂的工程计算常常用专业编程语言(Fortran、C、Pascal 等)来编制计算程序解决,用专业编程语言编制工程计算程序往往有下面二个缺点:, h. ~6 W+ q: v/ o5 K2 M6 r% k; ~1 Z% E ; c- x8 ~0 F$ D: E) M+ @! {0 n9 B! ] 1) 编程语言专业性强,一般工程技术人员难以掌握,由这些专业编程语言编制的计算应用程序的维护、修改、升级都比较困难。

    3 z$ y+ \/ V9 j3 r) b5 _

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

    ) ~6 P' ]. H% H7 k( V

    EXCEL每一个单元格就是一个电子表格,很容易进行一般的加、减、乘、除、乘方、开方,而三角函数、指数函数在EXCEL中可以直接引用内部函数。用EXCEL编制一般的工程计算程序还需解决的有以下两个问题:(1)循环计算,(2)表、单曲线、曲线组的查找(如:锅炉设计计算中的焓值)。对于问题(1)循环计算,EXCEL在工具菜单中提供了两个命令:单变量求解和规划求解,利用这两条命令很容易解决问题(1)。对于问题(2)表、曲线的查找,EXCEL没有提供现成的函数,但也可用VLOOKUP、MATCH、IF、OFFSET等函数的组合勉强近视解决,本文重点介绍表、曲线的查找自定义函数的定义及使用。 1 P6 o! o' s6 j) ]8 W5 x5 i# @3 Q& U , U" A. J5 [* Q% S: [ 为了更好地解决曲线查找的问题,应用C++程序设计语言,用拉格朗日插值计算法在EXCEL中建立了自定义函数,单曲线插值函数TWLQ(变量,"带路径的保存数据的文件名"),曲线组插值函数THLQ(变量1,变量2,"带路径的保存数据的文件名")。单曲线插值函数、曲线组插值函数的"带路径的保存数据的文件"包含着特定对映表、曲线的信息和计算精度的要求 (文件为Notepad编辑的txt文件) 。 $ N( y6 [& Q+ A1 n1 z单曲线lagrange插值函数:double twlq(double x,char* filename);% |6 o# t- F! {) ~/ Q4 X ?# @9 S double twlx(double q,char* filename);! R* P* m# g f/ M2 k0 |' k+ S b 曲线组lagrange插值函数: # w$ \6 f( \8 G- k2 ^$ U double thlq(double x,double y,char* filename); 8 R" D9 p1 A4 T+ K double thlx(double y,double q,char* filename);6 Z- T8 ]9 ~& p! w5 Z double thly(double x,double q,char* filename);。

    7 ^. s% M' L' n; g! f

    例:单曲线插值函数 "带路径的保存数据的文件"结构如下: ( F, o2 A+ A1 C- ? K% x: h2 x@ Description @ ! p0 h/ C" D3 H6 w n, nsel;" B2 D7 Q- l$ C/ B: |6 d. r x[0],x[1], x[2],··, x[n-2],x[n-1];/ U" E: K6 m- T; `* Q q[0],q[1], q[2],··, q[n-2],q[n-1]; ( ?5 m H& q+ s9 C1 t# d6 _+ D4 N- fMinX=0.7,MaxX=0.9,OverRangeAlm=1,X=电压,XUnit=mv,Q=电流,QUnit=mA

    . X3 @* Q& J5 G7 }! ^

    注解: 3 s" x5 U: W9 n& L- I2 f) V% @ Description:用户自定义描述字符串(Description中不可有@符号);3 A+ S! s" Y, i/ l n: 总插值点个数;7 ?* S- i2 |2 a2 R nsel:实际参与插值计算的插值点个数;; m. M$ K3 j0 P2 ^- G w MinX=0.7,MaxX=0.9 取值范围; 3 Z( b5 a, ]# ~" U2 m OverRangeAlm=1 越限报警 1:报, 0:不报; 8 p2 K4 `6 n# N4 K D; k( M+ P. y X=电压,XUnit=mv,变量名称,单位。

    % }/ I3 Z9 P0 ?1 _% c

    ****结论: 3 w; N) B% `: p9 d/ S! Y: x l)图形化界面的插值函数数据文件生成器 LCZMaker 方便快捷生成单曲线或曲线组插值函数数据文件。 ) H# t8 s% |& T 2)应用EXCEL自定义插值函数,在EXCEL中进行工程计算编程极为便利,比专业编程语言程序设计更易学易用、直观明了,用EXCEL编制的工程计算应用程序更易维护、修改、升级。( ~& R* t+ r- B/ t$ C a% r 3) EXCEL本身长于表格制作,在EXCEL中进行工程计算编程人机界面友好,输入前、输出后处理方便简单。; F7 v, w; P# _* k( \ 4)在某大型锅炉厂电站锅炉性能设计计算中已显神力。

    # S: u! s r( ? I J1 l

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

    ! ]% q" P3 }/ 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. , F, w( T. d  J+ v2 s( \7 c
    2. /* TODO: Lagrange interpolating 2 n% A) U% p; M3 B
    3. *+ T2 y1 Z8 F4 v- ]) b( S- a9 v& H
    4. * For example, if lg2.71 = 0.4330, lg2.72 = 0.4346, then lg2.718 = ?
      / t5 ~, [. ?+ ]; [  L' a# n
    5. * In this situation, it could be solved via lagrange interpolating7 a- G! N/ `2 F! q
    6. *
      \" _3 s5 G  F7 O3 W1 r6 x
    7. * */  _+ {; S\" u4 M  G; U( P

    8. 4 |' s: r1 s$ o3 a3 {$ |2 B
    9. #include <stdio.h>
      ; m+ ]4 |/ D: ~% b1 k: ]2 O6 B/ U
    10. #include <stdlib.h>
      + f5 Q0 F% q/ d% B
    11. #include <string.h>, f1 i, g# e2 T
    12. $ G6 {- W# E) B+ X) c
    13. #define DEBUG 05 ?1 N: _+ Z. k6 M

    14. . t7 q9 z/ f1 J. r
    15. static float m_p = 0.5635;* J8 [: _; O# Z' l5 @0 k; ?5 O9 ?
    16. static char *m_xi = NULL;$ z  `% h) L. e/ d$ e6 e
    17. static char *m_yi = NULL;. p5 Q4 W% Q# _/ F8 U
    18. static float m_arr[] = {};  j4 S4 G6 K. T0 V
    19. static unsigned int m_n = 0;+ ?) o* T! x% {' i
    20. \" {4 X( D; B$ I4 U8 ~- X, ~! I! I* _$ [
    21. static void m_lagrange_interpolating_usage();( G1 l, b\" W/ N
    22. static int m_lagrange_interpolating_set_n_arr();9 m! f8 |* @+ d) T5 Y/ P
    23. static float m_lagrange_interpolating();& ~1 c- k& U% Y% ^/ h1 I& {4 S) V

    24. , r! T0 T* p2 D. \5 i
    25. static void
      $ J9 @% l$ A\" k) C* k& ?$ T
    26. m_lagrange_interpolating_usage() 1 J/ Y; I( R( r  m1 n  I1 z& s
    27. {
      4 R0 z: p2 C( d. O0 _; u. z% s/ l. c1 i
    28.   printf("Lagrange Interpolating Usage:\n");* d+ f; D9 ^' Y. B; `9 m6 D
    29.   printf("bin/li -p ** -x ** -y **\n");' q. L5 ^+ e9 _. g4 O
    30.   printf("-p 0.5635\n");
      % t5 V& e$ i\" w1 i5 A; w7 w0 m\" h
    31.   printf("-x 0.56160,0.56280,0.56401,0.56521\n");
      2 i. M  p5 M2 x; ]
    32.   printf("-y 0.82741,0.82659,0.82577,0.82495\n");
      & I6 r2 ?- u: p8 `  d# V
    33. }- \3 _: o; x9 H; H/ \$ V7 {

    34. 0 A. l9 t: [5 p! W
    35. static int
      . l( I/ @0 k6 w5 Z
    36. m_lagrange_interpolating_set_n_arr()
      ! g* c2 M7 w) m9 j1 E\" q) \0 b\" ^
    37. {9 w; N7 t5 O0 ?6 g\" r( w
    38.   int xi_n = 0;
      \" p9 I# f9 x2 ]8 C9 @
    39.   int yi_n = 0;5 Z; T( Q4 `3 [$ E
    40.   int n = 0;
      \" b& Y7 b5 D' E8 |
    41.   char *token = NULL;  x0 _) C  s6 k* ?+ D/ t& F& ~8 _
    42.   const char *delim = ",";: b) A+ C0 o2 ~* X
    43. 8 B6 y- ^* b7 W1 F
    44.   token = strtok(m_xi, delim);( f/ F; i. K3 G' f
    45.   while (token)
      ) ?# [2 K3 Q% q8 q3 L5 w$ \$ E$ X2 _
    46.   {1 M4 S3 [6 w& A% l. C. P
    47.     xi_n++;! I0 }0 [+ D% ~7 @; D
    48.     n++;
      3 F: ~3 z2 G( P
    49.     m_arr[n] = (float) atof(token);, _: g2 d1 y: @. D( z3 m- c$ n1 A
    50.     token = strtok(NULL, delim);
      ; e; @5 g! E) w) G: g+ d
    51.   }; `5 X$ A) x( O8 d3 I( q

    52. 2 @! @, t' F0 L' r1 h
    53.   token = strtok(m_yi, delim);8 ~5 |1 J( @3 H6 n% Y
    54.   while (token)' _8 b& r, U6 T4 }$ m
    55.   {
      ! x% O8 _: ^% ^
    56.     yi_n++;6 g6 B& S. R) a; g. @
    57.     n++;% \! @6 h1 k& a# [+ \
    58.     m_arr[n] = (float) atof(token);7 [0 @+ K' l( O' I2 Y1 ?- z1 G
    59.     token = strtok(NULL, delim);3 V/ U7 [' r% H. [, ]
    60.   }\" \) ]) X: C\" e. V+ R, {2 J
    61.   \" A+ q0 T, w\" ]) ^6 n- Z) k
    62.   if (xi_n != yi_n)
      / b' F5 D. Q5 i6 D$ j+ u
    63.   {7 i5 i9 f  _; D; w5 a$ f
    64.     return 0;% }/ p# Y3 Q; e\" j1 i& S, |
    65.   }
      2 z; G) X' w1 @+ z2 ^

    66. 0 `( H/ s) c6 C% B+ ]% g) r
    67.   m_n = xi_n = yi_n;
      1 T1 p! I1 u- T8 p) Q+ x\" @# {
    68. 9 a- E9 I6 B  r
    69.   return 1;
      9 i( _: M8 \' x2 L\" u\" d( u' X
    70. }7 e1 h\" l9 |1 h- ~, M2 k& i1 c

    71. 4 a5 p! p( B+ q1 Y0 B  Q
    72. static float
      ) t' O7 A5 w& q% L- p
    73. m_lagrange_interpolating() . Z: A9 N+ |/ c* T( v4 G' [
    74. {
      ) P. u/ M! o* `6 Y; y/ ]0 C
    75.   float l = 0.00000;
      / K# \/ h# ?- B/ P5 r) _* i8 B
    76.   float li;0 Z4 W3 k7 W  }
    77.   int i;
      2 _, U3 o0 b) D+ I1 X, O' i
    78.   int j;( j1 t4 D, U% E! y7 m$ [& U
    79. 5 R, b$ _: r# ]! l
    80. #if DEBUG
      7 W) m, _' K% Y2 m\" i& Z8 y: N
    81.   printf("DEBUG at %d: enable debug mode\n", __LINE__);
        A, `2 }* b7 N% Z! k: e
    82.   unsigned int m_n = 3;
      0 @& J4 u+ L; z9 X1 z& f: d
    83.   float m_p = 0.5635;: W% s  s( M7 X1 r/ ^/ }
    84.   float m_x[] = {0.56160, 0.56280, 0.56401, 0.56521};
      / j. d3 w\" y. g0 b- O
    85.   float m_y[] = {0.82741, 0.82659, 0.82577, 0.82495};
      ' m& \+ h! X9 W! v
    86.   
      2 a/ \. i* S8 V/ H  j. e* U* O
    87.   for (i = 0; i < m_n; i++)
      1 Z- {  ~: l. r$ q) [' w/ w
    88.   {# |# S# s2 a; A% D
    89.     li = 1.0000000;
      # D% n+ o$ C6 W& T
    90.     for (j = 0; j < m_n; j++)
      9 f7 f, y1 z: \0 E: ]
    91.     {! N7 u7 q- Q. E. r: X$ K
    92.       if (j != i)
      + S0 t3 T$ p. \! |6 i
    93.       {
      8 d* r6 `: L! h- E. l- e
    94.         li = li * (m_p - m_x[j]) / (m_x[i] - m_x[j]);) B* l0 e  i0 c9 X3 T; d
    95.       }
      # i\" Z. \# `7 k: k/ v! T
    96.     }
      $ |: h6 w4 P- E) U& g/ P' A: C
    97.     l = l + li * m_y[i];. U4 S# C( }6 ^% \0 |
    98.   }
      1 ?7 [% N/ u' F1 V
    99. #else
      7 a( K# c4 z1 x
    100.   if (!m_lagrange_interpolating_set_n_arr())
      7 k% M0 m* s7 Y! u% i
    101.   {4 P; K5 z/ m; N: ^7 x  q0 W
    102.     printf("Error: xi and yi counter is diff\n");
      ' a8 v\" `4 |0 n! I; u
    103.    
      ' k+ R: B$ ?\" [
    104.     return 0;3 r* g  a% c2 b0 ~' F* A/ N4 ?- b
    105.   }
      \" H5 R# u  g- y% M

    106. 2 Y0 m% E2 i0 Y; V
    107.   for (i = 0; i < m_n; i++) 1 T6 T0 a, t. i1 O
    108.   {' H. p' o) Q\" U3 {/ g; d
    109.     li = 1.0000000;
      7 K* A5 s5 w+ R: J
    110.     for (j = 0; j < m_n; j++) 7 Q3 I! V/ G8 k. A
    111.     {
      5 R' s* ?5 Q\" a9 i+ C
    112.       if (j != i) 4 |% ~7 i$ V+ c, N! E& O7 {
    113.       {
        I1 {* V6 Z8 Z% u2 c! I% L
    114.         li = li * (m_p - m_arr[j + 1]) / (m_arr[i + 1] - m_arr[j + 1]);
      % m% [\" Y7 b& z5 l
    115.       }+ e0 [- k' c8 j8 Y' d
    116.     }\" V! `& i3 Q# Q) T# f/ \
    117.     l = l + li * m_arr[i + m_n + 1];7 B\" x) ]4 B4 h( J$ r& e
    118.   }
      8 W! d) V& |/ Y* ~( x# h
    119. #endif4 c5 E% E4 n; i. ]1 g) `\" R

    120. 7 o+ X+ Q+ U$ m
    121.   return l;) b% H! h1 `& j1 |/ M  Q
    122. }% a1 x/ W/ l# P3 Y) H6 ?

    123. 0 q7 j0 c4 J, t\" b0 J
    124. int # Q! ]2 E9 h8 M6 P- V: \* q9 T1 |
    125. main(int argc, char **argv)
      5 B+ D+ c3 S( Y( g& D
    126. {\" A1 b  W+ ?) n\" O
    127.   int c;+ t+ ]5 x. y5 g
    128.   extern char *optarg;
      \" o5 X0 ?. S: `/ I: a# g) V4 U
    129.   float res;: ?& N7 {4 A' Y7 `# v5 D

    130. ! O. V2 J+ q  Y  b, {
    131.   if (argc < 2)
      2 J! s) C9 w1 g4 W$ P0 L
    132.   {
      ' |( a* t/ ^) v/ _% k- G2 ^. l0 |
    133.     m_lagrange_interpolating_usage();
      - ]1 |6 e\" c/ ^  k
    134.    
      % I5 Z3 m  x, M: b& _# i+ W3 P
    135.     return -1;, l, W5 P. `\" D( Z2 u. g& o9 d  |
    136.   }6 q& n- j4 j/ a8 F# V, N
    137. : V' J6 g! o8 G
    138.   while ((c = getopt(argc, argv, "p:x:y:")) != -1)
      ! c7 U) a- o5 ^* ]% O
    139.   {
      2 c9 ~' ~' b0 \- a! P
    140.     switch (c) ( U# n- P! R% S: h! r( m* b
    141.     {
      : x9 V+ f- Y: O7 X# i* q* L
    142.       case 'p':1 D\" N) \7 y% R5 P3 K. v\" ^
    143.               m_p = (float) atof(optarg);! L. r6 {& ^' \
    144.       case 'x':/ a3 M\" }. z+ l6 _
    145.         m_xi = optarg;
      8 a2 l% G: {\" k) M2 E+ k
    146.         break;
      & P; g' F\" d0 F) q# t) ]) L& Q( U
    147.       case 'y':% _6 e8 ~, v5 D  B- F' a
    148.         m_yi = optarg;5 ]' Q6 O6 Z: Q' j3 v. E# p
    149.         break;
      & a\" h; g( o  X3 I; J
    150.     }5 }5 U' d2 x% e0 P* l& |
    151.   }
      ! }  x\" W  D  I8 c1 e4 |
    152. . t) z6 O5 B3 J, X5 ^5 T3 R
    153.   res = m_lagrange_interpolating();; ^6 l\" k/ V4 w5 O
    154.   printf("Lagrange interpolating with %.4f result is %.7f\n", m_p, res);* K% C! n, q5 K- D1 E' r
    155.   1 R+ P+ U3 i( x
    156.   return 0;
      . D6 J3 j, @$ k$ `- r
    157. }
      & Q4 N7 e8 i6 w9 q2 i
    复制代码
    回复

    使用道具 举报

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

    回顶部