QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 21848|回复: 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自定义插值函数插值计算数值计算 " {5 n- K& J1 D( P; m) g1 }. Q版本号: 04y09m28 5 v4 }/ Z* ~( E! l, j7 `: `分类: 工程设计应用 " v$ e. J/ c- U V9 T g* T: t" }性质: 免费软件 4 ?1 ? R; l8 n1 R使用说明:

    ) c, x3 k, g! K9 x; P' R- f

    人们对EXCEL普遍熟悉的功能是表图的处理,不太知道其在工程计算(如锅炉设计计算)中的应用。复杂的工程计算常常用专业编程语言(Fortran、C、Pascal 等)来编制计算程序解决,用专业编程语言编制工程计算程序往往有下面二个缺点: + }. | w. K+ u, h0 C6 t 3 ]! R! h# s& _6 {8 M 1) 编程语言专业性强,一般工程技术人员难以掌握,由这些专业编程语言编制的计算应用程序的维护、修改、升级都比较困难。

    , }0 r) z% p+ i# S

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

    8 I* ?9 }9 J* J

    EXCEL每一个单元格就是一个电子表格,很容易进行一般的加、减、乘、除、乘方、开方,而三角函数、指数函数在EXCEL中可以直接引用内部函数。用EXCEL编制一般的工程计算程序还需解决的有以下两个问题:(1)循环计算,(2)表、单曲线、曲线组的查找(如:锅炉设计计算中的焓值)。对于问题(1)循环计算,EXCEL在工具菜单中提供了两个命令:单变量求解和规划求解,利用这两条命令很容易解决问题(1)。对于问题(2)表、曲线的查找,EXCEL没有提供现成的函数,但也可用VLOOKUP、MATCH、IF、OFFSET等函数的组合勉强近视解决,本文重点介绍表、曲线的查找自定义函数的定义及使用。# G ?9 F# v9 n% v2 y+ L3 A4 g* p ! P5 i# O! h( Z2 i 为了更好地解决曲线查找的问题,应用C++程序设计语言,用拉格朗日插值计算法在EXCEL中建立了自定义函数,单曲线插值函数TWLQ(变量,"带路径的保存数据的文件名"),曲线组插值函数THLQ(变量1,变量2,"带路径的保存数据的文件名")。单曲线插值函数、曲线组插值函数的"带路径的保存数据的文件"包含着特定对映表、曲线的信息和计算精度的要求 (文件为Notepad编辑的txt文件) 。9 ^8 C" b4 ?! L. _ 单曲线lagrange插值函数:double twlq(double x,char* filename);) k# d/ }" h. O: _$ h6 B8 O; U double twlx(double q,char* filename);9 d6 p, d: W$ K7 E! l. m 曲线组lagrange插值函数: 5 \- q3 ]4 h9 _' |7 z double thlq(double x,double y,char* filename);+ S8 D- b* Z1 `: W: ?# v double thlx(double y,double q,char* filename);2 P( h; c5 @) C double thly(double x,double q,char* filename);。

    9 z" ]) z' T+ @3 `$ y7 o: n

    例:单曲线插值函数 "带路径的保存数据的文件"结构如下:& U; a% q# X x5 G- O @ Description @ + [3 h* S, j* {+ e4 q1 I7 _( s n, nsel;5 X( t# ^. t9 h" p, L! v x[0],x[1], x[2],··, x[n-2],x[n-1];6 O$ N4 y, f) n& {: s, g q[0],q[1], q[2],··, q[n-2],q[n-1];$ v' o0 U! W6 o4 s7 N6 y) w MinX=0.7,MaxX=0.9,OverRangeAlm=1,X=电压,XUnit=mv,Q=电流,QUnit=mA

    7 m3 C& [( C* Y4 V( q

    注解:/ x- o" M: I& q2 e Description:用户自定义描述字符串(Description中不可有@符号); * e5 F6 X* M" t X( |& I# r$ ^. y% C n: 总插值点个数;; u. p& i; y5 ? nsel:实际参与插值计算的插值点个数; 8 V- F1 d' t/ z1 b% E MinX=0.7,MaxX=0.9 取值范围;+ Z1 @0 c6 ^- Q& V OverRangeAlm=1 越限报警 1:报, 0:不报;/ A: _& o# H" S' Z& C6 J4 A X=电压,XUnit=mv,变量名称,单位。

    2 }( c5 b6 m. w1 Z$ q! d

    ****结论: 6 {4 e/ F* L. Y( q2 n% C l)图形化界面的插值函数数据文件生成器 LCZMaker 方便快捷生成单曲线或曲线组插值函数数据文件。 . c8 d0 c9 Y& E% } 2)应用EXCEL自定义插值函数,在EXCEL中进行工程计算编程极为便利,比专业编程语言程序设计更易学易用、直观明了,用EXCEL编制的工程计算应用程序更易维护、修改、升级。 1 O/ |2 n! F! U" ]# _' {- c 3) EXCEL本身长于表格制作,在EXCEL中进行工程计算编程人机界面友好,输入前、输出后处理方便简单。' K; n, O% X; R 4)在某大型锅炉厂电站锅炉性能设计计算中已显神力。

    5 r" w7 A3 D( ~- x+ W

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

    $ |1 R1 _1 a* A. E! |

    [分享]插值软件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. 1 \2 M' O1 B! [/ ~6 w1 A
    2. /* TODO: Lagrange interpolating - A, u* O  E$ J/ ]( b5 a( N
    3. *5 h\" w0 Z4 f  |$ p! W! A+ n3 P6 d! l
    4. * For example, if lg2.71 = 0.4330, lg2.72 = 0.4346, then lg2.718 = ?' k6 A, N; p, f; ]1 Y: `5 a
    5. * In this situation, it could be solved via lagrange interpolating6 @+ f4 _0 x! _7 _
    6. *' h3 u8 F1 O$ p! x: x1 m
    7. * */) F* h* w4 w# I2 ]2 d* k/ a+ g1 b2 G

    8. ! b6 q% v. _! B- A
    9. #include <stdio.h>' `7 ], s3 T$ r9 O. w
    10. #include <stdlib.h>$ N' M9 V/ x! v4 S; s* Q. k
    11. #include <string.h>
      . S5 k$ v# r\" y4 i
    12. : Z+ _- `7 e4 Y& U
    13. #define DEBUG 0# j5 @& D) }& ~. ~: J; N# `

    14. + U  t6 S0 f* ~+ |+ `$ a3 c
    15. static float m_p = 0.5635;( h\" k/ t1 j# K! w
    16. static char *m_xi = NULL;
      # L1 l; h/ R0 u3 z1 c
    17. static char *m_yi = NULL;\" c! j# {! h% z
    18. static float m_arr[] = {};1 U7 n. e. u6 P/ o\" g; i' Q
    19. static unsigned int m_n = 0;
      * c& Y* q3 }# q. |5 f
    20. 3 c/ z- f3 i0 Q2 E' q$ G7 U& ^( I& z7 n
    21. static void m_lagrange_interpolating_usage();: U6 a\" J6 G$ c0 W/ @
    22. static int m_lagrange_interpolating_set_n_arr();; X0 x, [& J4 z3 q2 s# V
    23. static float m_lagrange_interpolating();* T0 M5 r& p. G! I/ L6 C, E9 F' C  I
    24. : X* u4 B8 R% v
    25. static void . ^- w* L8 @; \/ r
    26. m_lagrange_interpolating_usage() ! b1 `\" o0 O% v2 _\" k9 T1 Z0 b+ f5 n
    27. {9 Y+ j% l) Q+ C3 L3 Y/ h7 u' l$ J
    28.   printf("Lagrange Interpolating Usage:\n");
      2 i! n* k1 Q6 [/ C0 w/ R  Y3 U
    29.   printf("bin/li -p ** -x ** -y **\n");
      1 ~% N: G9 G; y$ T- s\" \
    30.   printf("-p 0.5635\n");% B, P; l# ]5 f( a$ S. ?+ g8 c( r
    31.   printf("-x 0.56160,0.56280,0.56401,0.56521\n");
      % Z% c& @8 Z\" f% f* @, F
    32.   printf("-y 0.82741,0.82659,0.82577,0.82495\n");# K, L) Z# J& M\" f
    33. }
      + U* B9 K( c+ s2 V& N. T0 [$ A
    34. * D3 B1 j; v. V, K. _# H
    35. static int
      9 K0 t( H9 Q2 Y6 \
    36. m_lagrange_interpolating_set_n_arr()   \' p9 ]4 N8 G- i
    37. {
      \" x\" u\" x4 X+ h* ^( n+ _1 h
    38.   int xi_n = 0;! V& }6 V+ L4 c0 j3 ]
    39.   int yi_n = 0;
      / c! A2 P- q% m
    40.   int n = 0;# y; L+ k4 H+ u0 @
    41.   char *token = NULL;1 v\" x0 b. T, ^2 d1 g
    42.   const char *delim = ",";
      - n7 G2 {$ q: l, B5 x8 S4 G* o: R$ |
    43. / }3 m  N3 R5 a
    44.   token = strtok(m_xi, delim);  d\" U7 Y% }; A. W9 H8 S0 M3 g
    45.   while (token)
      # [! r7 Q' j. g$ O8 [
    46.   {
      2 K7 G+ n* j. f- c+ ~& V( d
    47.     xi_n++;
      6 I4 l/ q. d! `
    48.     n++;
      5 J+ N$ K. H3 L
    49.     m_arr[n] = (float) atof(token);; [2 M0 L( o% O# I
    50.     token = strtok(NULL, delim);3 h) t) H) _3 {  I4 N* ^
    51.   }
      3 x2 X$ q0 c1 Y\" F$ }
    52. # j* f9 n. [5 m/ \) n! J( \; {
    53.   token = strtok(m_yi, delim);
      8 q4 E6 @$ N2 q2 \8 r: X0 A
    54.   while (token)
      + ~. F; I9 P* W
    55.   {9 D. Y, {! U4 O1 t* [! ]
    56.     yi_n++;) g: ?9 W7 [8 t0 ]7 a
    57.     n++;
      1 |5 E8 P  b$ K5 l
    58.     m_arr[n] = (float) atof(token);; ?  T3 F9 |$ X; M
    59.     token = strtok(NULL, delim);' f6 y/ k/ f9 Q3 |
    60.   }- H# e9 X- J  h7 S; a3 h
    61.   
      * p5 W2 \8 B. e4 M7 A2 I  g$ a/ F
    62.   if (xi_n != yi_n) ; w6 i' F. N7 U- n
    63.   {
      % d5 K$ R' J4 D! \+ P2 U& _, F. P
    64.     return 0;
      $ N- r# @3 {/ d( ^: b( u! p& u
    65.   }3 o5 `/ [0 q( u# ^' z

    66. * `' G7 {4 k  |, V) B, v1 h! H
    67.   m_n = xi_n = yi_n;
      * f) e; @0 J( P0 q- M

    68. 8 @& Z$ W2 Z\" Z( x# S% n
    69.   return 1;
      3 U% f5 W4 G2 i: E
    70. }
      1 L6 c' c* m8 v* T  |

    71. 8 L. K+ J2 d- [/ H! S5 a
    72. static float
      1 M- u' b7 D7 o/ [' \\" T& v- }
    73. m_lagrange_interpolating() 8 q\" ^, g! e( T
    74. {
      3 S+ u% i\" h) K
    75.   float l = 0.00000;0 B/ z. S/ F- b
    76.   float li;4 T( U8 I; [! W  m# o/ t# o7 L! n* i
    77.   int i;
      7 ~: H3 T* `4 d6 ]# k$ N6 O3 J: J
    78.   int j;/ L8 V- w8 z+ b: |3 E4 p9 l& E  L
    79. ! P( Q. S/ i7 |7 |+ v2 b
    80. #if DEBUG8 O: i& g) K) q' a, C
    81.   printf("DEBUG at %d: enable debug mode\n", __LINE__);
      3 \) L: q1 ~+ z+ |) `* K, `. a
    82.   unsigned int m_n = 3;
      * K/ C& u( M6 b+ [9 g
    83.   float m_p = 0.5635;
      5 g; r5 r& Z# P( a# t2 i8 z& y, L
    84.   float m_x[] = {0.56160, 0.56280, 0.56401, 0.56521};  j. S. o$ i8 j! C* {) r
    85.   float m_y[] = {0.82741, 0.82659, 0.82577, 0.82495};+ C4 r) G- s8 \5 I# N
    86.   
      6 }. ~* r; ^; j! _+ C6 s. b
    87.   for (i = 0; i < m_n; i++)
      4 {; n) G: z2 }: c1 W: ^
    88.   {6 z/ u/ ~+ F# j
    89.     li = 1.0000000;; p0 r: F+ j7 {( R3 M7 ~: i& @
    90.     for (j = 0; j < m_n; j++)  A7 Y& h/ {/ Y- t4 H0 B! e9 D
    91.     {0 B+ y( s4 [& d
    92.       if (j != i)
      3 z5 v! i1 x\" `
    93.       {
      & E4 G/ h  s- {/ G) i+ J6 t
    94.         li = li * (m_p - m_x[j]) / (m_x[i] - m_x[j]);
      . I( h4 C; Q\" b; u4 l  r
    95.       }
      3 f+ N4 n% l\" e2 z+ h: U
    96.     }
      5 Y% c, w/ v6 x3 h; D* x3 }
    97.     l = l + li * m_y[i];
      # P2 c* ]$ Y9 H2 g4 r2 ]0 ?
    98.   }4 }3 I4 Q( w0 E  G- X/ a  W
    99. #else5 x- C+ Q1 o\" q; O. I5 z. w
    100.   if (!m_lagrange_interpolating_set_n_arr()) # A/ z* r( u. U4 b' k
    101.   {- ~/ a; L# G, u! F) F\" \0 Q( n
    102.     printf("Error: xi and yi counter is diff\n");4 Q5 G- [* @# {' p! x$ q* g7 K
    103.    
      1 \, p$ t- l' V2 M$ w) W
    104.     return 0;
      ( Q\" p. ^( L! X, `% T6 E
    105.   }$ L9 G8 C  X& y; \( q

    106. 0 `$ a/ ~! J# g9 N6 a2 g
    107.   for (i = 0; i < m_n; i++) 3 l% l2 }7 ^8 U  x8 c3 M; o
    108.   {5 u9 M1 R0 P. Z; D& s
    109.     li = 1.0000000;3 I: @, y, u5 |! T1 i' c: n
    110.     for (j = 0; j < m_n; j++) 1 n3 X3 m. S' G& l% H* h2 H: K4 r* @
    111.     {
      5 W) @, h* V& [! L4 O2 e- Y
    112.       if (j != i)
      % u8 t  j( ~\" X5 S; V
    113.       {
        a; j8 }7 _, ^. A& K! ~6 Y
    114.         li = li * (m_p - m_arr[j + 1]) / (m_arr[i + 1] - m_arr[j + 1]);% F$ h) `9 c) f1 h8 j2 c  D
    115.       }
      % E9 c/ Y3 ^: f# T2 V. C- W
    116.     }
      ! u; N- u/ R) ^5 O
    117.     l = l + li * m_arr[i + m_n + 1];4 e# ]# S+ f  w- E8 y. Y
    118.   }. N) t- N4 p  |  l5 Y5 p9 `
    119. #endif1 L) U- O! a( {* t1 T9 q8 C
    120. # \! C# B5 ?3 X2 `5 u! d% C( J
    121.   return l;
      & c4 c+ e0 ]( j\" v; Q8 j0 x
    122. }
      5 y# h/ A2 k9 t9 G7 x5 Y

    123. 5 G/ L& W+ _+ _\" B) g\" D
    124. int
      + M3 f3 F% [6 r. n- `
    125. main(int argc, char **argv)
      + U! T- t% P. E6 X\" M
    126. {
      3 u4 n. x+ h. q' m
    127.   int c;7 {5 S0 U7 f& X. {% `, i! T
    128.   extern char *optarg;5 Y5 c/ \$ L( E& L& y, |
    129.   float res;: ^( W/ y/ v6 ?7 a- a( v0 d  V5 M( {; V
    130. . N7 W\" _% I) ?% v' Y/ B
    131.   if (argc < 2) 5 [$ ]! g0 m+ ]2 s- Y% `
    132.   {0 }! W6 k0 n4 P+ c3 `+ Q, `
    133.     m_lagrange_interpolating_usage();\" E; Q6 N6 |- C# O  b( U7 d$ j
    134.     6 m4 J9 {8 F0 E
    135.     return -1;% M7 v: y' s8 D+ Z0 K' D- ^
    136.   }
      8 {8 S& h4 r, J5 V+ b! L
    137. ' M9 s) R7 K' w
    138.   while ((c = getopt(argc, argv, "p:x:y:")) != -1) ' R! b4 v$ u8 _
    139.   {
      4 {\" P  n\" s7 W! E9 ?. J
    140.     switch (c)
      ) n9 I\" _8 C1 F$ y1 W% }
    141.     {7 O' S, H) B8 S& [' `5 I
    142.       case 'p':* T\" ~4 |4 v9 T- q. p& p
    143.               m_p = (float) atof(optarg);
      ; g7 ?+ t% O+ @
    144.       case 'x':9 Y! M% q8 l# }! p% x) p/ s
    145.         m_xi = optarg;
      ; T- r. ]0 R2 R* `
    146.         break;, I: }+ w) N  Z1 L% a
    147.       case 'y':6 K) |7 G3 e* P/ X' G/ p
    148.         m_yi = optarg;
      2 }& W+ ^, M5 j+ p: e; ~1 Y
    149.         break;
      7 P. `6 o5 ?  E' t0 ~1 a9 h. ^
    150.     }
      4 |4 o' L3 S  Y$ S
    151.   }
      . [! {9 Y- ?\" P2 z5 o- D

    152. 8 h. E: R1 m% _& N! s# p
    153.   res = m_lagrange_interpolating();
      1 x( q2 |7 v+ y/ H9 O6 ~1 m- T. n
    154.   printf("Lagrange interpolating with %.4f result is %.7f\n", m_p, res);0 W( s. Z8 J. |! u- v4 D' ?
    155.   ) P1 ?( u& A+ f
    156.   return 0;2 J+ L' W1 d1 K' K
    157. }
      ' @8 U1 R+ w8 s
    复制代码
    回复

    使用道具 举报

    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, 2025-11-12 16:04 , Processed in 1.087827 second(s), 105 queries .

    回顶部