QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 22244|回复: 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自定义插值函数插值计算数值计算 ; d) J* l7 l, ~* c( s \) ]( _' ^版本号: 04y09m28 4 w# x7 B9 V; e6 W5 B l9 f分类: 工程设计应用 0 d# B6 B. T: `性质: 免费软件 & m7 o8 F5 n6 u使用说明:

    * X1 J4 Q% O8 B1 h$ X0 @9 i0 l

    人们对EXCEL普遍熟悉的功能是表图的处理,不太知道其在工程计算(如锅炉设计计算)中的应用。复杂的工程计算常常用专业编程语言(Fortran、C、Pascal 等)来编制计算程序解决,用专业编程语言编制工程计算程序往往有下面二个缺点: ( g9 Y9 e2 q3 m. \# J # K/ P6 T$ \( _; O5 S# x 1) 编程语言专业性强,一般工程技术人员难以掌握,由这些专业编程语言编制的计算应用程序的维护、修改、升级都比较困难。

    & x$ J J2 |! `/ Z( l' @% f

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

    6 c9 t, Q% S. ]+ f

    EXCEL每一个单元格就是一个电子表格,很容易进行一般的加、减、乘、除、乘方、开方,而三角函数、指数函数在EXCEL中可以直接引用内部函数。用EXCEL编制一般的工程计算程序还需解决的有以下两个问题:(1)循环计算,(2)表、单曲线、曲线组的查找(如:锅炉设计计算中的焓值)。对于问题(1)循环计算,EXCEL在工具菜单中提供了两个命令:单变量求解和规划求解,利用这两条命令很容易解决问题(1)。对于问题(2)表、曲线的查找,EXCEL没有提供现成的函数,但也可用VLOOKUP、MATCH、IF、OFFSET等函数的组合勉强近视解决,本文重点介绍表、曲线的查找自定义函数的定义及使用。: n {$ e1 ]! p- ^; w1 X 0 [9 x# W/ J+ a$ c 为了更好地解决曲线查找的问题,应用C++程序设计语言,用拉格朗日插值计算法在EXCEL中建立了自定义函数,单曲线插值函数TWLQ(变量,"带路径的保存数据的文件名"),曲线组插值函数THLQ(变量1,变量2,"带路径的保存数据的文件名")。单曲线插值函数、曲线组插值函数的"带路径的保存数据的文件"包含着特定对映表、曲线的信息和计算精度的要求 (文件为Notepad编辑的txt文件) 。 - [) h2 d, U, l6 ^ g' |$ B单曲线lagrange插值函数:double twlq(double x,char* filename);0 E; X4 s7 Y y9 t double twlx(double q,char* filename);3 x* i0 k a+ \0 q 曲线组lagrange插值函数: $ g5 m$ h& M: e; Y2 v& Q double thlq(double x,double y,char* filename);0 i9 x$ X+ w" A+ ] double thlx(double y,double q,char* filename);; h0 ^( }9 \( X9 q- d- g double thly(double x,double q,char* filename);。

    6 P+ A8 u) ]: ^

    例:单曲线插值函数 "带路径的保存数据的文件"结构如下: 7 ]& u( j+ n, ~: j. V3 _@ Description @0 T3 U( }2 [% k2 ^: K5 | n, nsel;8 g8 ~; ]+ K# Q0 I x[0],x[1], x[2],··, x[n-2],x[n-1];4 P7 m% c4 p: Y. ]9 x3 `7 N+ A q[0],q[1], q[2],··, q[n-2],q[n-1]; 4 y& {0 i/ v0 i' iMinX=0.7,MaxX=0.9,OverRangeAlm=1,X=电压,XUnit=mv,Q=电流,QUnit=mA

    6 D) x7 q2 F' e5 M4 \8 v, g+ I

    注解:5 Q( m8 @9 p( y# B Description:用户自定义描述字符串(Description中不可有@符号);: q7 n2 j/ W/ f* v- m n: 总插值点个数;- Q$ c1 Z. l0 L- d" T4 Q6 a nsel:实际参与插值计算的插值点个数; 4 R# o9 {0 _$ B/ Z0 F% x; y# J- Z MinX=0.7,MaxX=0.9 取值范围; , ~; Z8 l i9 v. ?+ _ o0 D OverRangeAlm=1 越限报警 1:报, 0:不报;+ Y1 B% X6 i8 p# G X=电压,XUnit=mv,变量名称,单位。

    : m/ g. E" p ?2 _# ]: n

    ****结论: # Y g+ \$ _- Z2 q4 } l)图形化界面的插值函数数据文件生成器 LCZMaker 方便快捷生成单曲线或曲线组插值函数数据文件。 + C$ l5 W# U# y1 \ 2)应用EXCEL自定义插值函数,在EXCEL中进行工程计算编程极为便利,比专业编程语言程序设计更易学易用、直观明了,用EXCEL编制的工程计算应用程序更易维护、修改、升级。$ H. s% l& Q M% ? 3) EXCEL本身长于表格制作,在EXCEL中进行工程计算编程人机界面友好,输入前、输出后处理方便简单。 D9 O1 O1 ? l 4)在某大型锅炉厂电站锅炉性能设计计算中已显神力。

    8 `7 c9 j e, M8 y! I m H

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

    1 N$ S( `/ [8 r& @% P7 t

    [分享]插值软件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. * y# E0 v( S- C* O* t5 s9 U
    2. /* TODO: Lagrange interpolating 8 I- r6 u6 f& W# [7 N8 ^
    3. *! `) c( _2 m- M& d+ k
    4. * For example, if lg2.71 = 0.4330, lg2.72 = 0.4346, then lg2.718 = ?: |! q/ G: i5 S  q
    5. * In this situation, it could be solved via lagrange interpolating' J4 h) P\" Q& c! h% K
    6. *
      5 F3 n8 e  Z, d* N2 p$ S  H- J
    7. * */
      - u( i0 X: J: d6 G& p/ L1 [
    8. ' n/ y( N( e) g; m  p+ f) Q
    9. #include <stdio.h>
      0 Z& B1 k/ ~# T7 v
    10. #include <stdlib.h>
        }3 c\" S+ x, `. q
    11. #include <string.h>
      9 ]) L; p7 z& ?( ?0 {
    12. / l- B: _& M  s2 B8 _4 M4 A
    13. #define DEBUG 0
      $ d& E6 m7 e! W! X
    14. , P+ g  }, L0 i/ e* K* }% e+ k% j\" I8 U
    15. static float m_p = 0.5635;. ^; _7 E. b. x+ l2 `% X( g
    16. static char *m_xi = NULL;
      , ?6 C, C9 O& V; S
    17. static char *m_yi = NULL;; `$ g% `5 w; R
    18. static float m_arr[] = {};1 |) R, v7 a. K5 t& j, c
    19. static unsigned int m_n = 0;$ {. I1 H  s# S! A

    20. * z3 a9 k3 m, N# D% \0 A2 Q% H
    21. static void m_lagrange_interpolating_usage();% t! J) p' N! H8 }: d* b8 M
    22. static int m_lagrange_interpolating_set_n_arr();# X6 B% E5 l/ N4 B\" S' G
    23. static float m_lagrange_interpolating();
      ! J8 _  v: B' j9 |! ~5 f

    24. + q\" m3 S& O  v\" O
    25. static void # E1 t( @7 T7 R; B
    26. m_lagrange_interpolating_usage() 1 ~. \# c4 n3 i# _/ w6 Z
    27. {3 e* [6 T9 S\" h7 ?* S* k: t
    28.   printf("Lagrange Interpolating Usage:\n");
      % P% M7 [/ o8 |7 v5 A
    29.   printf("bin/li -p ** -x ** -y **\n");
      2 D7 N9 f% k\" ]
    30.   printf("-p 0.5635\n");& B+ x& E0 b' B
    31.   printf("-x 0.56160,0.56280,0.56401,0.56521\n");5 D4 `' [1 g4 m; n- _) s& k5 A! {9 a
    32.   printf("-y 0.82741,0.82659,0.82577,0.82495\n");% p: M) l1 |\" `( n/ g
    33. }& T3 G1 F' Y# g( @3 W  X9 x  |
    34. * p3 T$ p# L+ T1 {3 [
    35. static int
      \" i( ]7 N% z1 `6 d. l. B
    36. m_lagrange_interpolating_set_n_arr() ; S% A4 _, a! j2 W7 ^, B
    37. {) Y1 K/ F, `3 U4 ~; q
    38.   int xi_n = 0;
        T. K/ F, Y  y3 T\" v
    39.   int yi_n = 0;
      5 P( f- k2 V% u
    40.   int n = 0;: B( ?# V: r% \5 q: {/ a
    41.   char *token = NULL;9 W# c0 r, X! q( A9 E\" H6 U- P
    42.   const char *delim = ",";
        b0 B5 j9 i) ^( ~
    43. / D4 W! v6 x  r5 l3 O5 @' u
    44.   token = strtok(m_xi, delim);3 b: E& H4 ^5 h( [: Q& L
    45.   while (token)
      6 B* _7 I& J. a
    46.   {$ I\" D: X$ P7 |2 W5 y
    47.     xi_n++;
      % I! r4 J) l6 ?  C  V, I9 _
    48.     n++;# w# G/ o/ L; O% j/ i1 [
    49.     m_arr[n] = (float) atof(token);
      ! v, A& Z# F3 D/ O3 r6 \
    50.     token = strtok(NULL, delim);, `/ [2 n; r7 D
    51.   }
      * _  B5 o5 b' l- `$ j9 L

    52. 6 O$ D7 @6 ~5 A4 w' t1 G! Y
    53.   token = strtok(m_yi, delim);) J, `% G7 J4 R4 o\" T
    54.   while (token)
      & t1 V  f9 q# B. {/ `9 ~' m
    55.   {
      ! P% H# U& S( l; n
    56.     yi_n++;1 {6 [, L2 Y0 N' }
    57.     n++;
      ; A2 z0 }. s% g) _: H0 p
    58.     m_arr[n] = (float) atof(token);
      \" @4 b1 v9 y# b/ N- B
    59.     token = strtok(NULL, delim);6 p; D1 y3 U7 u1 N0 T
    60.   }6 U7 G8 a3 X8 S8 Q
    61.   ' q. A$ j: V\" L- Q
    62.   if (xi_n != yi_n)
      / m& ]' V; g9 b& _( m, `, c5 D
    63.   {
      $ g+ l4 P3 ~* U2 N
    64.     return 0;2 y! s. P7 K  j3 s% e
    65.   }
      9 H/ o% _+ X* r\" u1 A\" U! ?

    66. $ U: n4 T& X7 u5 _* R4 l: c  e; A
    67.   m_n = xi_n = yi_n;
      9 T/ b2 S$ f7 z1 n( B' F2 D
    68. 0 i3 U: A. R/ J\" V& Y' m
    69.   return 1;; y1 R8 h+ R  x5 W/ H  ^' u, C% F
    70. }
      * C( O- J- @5 k+ u\" l' n

    71. * j  q: i  _3 Y, X
    72. static float \" K\" n0 k, m3 j\" d$ ~
    73. m_lagrange_interpolating()
      4 s& J+ D  w0 a. n5 x* J( w
    74. {
      ' {# @4 A: N9 I4 i& J! {% L: j
    75.   float l = 0.00000;
      7 \) u  d\" s/ D
    76.   float li;; g7 R3 q0 Q  y0 `, z
    77.   int i;
      0 W\" G8 Q0 y. B+ C+ }; Y
    78.   int j;
      1 Z# o9 D( L% h3 ^0 [1 N+ _
    79. ) }, p* d5 ]  I& z$ ]  p* R\" I3 I
    80. #if DEBUG1 Q$ d, \+ ~9 r6 A9 U% @
    81.   printf("DEBUG at %d: enable debug mode\n", __LINE__);2 i3 K; i% x* k! K0 @- k, E0 m% h: y- D  k6 w
    82.   unsigned int m_n = 3;5 [+ Q- V$ g, c/ ^( w
    83.   float m_p = 0.5635;' o% C+ d( \  o: m: _
    84.   float m_x[] = {0.56160, 0.56280, 0.56401, 0.56521};
      # B4 i1 ^8 T% t- U
    85.   float m_y[] = {0.82741, 0.82659, 0.82577, 0.82495};. d( ^! a3 _6 X\" z' F% z: U
    86.   
      8 w3 |* ]0 Y+ G$ Z2 z
    87.   for (i = 0; i < m_n; i++): L6 k6 C' S2 [( `6 T. Q2 Q
    88.   {1 m0 l: ^: O: e- }( i: e
    89.     li = 1.0000000;
      0 B! c9 {& r, u4 ]
    90.     for (j = 0; j < m_n; j++)2 z0 s6 ^6 z3 V/ W9 k# Q8 ~& [: a: b
    91.     {' t  U1 h; v: f) u
    92.       if (j != i)
      \" Y( \! w$ s, E
    93.       {' x; |+ _+ O! J
    94.         li = li * (m_p - m_x[j]) / (m_x[i] - m_x[j]);\" n3 z, H\" J0 p  Q' }
    95.       }\" K( u1 @9 P2 E, W\" X1 `' q
    96.     }
      ' i% q* l5 x* }& L/ l: Z$ E
    97.     l = l + li * m_y[i];
      0 H( F' [6 y3 R: `/ \  i: S
    98.   }
      , e% \9 N! W- L2 W$ T# I) [6 z
    99. #else
      $ P2 C* L0 f; G) w+ H3 v5 \
    100.   if (!m_lagrange_interpolating_set_n_arr()) 5 H; M1 z1 ~* J% d5 B\" A* B
    101.   {* b, Q  x' b: I\" g
    102.     printf("Error: xi and yi counter is diff\n");
      \" w& G) y! f% w9 z2 }3 n0 e
    103.    
      . N1 [2 O2 m. E\" ^9 ^\" n2 Z. K
    104.     return 0;* f$ L3 k6 v. x\" r9 f8 j
    105.   }
      2 N  b% \/ g! G) P# B) _$ X+ `

    106. & t0 A7 H' o+ V6 H
    107.   for (i = 0; i < m_n; i++)
      - ^( S5 c, _+ F; N
    108.   {; S' \\" l  `7 V3 X
    109.     li = 1.0000000;5 s, r( E/ e. r  `
    110.     for (j = 0; j < m_n; j++) + a& L# l, V0 Z9 L5 |- j3 ?
    111.     {. _5 j# n+ F$ K- h6 p1 L9 W
    112.       if (j != i) 3 D; [$ I\" k' w) ?5 h; k
    113.       {( k2 ~: R, _8 _' H
    114.         li = li * (m_p - m_arr[j + 1]) / (m_arr[i + 1] - m_arr[j + 1]);
      ( x' p; O: V3 i7 {$ E0 q
    115.       }
      / |( J* E& {  K: _4 ?
    116.     }$ J5 N2 E( z# k
    117.     l = l + li * m_arr[i + m_n + 1];7 j+ ^7 a0 P$ J( @( d# ~) c% N
    118.   }( e# r1 ]; [/ I, }3 w5 H8 C
    119. #endif
      ; m& k3 r# k# T2 U* Y; }/ U

    120. \" ]' W, d& L6 v2 y
    121.   return l;\" ?  T* v8 W% R
    122. }; F1 H/ i0 m+ o7 s\" L2 ?) _/ `
    123. , F- z3 l6 j& v# \\" u
    124. int 4 u2 L) Y, a) H4 d- S, v
    125. main(int argc, char **argv) # l1 E% ?\" O( R1 y% `* w& w: \
    126. {
      + ~: U# t$ B3 h
    127.   int c;: b\" e8 |! r5 o5 }( L! k
    128.   extern char *optarg;
      1 Y( q1 v\" a8 M. P8 e
    129.   float res;
      3 D; x7 d- }, U1 b# f

    130. . I. o/ x  |( @7 E$ {: d3 ]
    131.   if (argc < 2) ; K( b# R6 y1 E5 B% f1 [
    132.   {
      $ [# x2 Y! ?( U: n: |
    133.     m_lagrange_interpolating_usage();2 p5 V3 @& H\" j- m
    134.    
      2 ^$ X# }' i2 Y! o. v- M\" A
    135.     return -1;6 W. |/ I. B/ p
    136.   }. z% v9 Z* ]- }! y% O& }* X
    137. 8 I2 S3 M/ d# E' t4 t6 H4 Z, j
    138.   while ((c = getopt(argc, argv, "p:x:y:")) != -1)
      ; a/ `2 }4 Q1 G1 w9 E' Q% J
    139.   {
      \" J' G% [  d9 ]8 q6 i$ O
    140.     switch (c) * ]. i6 f8 F$ [' F' P
    141.     {& A  {5 H$ X' p6 R; \7 Q  o
    142.       case 'p':
      # u) G; e) B2 w* D+ D
    143.               m_p = (float) atof(optarg);
      1 c! g6 I# |/ N' `6 b9 U& A: V) |
    144.       case 'x':% ]& z/ f/ m0 w: Y4 t
    145.         m_xi = optarg;
      , I' W8 k' s8 p0 k& U
    146.         break;4 L% S6 _. H5 R& z
    147.       case 'y':
      4 y2 j7 r' w6 }$ K  y
    148.         m_yi = optarg;
      # n9 h7 L5 T( G( f+ _. D: {0 |
    149.         break;
      3 U' C# s5 R* S$ h5 {% A\" }
    150.     }
      ) `! J; r4 E9 N! ^
    151.   }' ~; T, o- x+ l8 j/ d. m6 P

    152. 1 Q4 B5 U, ?  u7 X( W
    153.   res = m_lagrange_interpolating();
      # W# S, p0 r# B+ P
    154.   printf("Lagrange interpolating with %.4f result is %.7f\n", m_p, res);
      3 U! Z* W& [$ c9 Y
    155.   
      * O7 ?! D* z7 I- v  f& C6 j
    156.   return 0;  l8 Y7 ]1 [: }; }1 a
    157. }% L/ j) W4 Y  |3 C  k
    复制代码
    回复

    使用道具 举报

    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-5-27 04:56 , Processed in 0.659092 second(s), 105 queries .

    回顶部