QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 22398|回复: 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自定义插值函数插值计算数值计算 e8 w. B& E6 o4 v版本号: 04y09m28; a# Y/ _. V, {' X3 O( r 分类: 工程设计应用4 V2 v f( ]9 ]6 ~0 V$ A 性质: 免费软件: Y9 Y5 z9 I4 M/ X( G 使用说明:

    / l/ l' B% q2 E8 v( ?, C+ T: b

    人们对EXCEL普遍熟悉的功能是表图的处理,不太知道其在工程计算(如锅炉设计计算)中的应用。复杂的工程计算常常用专业编程语言(Fortran、C、Pascal 等)来编制计算程序解决,用专业编程语言编制工程计算程序往往有下面二个缺点:6 z7 J7 o/ k5 O4 t : G1 \& l' w2 a; [0 K7 P& `' u/ G 1) 编程语言专业性强,一般工程技术人员难以掌握,由这些专业编程语言编制的计算应用程序的维护、修改、升级都比较困难。

    / U4 `+ r7 P _, H/ D" m4 f. G

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

    6 |( |/ G% \2 z1 h2 ~

    EXCEL每一个单元格就是一个电子表格,很容易进行一般的加、减、乘、除、乘方、开方,而三角函数、指数函数在EXCEL中可以直接引用内部函数。用EXCEL编制一般的工程计算程序还需解决的有以下两个问题:(1)循环计算,(2)表、单曲线、曲线组的查找(如:锅炉设计计算中的焓值)。对于问题(1)循环计算,EXCEL在工具菜单中提供了两个命令:单变量求解和规划求解,利用这两条命令很容易解决问题(1)。对于问题(2)表、曲线的查找,EXCEL没有提供现成的函数,但也可用VLOOKUP、MATCH、IF、OFFSET等函数的组合勉强近视解决,本文重点介绍表、曲线的查找自定义函数的定义及使用。 ! C* k0 k3 V, K- | % d% N' J0 U) [ 为了更好地解决曲线查找的问题,应用C++程序设计语言,用拉格朗日插值计算法在EXCEL中建立了自定义函数,单曲线插值函数TWLQ(变量,"带路径的保存数据的文件名"),曲线组插值函数THLQ(变量1,变量2,"带路径的保存数据的文件名")。单曲线插值函数、曲线组插值函数的"带路径的保存数据的文件"包含着特定对映表、曲线的信息和计算精度的要求 (文件为Notepad编辑的txt文件) 。 , d% u# j6 x9 C9 O单曲线lagrange插值函数:double twlq(double x,char* filename);5 Z7 |# i3 {1 T( \% O double twlx(double q,char* filename); * [/ U) i; s( e1 U. B; G1 ]曲线组lagrange插值函数: * h6 D: A! S" t! {$ v double thlq(double x,double y,char* filename);% B% H) A7 I% h1 ]* K6 @ double thlx(double y,double q,char* filename); - D4 e2 S3 ?" ~& N! o( m$ N double thly(double x,double q,char* filename);。

    # _8 f5 o! r. N% Y! u$ o0 W( H \

    例:单曲线插值函数 "带路径的保存数据的文件"结构如下:8 j% E; K, X X @ Description @ 4 n0 @4 v7 _2 d( F, D v n, nsel;/ Y: P0 N) E! J) H% C( {7 B) x x[0],x[1], x[2],··, x[n-2],x[n-1];2 k) g2 {# H6 O2 f3 m) w q[0],q[1], q[2],··, q[n-2],q[n-1];' t. o) I1 }* i$ J, m MinX=0.7,MaxX=0.9,OverRangeAlm=1,X=电压,XUnit=mv,Q=电流,QUnit=mA

    ' g" c0 y% n) }0 D$ u3 i

    注解: 4 ]! P$ z4 v* @ Description:用户自定义描述字符串(Description中不可有@符号);/ Q3 R8 Y$ x# [ n: 总插值点个数; + f& k( `! a S' W' U nsel:实际参与插值计算的插值点个数; 6 [. \- ?$ j- _ MinX=0.7,MaxX=0.9 取值范围; : W% B. R4 P* z0 w0 S& W OverRangeAlm=1 越限报警 1:报, 0:不报; % f; o/ A% F* F/ ^* M X=电压,XUnit=mv,变量名称,单位。

    , M* H' {0 Y3 W9 t

    ****结论: 8 Y! K6 N% M M/ L, w7 [ l)图形化界面的插值函数数据文件生成器 LCZMaker 方便快捷生成单曲线或曲线组插值函数数据文件。 2 }- F: o& G+ [/ [ 2)应用EXCEL自定义插值函数,在EXCEL中进行工程计算编程极为便利,比专业编程语言程序设计更易学易用、直观明了,用EXCEL编制的工程计算应用程序更易维护、修改、升级。* |% ?/ ^' o& U6 K2 A 3) EXCEL本身长于表格制作,在EXCEL中进行工程计算编程人机界面友好,输入前、输出后处理方便简单。1 G! m; ~4 U% m( c 4)在某大型锅炉厂电站锅炉性能设计计算中已显神力。

    0 R$ x$ f2 t7 U$ j

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

    5 G: c9 W Y) d5 c

    [分享]插值软件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. 7 |/ ~0 q1 F8 I! z1 O9 d7 B4 P
    2. /* TODO: Lagrange interpolating - @/ n% x' R2 H/ F# T5 D' O2 N
    3. *# ^3 K\" j\" N- |5 e6 {
    4. * For example, if lg2.71 = 0.4330, lg2.72 = 0.4346, then lg2.718 = ?
      9 C( o5 V1 U9 T\" f$ b+ Z- Q% X9 y2 ]
    5. * In this situation, it could be solved via lagrange interpolating% y# x& d+ m. u* e* C8 f
    6. *$ v  Z5 W% X3 \# s8 f1 p. k% K$ ^
    7. * */: X% o- J# D. e0 a' I! Q* y
    8. & u5 x( {& \3 x
    9. #include <stdio.h>
      4 L- n9 r/ }& `  [3 e
    10. #include <stdlib.h>3 j2 a! q4 x% ~- H3 F, u% b
    11. #include <string.h>
      $ n7 ^  @- x& d2 h/ H
    12. % [5 c, T\" F% }
    13. #define DEBUG 0% z  ?6 |4 m& G

    14. ! R  |\" Q% a2 |
    15. static float m_p = 0.5635;
      / s( {) L* b( p
    16. static char *m_xi = NULL;
      7 _! x1 l+ i6 I. j
    17. static char *m_yi = NULL;) g- u\" h, W5 o% F1 r# J
    18. static float m_arr[] = {};4 P9 b1 {' o; n\" H9 M4 s
    19. static unsigned int m_n = 0;& R& g5 G) t4 y3 Z7 X
    20. ) h( @0 J( v. Z$ p, d0 N2 c
    21. static void m_lagrange_interpolating_usage();) N\" x5 l) L! I. Q& K. A! X
    22. static int m_lagrange_interpolating_set_n_arr();
      7 R* V# x$ C' h0 t2 k
    23. static float m_lagrange_interpolating();
      ) R  ?2 ]9 v9 N$ d
    24. 6 `; A( M; I4 F/ ~0 f9 A/ _2 O
    25. static void : Y$ d3 P- }- s\" {7 v+ f6 q' g
    26. m_lagrange_interpolating_usage()
      2 ^; F& T2 F7 K+ A
    27. {
      . A; X3 ]3 X5 I. l- v. Y
    28.   printf("Lagrange Interpolating Usage:\n");\" p% v\" y3 X1 i) M
    29.   printf("bin/li -p ** -x ** -y **\n");, f. g0 w- O& r\" ^
    30.   printf("-p 0.5635\n");
      ' C4 {7 B* j' O4 D/ i9 k
    31.   printf("-x 0.56160,0.56280,0.56401,0.56521\n");: E: {1 u\" i2 m2 E0 ]
    32.   printf("-y 0.82741,0.82659,0.82577,0.82495\n");( Y2 K4 `$ P: L, V$ Q9 r  l1 g
    33. }7 J6 N% d' [, V

    34. 7 u; C- |9 z. \  s% ~
    35. static int
      / |% w5 b0 r( p: U. Z4 g9 x
    36. m_lagrange_interpolating_set_n_arr() 5 Z6 j) G) R9 _7 d, b
    37. {
      0 e4 S. l( p( ]1 _! f
    38.   int xi_n = 0;) |- B4 `6 r3 J# q$ g! I/ u
    39.   int yi_n = 0;% V/ r! H9 _' }. W7 }
    40.   int n = 0;% R4 c1 w& V3 B7 O! N
    41.   char *token = NULL;; `! _, T; s( U' d\" u) [3 d* q, `. W
    42.   const char *delim = ",";
      + |% f& y0 D! b$ i8 K8 Q5 h

    43. # z+ P) ]* o& Q2 l) C0 @
    44.   token = strtok(m_xi, delim);
      ) r- }* {! @+ d\" B3 I! S2 s
    45.   while (token)1 t4 @! ^9 I0 D0 e  e1 B1 E
    46.   {
      + n, y) Y) |4 U5 Z& ~
    47.     xi_n++;
      ; t  W, s. E; o- a
    48.     n++;
      0 }  r: I) k* k/ n9 G6 f
    49.     m_arr[n] = (float) atof(token);
      9 \2 j  W& l7 g  q9 Y
    50.     token = strtok(NULL, delim);: ]+ N9 _: l1 p6 s! k
    51.   }
      / u) n  o& H- n
    52. ( ?) U  U' n* J& j, c
    53.   token = strtok(m_yi, delim);1 Y  N2 c* M% H% B: Q
    54.   while (token)* J\" x9 B# I# d
    55.   {- d$ j( N7 o' U4 g\" t) w7 R
    56.     yi_n++;
      ' O) a. n# H; m! G* B3 l
    57.     n++;3 Q' \0 X9 }5 i6 z
    58.     m_arr[n] = (float) atof(token);
      - x' c+ C/ `/ _+ s
    59.     token = strtok(NULL, delim);
      $ Q4 G. O8 D, n
    60.   }4 J% V5 j! l4 e4 T6 G2 ~# l( q
    61.   
      - o8 P9 o9 t4 |5 @\" I) @2 \
    62.   if (xi_n != yi_n) / |* c1 R' n1 v# x. l
    63.   {4 z6 E! \, A5 V! d% G
    64.     return 0;7 O9 u4 M( R6 C\" e0 h
    65.   }
      ; j5 w3 G6 N, I# M1 s

    66. 8 a( h. b1 n5 x
    67.   m_n = xi_n = yi_n;
      - t* p8 c; h) `\" r; l9 O  F% G
    68. \" ?5 L( ~5 [8 V\" c8 N
    69.   return 1;6 y) g  s8 V- L1 q5 x0 d8 i& u
    70. }6 I9 V( f  }( ?

    71. % x( X( T3 w, G- s% _# ?
    72. static float \" U0 s1 O, i: l% b5 A8 D7 O
    73. m_lagrange_interpolating() 0 m/ B  V1 T) a1 p1 l3 d
    74. {\" z( |% c4 @' R& f8 h
    75.   float l = 0.00000;
      & y) C) z' n8 I6 ~
    76.   float li;) m) T0 p$ o0 x2 c4 R& w; x
    77.   int i;
      6 C- S2 Y; r/ |! u6 U$ M0 J2 }
    78.   int j;6 E6 K) t0 A- ]; C1 @9 I
    79. * _8 ^' T7 E  g; W' K% _* g) N( x
    80. #if DEBUG9 T1 f8 h2 N6 i- @! `2 x8 ?
    81.   printf("DEBUG at %d: enable debug mode\n", __LINE__);. ~\" h9 d2 z6 Z\" b5 _& C
    82.   unsigned int m_n = 3;* P3 L4 {( P% S8 V) v) x7 J* p9 \
    83.   float m_p = 0.5635;
      + H& T+ W( O9 `
    84.   float m_x[] = {0.56160, 0.56280, 0.56401, 0.56521};
      8 n( D2 k8 o$ [3 v* V
    85.   float m_y[] = {0.82741, 0.82659, 0.82577, 0.82495};, [+ G5 e$ [, e3 S9 _
    86.   
      1 l0 {) |% Z3 U- ^
    87.   for (i = 0; i < m_n; i++)
      * ]  Z/ L% N- _4 b
    88.   {
      + D( E* Y( \7 g
    89.     li = 1.0000000;9 b5 d2 A2 F  G' l$ H1 i
    90.     for (j = 0; j < m_n; j++)9 c8 |& _; N9 ]& j
    91.     {' n' I! F- H8 \6 y( n; s0 s
    92.       if (j != i)
      5 N7 V6 R+ x$ T$ R& O1 O
    93.       {3 u6 d/ a& q5 E! k
    94.         li = li * (m_p - m_x[j]) / (m_x[i] - m_x[j]);
      9 {! L: l& |& ?2 {3 b) l. U- o
    95.       }
      # d, f2 J& x7 D* W
    96.     }
      $ I! I! d1 O; m: o& u; o3 T8 N9 K
    97.     l = l + li * m_y[i];2 V! ~' D* E0 G; m/ \1 Q
    98.   }
      8 X2 b, s* I4 ^! l\" R0 _* m+ J
    99. #else8 ~: F& p, W2 H) t
    100.   if (!m_lagrange_interpolating_set_n_arr()) + k5 B! A8 Q! X4 D9 i2 c9 l
    101.   {1 F/ q) _\" t5 Y! X: [& c
    102.     printf("Error: xi and yi counter is diff\n");
      4 G' n3 o- P. e6 M
    103.     ! F9 }; K) S' X5 Y' F$ x
    104.     return 0;4 d2 O5 ^9 Q7 Z) b: u  i
    105.   }
      6 m9 t% r4 z\" F\" O
    106. ( s5 O0 ?\" s5 Z: u
    107.   for (i = 0; i < m_n; i++)
      ( J  j2 N, H5 H
    108.   {# B3 Z* g) a9 f% J( a' o0 a0 m
    109.     li = 1.0000000;5 ^( b! c/ ^; L% i+ w- X
    110.     for (j = 0; j < m_n; j++)
      $ f\" k3 ~; R2 ~8 v* |
    111.     {8 Q6 k2 A9 Q7 E, h8 }
    112.       if (j != i) 6 }+ w' E9 ]( m0 t# O
    113.       {( t* U8 c\" I: r' e& A% U- x4 A
    114.         li = li * (m_p - m_arr[j + 1]) / (m_arr[i + 1] - m_arr[j + 1]);! d  y: D3 ^2 M% ~: I  j
    115.       }/ D! t+ w. K5 |9 [; M# y, ?3 g* k0 b/ n
    116.     }
      : S- N/ Z% f  R. o\" s$ V
    117.     l = l + li * m_arr[i + m_n + 1];
      . \1 y  J' H+ w: _, J$ w
    118.   }* h+ }) ?1 w4 c
    119. #endif
      ) b7 L; p. B( j1 S1 z

    120. & {8 F, W) Q: R
    121.   return l;0 q2 w4 v) j+ b% @( G
    122. }: T\" t\" o, ^: x1 l4 H! k' e
    123. \" E) {0 w1 K( w. |$ f2 O+ N
    124. int * G' N0 c. W! `: V. u' f
    125. main(int argc, char **argv) / x: R. r5 I8 S% X( K( {( Y
    126. {
      , J, _! Y7 L* T( K3 _
    127.   int c;# I. t% }! T$ q& t+ G: o% m
    128.   extern char *optarg;
      4 H9 n0 {! j' K) D3 Z: L
    129.   float res;
      + T/ d- ?4 H1 L, }% q/ D( ?
    130. : s\" v! S: q( a* g
    131.   if (argc < 2)
      ; X, W% I! h  o4 h# V) h, |+ s
    132.   {
      \" {% {5 F! t$ O$ U* a' w
    133.     m_lagrange_interpolating_usage();- w) q: C! E) k. b6 G+ V
    134.    
      \" `\" g9 h, L$ M5 ?( T: m* p
    135.     return -1;4 }2 h: U9 M2 Z/ g( z\" `: a6 ~
    136.   }
      6 d0 t4 X0 n9 C9 {) D2 A; Z. S\" H
    137. 0 S! ?; s3 m. _( _, {' J. V
    138.   while ((c = getopt(argc, argv, "p:x:y:")) != -1)
      , X8 Y\" y/ R. ]
    139.   {
      ' K1 A& V9 k# A
    140.     switch (c) ) X5 a2 S& `# [% @
    141.     {! ?4 L, W4 L4 j9 d3 I6 {+ r
    142.       case 'p':# ^* N  r9 R) E: `7 N0 W
    143.               m_p = (float) atof(optarg);2 p1 ~7 h\" B: r0 @0 Q; v0 X
    144.       case 'x':- N+ V+ L- e7 }! h' h% O& I- Q
    145.         m_xi = optarg;( N' s& Q! ^0 c/ L1 ?7 C
    146.         break;4 {$ |& F( X' C- @
    147.       case 'y':
      0 Q) L0 d  o: r6 x. U& i) z- k
    148.         m_yi = optarg;4 |0 `: P* n, g
    149.         break;; b* G2 i+ M% w' G% U
    150.     }
      $ i* q9 M% o/ }3 C! l
    151.   }\" u- }. i\" y* N. q9 U1 z

    152. ) ]  K+ L) E% {4 M
    153.   res = m_lagrange_interpolating();
      ) n5 `5 h) z- C! k+ ^) X
    154.   printf("Lagrange interpolating with %.4f result is %.7f\n", m_p, res);' j- Q# a* U! W4 ?
    155.   * T' i2 n# J( {; w
    156.   return 0;
      6 d, i$ {1 X* Y4 {! D
    157. }! S! \, n( ^- ^  m4 `2 ^
    复制代码
    回复

    使用道具 举报

    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-7-26 22:06 , Processed in 1.526796 second(s), 104 queries .

    回顶部