请选择 进入手机版 | 继续访问电脑版

QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 18753|回复: 12

[分享]插值软件langrang

[复制链接]
字体大小: 正常 放大
ilikenba 实名认证       

2634

主题

47

听众

1万

积分

  • TA的每日心情
    奋斗
    2024-3-28 06:16
  • 签到天数: 995 天

    [LV.10]以坛为家III

    社区QQ达人 新人进步奖 优秀斑竹奖 发帖功臣

    群组万里江山

    群组sas讨论小组

    群组长盛证券理财有限公司

    群组C 语言讨论组

    群组Matlab讨论组

    发表于 2005-3-20 11:55 |显示全部楼层
    |招呼Ta 关注Ta

    软件名称:EXCEL自定义插值函数插值计算数值计算- L" ~* B7 |$ j 版本号: 04y09m287 s; L. s+ W2 K4 V 分类: 工程设计应用 0 Z. u/ W( K& N9 M. x性质: 免费软件 . u# P9 U, }; P6 X使用说明:

    1 j# i( I* v8 i! A4 h: G/ t; Q

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

    " u) B, T% ?* F# ~

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

    % o6 L: y* c5 q5 J" } z

    EXCEL每一个单元格就是一个电子表格,很容易进行一般的加、减、乘、除、乘方、开方,而三角函数、指数函数在EXCEL中可以直接引用内部函数。用EXCEL编制一般的工程计算程序还需解决的有以下两个问题:(1)循环计算,(2)表、单曲线、曲线组的查找(如:锅炉设计计算中的焓值)。对于问题(1)循环计算,EXCEL在工具菜单中提供了两个命令:单变量求解和规划求解,利用这两条命令很容易解决问题(1)。对于问题(2)表、曲线的查找,EXCEL没有提供现成的函数,但也可用VLOOKUP、MATCH、IF、OFFSET等函数的组合勉强近视解决,本文重点介绍表、曲线的查找自定义函数的定义及使用。$ `2 a" ^$ D1 w: i) l / t& Q! L$ ]- H2 z, S 为了更好地解决曲线查找的问题,应用C++程序设计语言,用拉格朗日插值计算法在EXCEL中建立了自定义函数,单曲线插值函数TWLQ(变量,"带路径的保存数据的文件名"),曲线组插值函数THLQ(变量1,变量2,"带路径的保存数据的文件名")。单曲线插值函数、曲线组插值函数的"带路径的保存数据的文件"包含着特定对映表、曲线的信息和计算精度的要求 (文件为Notepad编辑的txt文件) 。 : J( i8 c5 z8 z8 y; g9 b3 S/ Z单曲线lagrange插值函数:double twlq(double x,char* filename);# K- w1 z) I6 x. X double twlx(double q,char* filename);# S5 r" l8 ?" r2 n5 Y$ S 曲线组lagrange插值函数: 3 I- c. U. |4 E& Z; _ double thlq(double x,double y,char* filename); " w6 e! t8 D4 p7 d3 f! R double thlx(double y,double q,char* filename);% ?3 }- B8 U# W2 X$ J- b: g2 j( @ double thly(double x,double q,char* filename);。

    , d6 |6 r1 P" j) I: Q2 C

    例:单曲线插值函数 "带路径的保存数据的文件"结构如下: & N& H. Q% y- q1 ~7 n) f5 k@ Description @" @9 G7 O) s/ W4 ^/ P n, nsel;0 G, u: p1 G; n/ w' K! t x[0],x[1], x[2],··, x[n-2],x[n-1];9 w0 c. `8 W: P+ [ q[0],q[1], q[2],··, q[n-2],q[n-1];7 c9 Z7 D! h {, H; x MinX=0.7,MaxX=0.9,OverRangeAlm=1,X=电压,XUnit=mv,Q=电流,QUnit=mA

    & J6 f& G/ B' [; |5 D

    注解: 2 L$ K! U9 h( l Description:用户自定义描述字符串(Description中不可有@符号); 6 f- @, ^( u& u; C n: 总插值点个数;8 |2 p+ c1 J$ ^* V' @: U nsel:实际参与插值计算的插值点个数; # f' [, q/ l/ y6 n! L" q' u MinX=0.7,MaxX=0.9 取值范围; - a# ~4 u6 C) F2 @ OverRangeAlm=1 越限报警 1:报, 0:不报;' s; q" e- J# S* U- D" d: a. W% ~ X=电压,XUnit=mv,变量名称,单位。

    8 n9 G9 c& V6 A$ Q1 B0 O+ N+ E

    ****结论: [5 C3 o1 C0 @* d1 o2 d, u l)图形化界面的插值函数数据文件生成器 LCZMaker 方便快捷生成单曲线或曲线组插值函数数据文件。% j% A1 x! l& f$ ^6 [# b# p 2)应用EXCEL自定义插值函数,在EXCEL中进行工程计算编程极为便利,比专业编程语言程序设计更易学易用、直观明了,用EXCEL编制的工程计算应用程序更易维护、修改、升级。 ( O. u7 w& T6 z c3 `0 A5 c0 i) S, z 3) EXCEL本身长于表格制作,在EXCEL中进行工程计算编程人机界面友好,输入前、输出后处理方便简单。 6 C! B9 @2 c- @ 4)在某大型锅炉厂电站锅炉性能设计计算中已显神力。

    & P. K9 V0 b2 Q; w! L6 t2 W

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

    2 D! q' u4 M8 Q! C3 i! `2 ^

    [分享]插值软件langrang.zip

    419.84 KB, 下载次数: 85, 下载积分: 体力 -2 点

    [分享]插值软件langrang

    zan
    ww991616        

    0

    主题

    3

    听众

    17

    积分

    升级  12.63%

    该用户从未签到

    新人进步奖

    回复

    使用道具 举报

    ft12345 实名认证       

    0

    主题

    0

    听众

    13

    积分

    升级  8.42%

    该用户从未签到

    自我介绍
    200 字节以内

    不支持自定义 Discuz! 代码
    回复

    使用道具 举报

    0

    主题

    3

    听众

    14

    积分

    升级  9.47%

    该用户从未签到

    自我介绍
    爱打羽毛球的程序员
    1. * @7 e  ]' W5 E3 S8 _& M
    2. /* TODO: Lagrange interpolating # q7 [0 _4 G4 ~0 J
    3. *
      5 {$ q' o7 i& r- _. ^2 d6 u( ~
    4. * For example, if lg2.71 = 0.4330, lg2.72 = 0.4346, then lg2.718 = ?
      3 X. m3 L! V; E\" K. V
    5. * In this situation, it could be solved via lagrange interpolating
      4 u; L! a1 [/ I5 E% A
    6. *
      6 v& e8 }/ k' t) m- V1 d# s
    7. * */
      & t- S, K; y8 |- f

    8. : b  a5 S$ n5 b) C# Z
    9. #include <stdio.h>
      1 e6 N0 }4 T9 I/ d
    10. #include <stdlib.h>
      8 ]% g\" D6 J6 t: i3 h. i% M+ d7 l
    11. #include <string.h>
      $ z! |! o  C/ R' t
    12. 4 i; K4 s  R4 m8 }# l
    13. #define DEBUG 0! L  C9 v8 @/ w3 x  X
    14. . \9 X1 y2 E( w9 H
    15. static float m_p = 0.5635;
      ; u/ \2 [( h9 N7 u9 N- H; A\" k
    16. static char *m_xi = NULL;
      7 ]9 A' B\" F/ L7 ?- n
    17. static char *m_yi = NULL;
      % b2 Y* C* W% @
    18. static float m_arr[] = {};  ^4 Y% |3 C7 g! V5 K
    19. static unsigned int m_n = 0;% k* r  Q& w* Q! o' `* Z1 e

    20. : d/ @4 H; c, V' G- ^
    21. static void m_lagrange_interpolating_usage();
      2 P- d3 w. F+ h% }5 D# }8 O
    22. static int m_lagrange_interpolating_set_n_arr();2 k1 d# T& M: V: I
    23. static float m_lagrange_interpolating();/ g# `, A, |2 J! f) X. m* i+ E* c

    24. 8 P9 b8 o' s% Q/ I, d+ t
    25. static void 0 \) f5 i9 i7 e& x6 e! G. N  l
    26. m_lagrange_interpolating_usage() & J% @2 f7 ^3 L3 T
    27. {
      $ P. y6 f- F& X- K/ ?4 S
    28.   printf("Lagrange Interpolating Usage:\n");
      2 P; t2 S0 O7 Z: i
    29.   printf("bin/li -p ** -x ** -y **\n");
      ) m5 [) O0 d3 X. f% t8 k
    30.   printf("-p 0.5635\n");. N# Q8 j$ j! ~7 L$ _
    31.   printf("-x 0.56160,0.56280,0.56401,0.56521\n");2 m* Z; i$ l, p# Q( k; L
    32.   printf("-y 0.82741,0.82659,0.82577,0.82495\n");
      ' }3 V9 L+ F+ g% [\" @
    33. }& D4 O, C' _+ f  J
    34. 7 L, l: q% F9 I# q5 _
    35. static int + `( J6 G2 k: m: z* Q4 u
    36. m_lagrange_interpolating_set_n_arr() . g7 r- S' \0 G9 G
    37. {' }# `9 `5 ^- s  _( |8 ]. Q
    38.   int xi_n = 0;/ K  x2 Y\" j) D% o
    39.   int yi_n = 0;/ c  I5 U$ Q, C( s
    40.   int n = 0;& [# h/ N: @2 J1 o5 z
    41.   char *token = NULL;4 e# k+ O$ r2 \9 z+ ?- O\" L
    42.   const char *delim = ",";0 N2 [9 }7 Y2 C! X) `- _

    43. 1 @& B- M7 p. u/ f8 i
    44.   token = strtok(m_xi, delim);. |3 D4 F# _# Q
    45.   while (token)
      2 F' O- m# z: G/ R9 o
    46.   {3 H. ]+ v1 p; @
    47.     xi_n++;3 ~8 B# q, w2 P
    48.     n++;
      $ y2 U- _4 T% b1 E
    49.     m_arr[n] = (float) atof(token);
      9 |& R8 F( k# w5 z( w' j( k
    50.     token = strtok(NULL, delim);
      % b$ A! E5 G6 I
    51.   }: q7 ]; Z% u2 L; F' j, U\" N, f: Q1 z
    52. : X$ E0 c$ l/ P4 Q& p
    53.   token = strtok(m_yi, delim);
      ) e& b: ?& m& z! d' `
    54.   while (token)/ c- l$ X3 J8 C; S0 n2 B1 L9 Z
    55.   {
      ) L9 x+ R/ g, b$ T
    56.     yi_n++;
      ; S, C0 N. {9 S7 ]% {' y* p
    57.     n++;
      : ?. E/ v& U1 D7 ]3 m
    58.     m_arr[n] = (float) atof(token);) K# t  N: ^& F- H( i
    59.     token = strtok(NULL, delim);
      0 ]3 N, W0 F1 o
    60.   }
      \" L1 H$ z' x& Q/ E
    61.   6 I2 \  \, ~4 K8 t6 l
    62.   if (xi_n != yi_n) : ~' w\" N2 y5 I, \. R1 @  b4 ~5 P
    63.   {7 _1 H# \: i) t8 i2 D9 l
    64.     return 0;
      , h6 M( u+ J\" m
    65.   }
      / [7 J1 _7 u- s8 x6 W& c* U/ J

    66. 3 [, r6 L' U: g$ s# y
    67.   m_n = xi_n = yi_n;
      . F% e  i9 V' f1 q* @1 j6 `8 S
    68. 9 D' t& H& v7 Y- L9 N
    69.   return 1;/ |0 y1 x' a+ G, n1 {& K, M
    70. }7 H) p2 Y) d+ \% u7 B
    71. ( P/ P0 P0 z: a. h0 |5 W& q
    72. static float
      & O) M7 V0 N$ y' K4 \6 c
    73. m_lagrange_interpolating()   @# B; O: Z9 N' A; u% y) A
    74. {
      3 W5 ^/ u\" `7 M$ |
    75.   float l = 0.00000;
      % o; v1 {' b# E4 c2 Y2 A2 f) E
    76.   float li;$ M# n1 U& ?; k\" H8 d
    77.   int i;; D: Y2 e! Q' Q2 M
    78.   int j;4 F9 n! b2 m0 @# L7 V) J) q
    79. # l' O% t' H4 O0 H. r) S! \\" u( T4 X
    80. #if DEBUG
      ' H/ h+ U  H4 X6 K; V# C
    81.   printf("DEBUG at %d: enable debug mode\n", __LINE__);
      & ^& k2 h) I! h1 ^  a9 N% h
    82.   unsigned int m_n = 3;
      + @, i/ Z& b8 f+ [! l; H
    83.   float m_p = 0.5635;
      0 x8 w\" y; u# Q4 h+ x: S+ r' U
    84.   float m_x[] = {0.56160, 0.56280, 0.56401, 0.56521};3 z, J+ [; q$ T$ c
    85.   float m_y[] = {0.82741, 0.82659, 0.82577, 0.82495};, Z6 U& s! K# f! U/ {+ u3 N
    86.   4 b3 m3 o1 E\" ~; {7 t
    87.   for (i = 0; i < m_n; i++)4 p- t6 c( S( M$ Z' {
    88.   {) ^; i! f( g  L
    89.     li = 1.0000000;
        V4 \5 U/ y9 d' H% p2 T
    90.     for (j = 0; j < m_n; j++)\" `, ]! E. k: r' S7 i
    91.     {0 L4 @8 p7 q5 E+ J
    92.       if (j != i)0 w' \$ q- m9 C
    93.       {
      # e' A' _* r& Y* k) t
    94.         li = li * (m_p - m_x[j]) / (m_x[i] - m_x[j]);
      + f9 Z9 G! ^; u* h
    95.       }
      8 ~& R/ ?  ^0 V* Z. [. ?\" T! V
    96.     }
      1 Z; a' l5 D: r3 t7 v5 }2 g+ Y
    97.     l = l + li * m_y[i];
      + N6 }. H/ @\" |- [! E' ]# i, \/ A
    98.   }7 B3 u8 V4 f( C( l. w/ Y4 V, D
    99. #else
      # b, |\" m$ y  [' ~4 f5 U' i0 c5 ]$ H, b
    100.   if (!m_lagrange_interpolating_set_n_arr())
      1 S, Q) e% X5 H: e7 R4 x) V
    101.   {
      7 {) e4 ?4 S( v: o' Q! h+ d
    102.     printf("Error: xi and yi counter is diff\n");
        T( R& S: N. v
    103.    
        h. b\" W4 X3 U: L: M  m5 X
    104.     return 0;2 m* h. b+ ]( K' B. q6 w& ~
    105.   }' j/ A9 F, I/ `. N
    106. 9 T! M& O5 }1 o+ W+ s2 l& J
    107.   for (i = 0; i < m_n; i++)
      , \\" I! \2 E: r3 }6 S) K
    108.   {
      4 p2 c( t: l9 i( ]: x\" H8 Y2 k% f! _
    109.     li = 1.0000000;3 A8 E0 E4 U. K& w3 c; S. B\" V
    110.     for (j = 0; j < m_n; j++) 7 w4 K8 ?3 L5 w- R5 D7 ~5 z
    111.     {
      % z' }+ d+ H7 {! Z* x' q# q
    112.       if (j != i) 6 n- v: \% [. q: n
    113.       {3 B\" R1 q3 Y/ K4 [- }2 P( {8 y
    114.         li = li * (m_p - m_arr[j + 1]) / (m_arr[i + 1] - m_arr[j + 1]);, d2 I% I- X/ c9 S( ]
    115.       }
      ( b( W# b- L( Z! F6 t/ j
    116.     }) o. e, _9 O7 ~7 K/ z/ }
    117.     l = l + li * m_arr[i + m_n + 1];
      + z6 r; i5 M! H7 z+ }- [
    118.   }5 [\" h3 \' u4 _* Y
    119. #endif' k: D3 @- h& A2 w0 i2 @

    120. ( @# a( E1 _& I8 F. X! B\" I
    121.   return l;
        W! d  \( p9 J; \& q. J
    122. }
      9 p9 V( K& m. K: A. p, j6 p
    123. \" O& ]) l* P1 |8 `/ z$ w
    124. int ; `0 d$ i$ Q! {\" k3 [  M7 w
    125. main(int argc, char **argv) ! P. f, M6 M7 F' T( i) e- u7 o, ]
    126. {& R; J1 c+ N  R+ E
    127.   int c;
      9 {9 Y6 T/ ?5 C
    128.   extern char *optarg;( Y% p& [' X  o9 p5 E
    129.   float res;
      ' |8 {& i# [  s+ x5 e$ y

    130. : k& q- O4 K! K1 Z8 K
    131.   if (argc < 2)
      # ^- m! H/ \3 w, }+ K) s
    132.   {; y3 j! b& ]& {0 O- [7 b. u6 @
    133.     m_lagrange_interpolating_usage();
      , M) O9 p: ^* Q1 c+ E5 M
    134.    
      # G5 X1 @6 d( Q9 S+ S9 M
    135.     return -1;
      * s; o; d- a& m4 J
    136.   }5 I. _9 Q  |6 A. T* s- i' B5 I
    137. ' h) b7 J8 o& R: }8 O
    138.   while ((c = getopt(argc, argv, "p:x:y:")) != -1) + c0 @3 x8 P( C) N9 P) G
    139.   {
      . j) w5 B' j+ U
    140.     switch (c)
      3 c% b# g4 o2 _/ M/ T
    141.     {
        }0 z\" a  W: z9 Y. d
    142.       case 'p':
      2 J  b- g+ @0 d  ?0 a( X. D, c# s
    143.               m_p = (float) atof(optarg);
      $ D% w1 S% J' C. W1 V0 P
    144.       case 'x':' f9 g; y) F/ h. c4 d! b
    145.         m_xi = optarg;
      - A9 a* f* ?7 Q; t, z  b  w
    146.         break;
      ( o5 P3 `! y8 f: f1 a( d
    147.       case 'y':
      8 [; S9 P# Q$ j
    148.         m_yi = optarg;
        _3 ]  Y  O2 k9 d0 w6 k3 v$ @
    149.         break;
      ; o( G8 ?( ^4 W3 {- w
    150.     }: A& s, p# {4 j6 D# H* Z
    151.   }
      % q$ s9 x% c- |

    152. \" D1 W\" R  e$ w9 c& }! S
    153.   res = m_lagrange_interpolating();. ?, w3 M( g$ ^( Q' a5 x6 J0 W
    154.   printf("Lagrange interpolating with %.4f result is %.7f\n", m_p, res);
      : e) J( X( J# k; ]5 Q  h0 L
    155.   / X2 f  o7 I' h+ F3 ]& z' s5 Y
    156.   return 0;
        j0 c. s) @6 d& A2 N# G. h
    157. }8 z2 g$ X* a9 s% \. 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, 2024-3-28 23:54 , Processed in 1.036594 second(s), 106 queries .

    回顶部