QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 22600|回复: 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自定义插值函数插值计算数值计算 4 i5 z+ n9 t5 ^; q4 X# z b+ U版本号: 04y09m28 ( ]; p# q: ^ e3 q" }9 U分类: 工程设计应用! Y5 O4 h, ?+ b/ E1 {( n 性质: 免费软件' \$ l" E0 I. n( b 使用说明:

    : o/ R; \. ] Q7 G4 D* p, D

    人们对EXCEL普遍熟悉的功能是表图的处理,不太知道其在工程计算(如锅炉设计计算)中的应用。复杂的工程计算常常用专业编程语言(Fortran、C、Pascal 等)来编制计算程序解决,用专业编程语言编制工程计算程序往往有下面二个缺点: . f9 H* N) K: \) j3 H# L1 X $ y% Z9 F k6 t 1) 编程语言专业性强,一般工程技术人员难以掌握,由这些专业编程语言编制的计算应用程序的维护、修改、升级都比较困难。

    1 l5 W. i' m$ Z8 K% H H; o

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

    / }4 Y' C& E$ C

    EXCEL每一个单元格就是一个电子表格,很容易进行一般的加、减、乘、除、乘方、开方,而三角函数、指数函数在EXCEL中可以直接引用内部函数。用EXCEL编制一般的工程计算程序还需解决的有以下两个问题:(1)循环计算,(2)表、单曲线、曲线组的查找(如:锅炉设计计算中的焓值)。对于问题(1)循环计算,EXCEL在工具菜单中提供了两个命令:单变量求解和规划求解,利用这两条命令很容易解决问题(1)。对于问题(2)表、曲线的查找,EXCEL没有提供现成的函数,但也可用VLOOKUP、MATCH、IF、OFFSET等函数的组合勉强近视解决,本文重点介绍表、曲线的查找自定义函数的定义及使用。 , R5 R. \* L' D2 h. L. h 3 n& [8 L# A$ a" H0 n- ` 为了更好地解决曲线查找的问题,应用C++程序设计语言,用拉格朗日插值计算法在EXCEL中建立了自定义函数,单曲线插值函数TWLQ(变量,"带路径的保存数据的文件名"),曲线组插值函数THLQ(变量1,变量2,"带路径的保存数据的文件名")。单曲线插值函数、曲线组插值函数的"带路径的保存数据的文件"包含着特定对映表、曲线的信息和计算精度的要求 (文件为Notepad编辑的txt文件) 。8 J) p$ |7 Q; x% N7 V 单曲线lagrange插值函数:double twlq(double x,char* filename); # g" X/ e8 m8 W; u$ F& Y; q8 f: Z double twlx(double q,char* filename);( ^4 x; H* ~/ Z" I2 k9 X5 V, a 曲线组lagrange插值函数:5 R7 \5 z4 M7 T+ N% x% d4 ~- U double thlq(double x,double y,char* filename); 1 i( E2 _" k# U6 Z/ X/ y+ U( h double thlx(double y,double q,char* filename); 6 v% b7 t$ x/ e; N- p double thly(double x,double q,char* filename);。

    2 T' M( T9 |' i9 _$ e6 W! l

    例:单曲线插值函数 "带路径的保存数据的文件"结构如下:& t& v9 Z9 `9 _2 f: P& z! H# q, o6 @ @ Description @ P7 n% U9 O$ f0 H1 l# n n, nsel;7 b" B, x/ A* g x[0],x[1], x[2],··, x[n-2],x[n-1];& v9 Z) x) Z/ o6 g q[0],q[1], q[2],··, q[n-2],q[n-1]; ( z: y5 |. z) ?- |MinX=0.7,MaxX=0.9,OverRangeAlm=1,X=电压,XUnit=mv,Q=电流,QUnit=mA

    ; S5 R2 T" p: k* t

    注解:% o' W, m2 F, b" B7 f Description:用户自定义描述字符串(Description中不可有@符号);- I; N- `3 B- W n: 总插值点个数; & W3 O7 o6 ]5 }6 k' i/ Z nsel:实际参与插值计算的插值点个数; : j9 b7 _0 {3 u: j; _ MinX=0.7,MaxX=0.9 取值范围;, `8 n* K# K8 ` OverRangeAlm=1 越限报警 1:报, 0:不报; ) }( j7 T# a6 D* s8 d e% g2 x X=电压,XUnit=mv,变量名称,单位。

    ) u( G/ C' c# a m

    ****结论: 4 R; \' t2 g6 e i2 U* L l)图形化界面的插值函数数据文件生成器 LCZMaker 方便快捷生成单曲线或曲线组插值函数数据文件。 - X6 l y9 @4 J3 [8 t4 L1 I 2)应用EXCEL自定义插值函数,在EXCEL中进行工程计算编程极为便利,比专业编程语言程序设计更易学易用、直观明了,用EXCEL编制的工程计算应用程序更易维护、修改、升级。 9 _+ ~* H+ B3 e9 T: j* d& R 3) EXCEL本身长于表格制作,在EXCEL中进行工程计算编程人机界面友好,输入前、输出后处理方便简单。! f/ f: ~: {& z) u 4)在某大型锅炉厂电站锅炉性能设计计算中已显神力。

    # e$ @- V5 C" ? x. q

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

    P N( l) e, C" 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. 6 H* J) ^5 m. p. J0 h$ o' \: w
    2. /* TODO: Lagrange interpolating , H8 o, u' ?0 c* ?: D
    3. *' f$ \: R! ]$ s* F  N
    4. * For example, if lg2.71 = 0.4330, lg2.72 = 0.4346, then lg2.718 = ?
      4 Y8 y) n: ]4 s( |7 U6 z4 t5 d
    5. * In this situation, it could be solved via lagrange interpolating4 g! |# d- A& z0 g3 k
    6. *
      7 ?! g$ F: m) B/ K0 `2 J5 b
    7. * */, I) J( M  h+ F$ e0 y8 _! F( C

    8. 9 Q4 p4 p0 q. y, }' {0 g- C
    9. #include <stdio.h>\" C6 q1 Z$ g# z9 H# Z1 G3 ?+ q
    10. #include <stdlib.h>! s1 Q! a1 k/ Y, L2 V% d6 R0 Q7 y
    11. #include <string.h>( V. K2 u/ F\" @

    12. . e' t* x  c\" T9 f\" k
    13. #define DEBUG 0
        _7 ^\" n( Y9 K7 \2 d4 G

    14. 8 M; D' ?, P( x% }0 m: s
    15. static float m_p = 0.5635;
      9 ?, Z, G8 ^5 g0 Z/ X& c7 L, @
    16. static char *m_xi = NULL;
      1 n7 ?/ I) K/ C$ a
    17. static char *m_yi = NULL;) j- I% {5 x: ?
    18. static float m_arr[] = {};1 B6 b; f) Z3 _% B, V6 D+ Q$ e5 e
    19. static unsigned int m_n = 0;
      & \0 p* v6 P4 q- X6 |
    20. 9 z1 F; Y  l' l7 r3 E7 J$ _
    21. static void m_lagrange_interpolating_usage();
      2 i2 W) r% f- K# _+ w3 F
    22. static int m_lagrange_interpolating_set_n_arr();( k6 N' J7 ?/ o4 i8 V! g+ p
    23. static float m_lagrange_interpolating();
      & K$ i  [+ Z# `, Y+ I6 ?( o

    24. $ r  R# [9 Y2 Z
    25. static void
      , v\" Y3 c: j# d; H# V8 _1 d
    26. m_lagrange_interpolating_usage()   N% w$ t, y2 A! f* }0 S, _5 }
    27. {- z+ E! d6 t' s0 k7 ^) X\" p) V
    28.   printf("Lagrange Interpolating Usage:\n");8 T/ ~. t% R! M2 ~- ^2 j% G
    29.   printf("bin/li -p ** -x ** -y **\n");6 u2 O9 z7 A+ N* ]9 P, l! x  q% `+ R
    30.   printf("-p 0.5635\n");: R* M9 M  X7 t6 _6 R
    31.   printf("-x 0.56160,0.56280,0.56401,0.56521\n");) ]. _6 p6 s  [9 a
    32.   printf("-y 0.82741,0.82659,0.82577,0.82495\n");\" B9 l1 ~' b3 r8 l
    33. }
      / v# p. h4 @\" o  y' I  e7 {* }( b
    34. ; ^3 t# D! p* x: y( X! C
    35. static int 0 R5 l# `\" M- ?* f3 N\" y% \
    36. m_lagrange_interpolating_set_n_arr() . r1 p2 L+ l6 x1 `- O\" i# T& y
    37. {$ v7 J8 l8 S+ j8 U: N% R
    38.   int xi_n = 0;
      + B# V0 Q! y, }6 b6 i# d8 H
    39.   int yi_n = 0;
      , C/ `! g5 v) C$ k! k1 L5 s7 E
    40.   int n = 0;
      1 |$ l% a0 j' h3 K, e( f9 X1 c
    41.   char *token = NULL;
      1 n* j1 _\" P* R) |$ V3 G8 V\" D% J
    42.   const char *delim = ",";
      ; H, A$ ^1 C, ^' L  P

    43. : ?  Y( ^  K4 ?/ e' n6 w8 E
    44.   token = strtok(m_xi, delim);( E, R9 O/ g. A, _
    45.   while (token)9 ?4 l2 v6 H8 l
    46.   {) T' q( V! Z( i8 o; j$ a. B) G, ?
    47.     xi_n++;) a5 u, h1 {( z; F  I9 _- k0 Y7 L; |
    48.     n++;& I1 k* ^8 D( N+ P
    49.     m_arr[n] = (float) atof(token);
      ( _2 A3 R( C$ |( U- a9 {
    50.     token = strtok(NULL, delim);: b\" s: u6 X, u& D$ z
    51.   }
      + S% a  m0 j) v& k+ l
    52. + `. a  ?, w) D3 k* I; ]8 i
    53.   token = strtok(m_yi, delim);
      ) v3 f# }; Y\" N: z! o# F* @
    54.   while (token)
      5 |% g: T+ r. U0 o; Y
    55.   {
      \" S; N& Q\" ?, K1 E2 G# `* D  k
    56.     yi_n++;
      ; T\" r( F5 N% ]& h9 i- m7 g
    57.     n++;
      9 J) |% ?3 O8 I) }6 S/ X* Z
    58.     m_arr[n] = (float) atof(token);8 |5 F, v: E* }9 |6 a, Q
    59.     token = strtok(NULL, delim);+ Z  j8 }9 j' Z, ]2 u
    60.   }. _/ F& a\" v% f, ^2 g
    61.   : D: y3 p! x& F7 T
    62.   if (xi_n != yi_n)
      ) C& R4 `- a\" u) M+ Z
    63.   {: N; v\" ?\" y  ]
    64.     return 0;\" e& z! c3 t1 m
    65.   }
      ' V$ v( U* y2 P! o. ~' `/ C% C: Q) D

    66. . u9 h. [8 B0 m, r$ _/ u
    67.   m_n = xi_n = yi_n;7 f2 @0 N3 L; Q9 x- s

    68. 9 `4 E' F5 e; p+ m0 K7 E
    69.   return 1;
      + ~* K( \7 j- {9 Q
    70. }
      0 S) i! H2 T6 V/ t& U! D( g

    71. 6 ]) o- d! C$ @6 m2 ?2 s
    72. static float 3 a\" z' S3 V% \0 P; T
    73. m_lagrange_interpolating()
      ' D& |, M% b\" F0 P7 Y% N8 R% F
    74. {
      / o# `7 o5 Q' ^
    75.   float l = 0.00000;2 H* Z, e# }0 @
    76.   float li;
        g% t6 o3 H+ v& n1 V
    77.   int i;3 e3 S  K& Z7 Z1 [9 g0 G5 `
    78.   int j;7 q1 {5 H! S\" J: y9 z
    79. & n4 T: C  u5 E  U' ~
    80. #if DEBUG5 h+ K$ e7 @: [* }. ?* K
    81.   printf("DEBUG at %d: enable debug mode\n", __LINE__);) b  l8 P: _9 B5 g7 D
    82.   unsigned int m_n = 3;
      # a$ `# G! S) J$ N. i% @
    83.   float m_p = 0.5635;3 q$ T# t  T5 r* \  G& a! m& j
    84.   float m_x[] = {0.56160, 0.56280, 0.56401, 0.56521};  K( a5 V, E( s# ~8 ?
    85.   float m_y[] = {0.82741, 0.82659, 0.82577, 0.82495};
      ) h* ?7 ]& ^4 s. A/ J\" h: h
    86.   
      7 C0 D\" e) m, c: k* M& ^
    87.   for (i = 0; i < m_n; i++)
      ; K1 _3 B4 Z: }. G7 F* R1 K- }. W# Q4 Q
    88.   {
      1 p. i( }2 ^' ~$ w0 O8 _
    89.     li = 1.0000000;( v. O1 |2 t! p, c
    90.     for (j = 0; j < m_n; j++)) v8 G3 `1 M# o: {# Z+ [2 K
    91.     {: d3 f2 x  B5 t4 L
    92.       if (j != i)
      9 w\" e# i/ t0 X% f( ~! a2 m
    93.       {7 j! L8 Q% j1 c- T
    94.         li = li * (m_p - m_x[j]) / (m_x[i] - m_x[j]);
      + c, J- P% l9 e& j5 h# {0 n9 D/ Y
    95.       }
      1 J  B( v5 X6 K
    96.     }
      7 t  Z) e9 @% C. c; x# G, n
    97.     l = l + li * m_y[i];
      6 U4 M+ K% {6 C8 c0 i) j, e
    98.   }
      # a5 o+ C4 w, ?\" m9 p7 c
    99. #else) |' C+ @, w# S4 R+ l  u2 i
    100.   if (!m_lagrange_interpolating_set_n_arr()) ! t) D; W$ ?\" _2 A! X
    101.   {
      7 U- P) Y3 x6 ^6 E* X/ m
    102.     printf("Error: xi and yi counter is diff\n");
      + p8 }/ }+ s* V# t- E
    103.     # ^7 p9 R! C7 C0 S& B3 A
    104.     return 0;( W' C' v. ^$ \$ m, ?$ }8 Q9 t. X: X
    105.   }
      0 V5 c7 G0 j- W: d, D

    106. 3 }5 g! T7 S0 o2 i
    107.   for (i = 0; i < m_n; i++)
      % ]1 Q- M0 X) }: \% Z6 Q
    108.   {% {4 m8 P; w1 U\" P
    109.     li = 1.0000000;1 S7 r7 e. P9 I$ b( |
    110.     for (j = 0; j < m_n; j++)
      * W3 ?4 r1 k$ x
    111.     {, E: f, p( ~8 @
    112.       if (j != i) 1 k4 Z: {$ G& j5 C# h% ]
    113.       {  j# h! x: e5 F+ L* R5 o
    114.         li = li * (m_p - m_arr[j + 1]) / (m_arr[i + 1] - m_arr[j + 1]);
      4 L/ V7 x& A) j0 ~: @$ Y
    115.       }
      \" e, \& @/ |9 R! Y2 M
    116.     }
      5 @8 t\" U5 R9 T# d: \
    117.     l = l + li * m_arr[i + m_n + 1];% _/ x2 ~& r+ e# c
    118.   }0 N2 u\" ^+ K$ t% j- k
    119. #endif
      ) e; F7 Q1 M( u# P* i2 T* {8 N0 A' E8 O
    120. \" @! {( G2 @& C) `* V
    121.   return l;
      9 ^5 ~6 ]' }\" ?. @# R! J- m& }
    122. }
      : x- I0 M: A, ~% \

    123. 9 B# t7 \5 X2 ~8 c( p7 U3 X
    124. int
      ! M& ^1 C# h7 N. i6 F, h
    125. main(int argc, char **argv)
        B* t1 {# T( D9 u1 {5 F. k; @
    126. {/ }; b, w\" x: i6 r! b
    127.   int c;1 q, T- }; N/ P. f* z$ u\" ~7 B7 P! {) l
    128.   extern char *optarg;7 i0 [( p2 S% P. q+ H- m2 H\" r
    129.   float res;7 E2 |* S7 Z\" s$ \( _' W6 }

    130. 2 D\" _\" w' V2 T
    131.   if (argc < 2) # |( @3 K. B/ ]& o
    132.   {4 k% E' W: ?\" r# P
    133.     m_lagrange_interpolating_usage();
        W0 W! E! t) C$ y
    134.     $ s- b$ N$ j! c9 B8 J6 }
    135.     return -1;0 s1 M5 p! Z  m3 H\" G\" y% u- u
    136.   }
      4 B/ F' e* Y# r, {

    137. 0 g5 x' k% ?( b' V3 n
    138.   while ((c = getopt(argc, argv, "p:x:y:")) != -1) ! S8 x# P8 L& v& }' S& Z
    139.   {6 c2 j5 w. q* ?8 B! Z& `
    140.     switch (c) 8 E$ w4 c# P. I& B( R. C/ z
    141.     {
      ( k( G  _$ u' Z! K
    142.       case 'p':
      ) L5 ~) S9 |\" @$ W
    143.               m_p = (float) atof(optarg);
      ( I1 o4 d1 X4 s
    144.       case 'x':
      : k( `& u1 R: L, K\" m0 r3 \\" r
    145.         m_xi = optarg;* E' n4 ]\" M- W! g2 j
    146.         break;
      & w4 V/ Y5 L# Q- \* y0 T; h
    147.       case 'y':$ N' M( T8 m6 c+ B5 ^0 Z
    148.         m_yi = optarg;) n. }# ~2 O% @
    149.         break;& @$ h% @* s% Q. n* d/ \) u: n
    150.     }
      \" ?* [9 y# M$ b2 ?, f
    151.   }
      ) _3 Z& V/ z. ?  w: }' W% ]

    152. * B. u  W* a$ c. g
    153.   res = m_lagrange_interpolating();! V  e, _- s. O* Q) l2 L! t
    154.   printf("Lagrange interpolating with %.4f result is %.7f\n", m_p, res);
      ! R8 r( \! \7 a3 @+ F8 H4 H
    155.   # b\" F+ D1 ]1 C; L
    156.   return 0;: E& l8 R5 j: D* H0 J% `, U8 p
    157. }
      # f% U7 ?) E9 b8 }1 Z\" r
    复制代码
    回复

    使用道具 举报

    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-9-13 16:46 , Processed in 0.389439 second(s), 104 queries .

    回顶部