QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 21858|回复: 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 T, p8 t5 K. W- Y- _版本号: 04y09m28 ) L G! T3 X1 p+ u' Y- O5 q, w3 k/ T分类: 工程设计应用 / J4 P' o" g5 }9 ]! Q性质: 免费软件 # I/ O% @; f. P2 k5 W3 Y使用说明:

    + K2 M8 h+ y( }1 k$ k1 Z

    人们对EXCEL普遍熟悉的功能是表图的处理,不太知道其在工程计算(如锅炉设计计算)中的应用。复杂的工程计算常常用专业编程语言(Fortran、C、Pascal 等)来编制计算程序解决,用专业编程语言编制工程计算程序往往有下面二个缺点: 1 z$ b6 Z9 L6 s8 z4 }2 Z 4 B, Q" {: c8 ]" S 1) 编程语言专业性强,一般工程技术人员难以掌握,由这些专业编程语言编制的计算应用程序的维护、修改、升级都比较困难。

    ( [$ e- z# c! H+ W: `& L

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

    7 u3 B- z) {1 U8 O3 b9 S

    EXCEL每一个单元格就是一个电子表格,很容易进行一般的加、减、乘、除、乘方、开方,而三角函数、指数函数在EXCEL中可以直接引用内部函数。用EXCEL编制一般的工程计算程序还需解决的有以下两个问题:(1)循环计算,(2)表、单曲线、曲线组的查找(如:锅炉设计计算中的焓值)。对于问题(1)循环计算,EXCEL在工具菜单中提供了两个命令:单变量求解和规划求解,利用这两条命令很容易解决问题(1)。对于问题(2)表、曲线的查找,EXCEL没有提供现成的函数,但也可用VLOOKUP、MATCH、IF、OFFSET等函数的组合勉强近视解决,本文重点介绍表、曲线的查找自定义函数的定义及使用。& l8 {6 c3 k; g9 u. ^) X 4 T( a' K/ r( [$ d+ d' y2 D a 为了更好地解决曲线查找的问题,应用C++程序设计语言,用拉格朗日插值计算法在EXCEL中建立了自定义函数,单曲线插值函数TWLQ(变量,"带路径的保存数据的文件名"),曲线组插值函数THLQ(变量1,变量2,"带路径的保存数据的文件名")。单曲线插值函数、曲线组插值函数的"带路径的保存数据的文件"包含着特定对映表、曲线的信息和计算精度的要求 (文件为Notepad编辑的txt文件) 。( a& J) R* S0 s" V 单曲线lagrange插值函数:double twlq(double x,char* filename); " k0 I) }" ]8 p9 o% i* `1 { double twlx(double q,char* filename);2 Y" }/ Z9 t# d9 p, w9 l 曲线组lagrange插值函数: 8 R, q( Q F- p: T$ G- B# B double thlq(double x,double y,char* filename);: f/ J* D! \4 f: U( O( j double thlx(double y,double q,char* filename);3 H& h0 I8 K$ K$ F4 [+ @ q double thly(double x,double q,char* filename);。

    3 K6 ~7 h7 J2 i& i _

    例:单曲线插值函数 "带路径的保存数据的文件"结构如下:) p' c; [& A6 u8 X) |- c5 _! R9 S5 v @ Description @0 F- w' q. C4 x/ ]2 Y& }* K7 D: } n, nsel;- O7 G4 A1 q" T) j$ H* k# A x[0],x[1], x[2],··, x[n-2],x[n-1];& s/ o2 z; x. C" u+ w q[0],q[1], q[2],··, q[n-2],q[n-1]; `& A& T0 f" x5 }4 q# ~/ h/ ? MinX=0.7,MaxX=0.9,OverRangeAlm=1,X=电压,XUnit=mv,Q=电流,QUnit=mA

    8 y* V- j3 W# L0 Q1 q

    注解:* Q( T9 B3 A5 J+ \ Description:用户自定义描述字符串(Description中不可有@符号); 0 v& J- Y+ N f; _ n: 总插值点个数;% m _. m% Q& B: V$ M: c nsel:实际参与插值计算的插值点个数; ) s' S# p( v0 V2 s. H* w MinX=0.7,MaxX=0.9 取值范围; 8 t& ]- [3 x# \/ N OverRangeAlm=1 越限报警 1:报, 0:不报; % i* d' o7 m! M8 x7 Q2 S X=电压,XUnit=mv,变量名称,单位。

    ( m. W. N3 b, C/ M- I4 l5 f a

    ****结论: ; s; C0 g$ m. i6 u l)图形化界面的插值函数数据文件生成器 LCZMaker 方便快捷生成单曲线或曲线组插值函数数据文件。9 q6 @/ L1 r$ _0 J' I" W 2)应用EXCEL自定义插值函数,在EXCEL中进行工程计算编程极为便利,比专业编程语言程序设计更易学易用、直观明了,用EXCEL编制的工程计算应用程序更易维护、修改、升级。" L! \2 s. i F( ], u8 I# Y% ~ 3) EXCEL本身长于表格制作,在EXCEL中进行工程计算编程人机界面友好,输入前、输出后处理方便简单。' S9 K- ?& e, _8 j4 p8 Y! e9 `5 G 4)在某大型锅炉厂电站锅炉性能设计计算中已显神力。

    6 J$ M/ r9 V8 d/ j; j

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

    * A6 C! x% s' {$ U8 i

    [分享]插值软件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. % ^2 a3 j2 r) V8 W- f9 ?
    2. /* TODO: Lagrange interpolating $ D- P+ v\" O7 ^: j0 z
    3. *
      5 g  K0 M5 ]! ]+ N
    4. * For example, if lg2.71 = 0.4330, lg2.72 = 0.4346, then lg2.718 = ?6 V; N7 K0 v- M* `
    5. * In this situation, it could be solved via lagrange interpolating\" r+ v( k5 m5 u3 n) A/ C+ [, T
    6. *' Z) ~0 j2 w; T: K- f
    7. * */0 U' R8 Q: q* c/ M+ x, H

    8. / y) l5 {\" q: S9 |2 y
    9. #include <stdio.h>' v1 C; W' d3 @9 |) T) B$ `
    10. #include <stdlib.h>
      9 N& _' s* W' b9 F
    11. #include <string.h>
      & K- i: e4 U) d8 o/ F
    12.   p1 y  j2 D( e( l4 |
    13. #define DEBUG 0
      ' H; M/ H/ o; r

    14. 0 b2 ?8 o  G  d4 ?
    15. static float m_p = 0.5635;
        t4 S- |, q1 O0 y2 _% m
    16. static char *m_xi = NULL;, \0 R& u\" I4 q7 h: P
    17. static char *m_yi = NULL;8 j$ E! `( ]1 o5 p! N\" I
    18. static float m_arr[] = {};
      9 x- l& u9 u. z
    19. static unsigned int m_n = 0;
      , F1 ~/ {: g4 ?/ Y6 y) b

    20. 1 i& g7 d2 P  B
    21. static void m_lagrange_interpolating_usage();( {5 R! g# @( }. h, J$ q% O\" F' H2 i
    22. static int m_lagrange_interpolating_set_n_arr();
      ! N/ L  L. w) v\" i6 r' P& v
    23. static float m_lagrange_interpolating();
      3 u: P2 `1 D6 h! j7 W' r: ~9 i5 }
    24. 0 J9 [- Y/ h7 r
    25. static void 0 Z* q( ?$ Q1 v8 n! Q( D
    26. m_lagrange_interpolating_usage() 1 q1 u' e( X; e% c2 s0 O  v4 f! M
    27. {
      & G) d  h5 ?# m9 ^6 Y1 {3 ~
    28.   printf("Lagrange Interpolating Usage:\n");
      3 d& ~# b* g; M4 A/ R7 ~! i
    29.   printf("bin/li -p ** -x ** -y **\n");
      & E4 B+ _\" l1 O8 ]\" m% p. A( r& v
    30.   printf("-p 0.5635\n");/ k% h0 m; |3 Y2 q+ K9 z0 m
    31.   printf("-x 0.56160,0.56280,0.56401,0.56521\n");
      ( [' E' N8 F- e
    32.   printf("-y 0.82741,0.82659,0.82577,0.82495\n");) _2 Y2 s4 j2 @- h8 m
    33. }\" O1 Z1 j# W0 Q9 a
    34. 9 j+ Y# w; ^- l/ g9 s
    35. static int - G( S; x+ X  O' O- r' T. S  A, \
    36. m_lagrange_interpolating_set_n_arr() - N7 r' x$ |- Q& T4 M7 {% w
    37. {
      + u( P' C) K\" W2 i
    38.   int xi_n = 0;! S( h4 P\" ?. }. B  t\" s
    39.   int yi_n = 0;
      : P7 s; c! a/ S\" w
    40.   int n = 0;- k2 ~6 U. K% w8 G; F1 {
    41.   char *token = NULL;. R$ q# Y( n9 W
    42.   const char *delim = ",";
      ; @1 h\" }9 t/ P  I( P' O: E
    43. & O8 R, N1 o, r: S
    44.   token = strtok(m_xi, delim);
      . e8 x* H6 s* j\" p, T5 M
    45.   while (token)
      9 U( {\" B; z! a& _: a7 a
    46.   {
      ( S) H) p2 X- d3 ~: R5 R& a
    47.     xi_n++;
      $ @7 g& z6 k7 X: P
    48.     n++;; v+ X1 ~  [1 p, Y  H. ?2 R
    49.     m_arr[n] = (float) atof(token);
      7 @* J5 P* O3 N4 ~7 A
    50.     token = strtok(NULL, delim);. R/ c5 j' K2 ?& U; x& p
    51.   }- _+ V& @4 x/ m  B) s; l

    52. . N\" W$ C4 h9 ~7 S
    53.   token = strtok(m_yi, delim);
      $ h0 {0 }/ r  t1 y  m3 b
    54.   while (token)
      # Y$ z. l' v/ d
    55.   {
      & ~' g9 E, u& a+ }0 c5 Q
    56.     yi_n++;' [# `, p$ r% O\" R2 z# C
    57.     n++;
      2 Z' Z- X5 K8 d\" d
    58.     m_arr[n] = (float) atof(token);
      ( M\" q$ m) z$ B1 P# D# |
    59.     token = strtok(NULL, delim);
      5 T# N/ X  l8 `. e5 O  v2 ^# t* i6 u
    60.   }
      + Q$ r% p: U- m/ w# ~: b
    61.   
      4 f  [6 v) O; V\" s
    62.   if (xi_n != yi_n)
      8 X  X) Z# ~4 E% ~# |2 g! b; w
    63.   {! s* b, [& J0 |7 `
    64.     return 0;
      ) E% B$ B6 _. f$ P0 E
    65.   }# I$ b# N9 j2 D2 }  h
    66. 3 n, Y6 N/ d$ r4 c4 U! r6 j
    67.   m_n = xi_n = yi_n;
      & j2 K% _2 y3 q& L: o+ J& U6 ?

    68. & M+ o) c\" s- T4 C$ W
    69.   return 1;- W$ b7 S% F$ r; f; c
    70. }' z' A' W- O, {3 o& E5 G4 ~) S3 ?5 D

    71. - J: H3 J3 |' l8 H8 o% Z' i8 G
    72. static float + N5 B8 F* O- K; v0 z5 s5 c& a
    73. m_lagrange_interpolating() 5 C  C' N7 P2 O0 W( v8 Z0 B. k
    74. {
      % ~# m( ?; g, S; ~# n2 L0 F
    75.   float l = 0.00000;4 \1 A+ C8 \& d# y
    76.   float li;
      - n: ~4 z2 A\" P0 @8 S
    77.   int i;
      + Z8 X* d, K. s. j6 ?
    78.   int j;
      % j- ?5 \8 [4 z\" i
    79. ( |& f; i& h/ \+ m- C
    80. #if DEBUG
      5 v0 M. k) _+ h8 E\" M9 k4 @* g, w5 w
    81.   printf("DEBUG at %d: enable debug mode\n", __LINE__);
      & O& o/ d  q: Z( b9 ^7 `
    82.   unsigned int m_n = 3;
      4 x* R3 Z. ~8 U: `# n\" c1 U
    83.   float m_p = 0.5635;
      0 G+ ?+ w, i7 |' Y$ f, `
    84.   float m_x[] = {0.56160, 0.56280, 0.56401, 0.56521};6 n' q, O; A$ p9 f2 ~/ ?8 Z
    85.   float m_y[] = {0.82741, 0.82659, 0.82577, 0.82495};
      * k0 ~* R4 S* h$ h2 ?
    86.   4 d/ ^0 s1 G$ d+ H- M: H0 b7 ]
    87.   for (i = 0; i < m_n; i++)% S4 E3 J$ b( ]
    88.   {9 ]: w+ L2 d7 i: O
    89.     li = 1.0000000;( F! ^7 s  k5 c4 N3 b. _8 k* M
    90.     for (j = 0; j < m_n; j++)
      # x8 ]+ C/ l2 y) X
    91.     {! }  e* ]9 l, R- l5 {# J3 i
    92.       if (j != i)
      - d3 j$ N5 T6 T$ K) C' f2 `+ C9 @
    93.       {. e1 ]' {7 K9 `# b, L0 k
    94.         li = li * (m_p - m_x[j]) / (m_x[i] - m_x[j]);% P0 h6 }3 m+ c; e
    95.       }3 T0 n5 I5 T: T
    96.     }
      ' K! ?- s6 I  z\" K! J; b5 L/ }
    97.     l = l + li * m_y[i];1 B, u4 N8 @. Q' P4 J- F/ r
    98.   }# n' T* _% Z  R* k: W, X
    99. #else
      : L; B0 j7 h( l\" p9 w( W
    100.   if (!m_lagrange_interpolating_set_n_arr()) . c. H& h$ Q$ H6 G
    101.   {
      7 H  \/ L7 \; J
    102.     printf("Error: xi and yi counter is diff\n");1 ?; j. J8 P\" |0 @; I  C2 _
    103.     ! w+ n1 [$ r9 L1 P5 C1 s1 W
    104.     return 0;9 c/ W) H/ `6 o( Z) k1 V0 v
    105.   }
      ' N) |+ y  H1 t* j3 J. w( ?) B
    106. # C8 h; y/ K2 s* [
    107.   for (i = 0; i < m_n; i++)
      ! A. m# X) j, Z+ u& B) \8 ~
    108.   {
      ' _4 N! f- P' l8 X( t! T
    109.     li = 1.0000000;
      , T0 b; p* u) b
    110.     for (j = 0; j < m_n; j++)
      2 y+ A# }1 V% O2 c3 t9 t
    111.     {$ p  _: _) A, X8 T0 L. K5 j1 F3 j
    112.       if (j != i) 6 ~, M+ @# b6 M
    113.       {3 V8 `0 Q; T( K
    114.         li = li * (m_p - m_arr[j + 1]) / (m_arr[i + 1] - m_arr[j + 1]);
      3 A0 {% D0 _0 p$ @. Q
    115.       }
      ( v, d0 T7 J: W, n7 a9 ?
    116.     }# G. I$ f1 T% i& N
    117.     l = l + li * m_arr[i + m_n + 1];& V, E. k6 G% n
    118.   }
      ; C/ N0 v( o/ t6 t! a
    119. #endif& T7 x\" f' I. M8 j' C( U# W) E

    120. 4 U2 C( g* Y0 Y1 v$ Q
    121.   return l;5 T3 c: v+ {$ S) @
    122. }
      : J6 T) v, G- }\" _0 ?

    123. 6 p6 O1 X+ c- C, ]4 a/ V
    124. int 2 N. p- C' ]7 q. f\" r
    125. main(int argc, char **argv) . H1 y7 _. \! n- @, M# Z2 W
    126. {+ E' ]7 }! i6 |# s2 N5 y
    127.   int c;
      , f6 L& Y! z! F
    128.   extern char *optarg;+ ^4 P, o) c: W7 x9 {' S& h+ J, j
    129.   float res;
      + S8 e/ \) [- ?+ y0 W8 q# o
    130. 7 p\" a3 M; C3 T% H2 t% H6 \5 D
    131.   if (argc < 2)
      9 U4 w0 g\" [; j
    132.   {3 M1 R\" X/ ], _
    133.     m_lagrange_interpolating_usage();
      ' w/ A$ v% |) E) I  o
    134.     0 M\" y! L  ?* ^+ a$ B' v
    135.     return -1;
      + V+ i1 L6 k* q% k
    136.   }/ D) R0 x  L5 e  h3 H6 J
    137. \" ?1 N4 I4 i1 q5 T* F) Z
    138.   while ((c = getopt(argc, argv, "p:x:y:")) != -1)
      + ?5 q! @& N, h
    139.   {; h5 Q3 ]- t0 `  A! m
    140.     switch (c)
      5 h9 v- b# m% j, ?+ @; Q5 v$ G) {
    141.     {
      / O) j\" n+ Y0 R+ \2 d1 D
    142.       case 'p':
      & t# x7 p6 Q1 p7 [, i6 s
    143.               m_p = (float) atof(optarg);8 j8 ?  k# h4 X$ g
    144.       case 'x':( d7 h! \1 X1 h
    145.         m_xi = optarg;$ Q: v* |9 e4 S5 i0 W6 F
    146.         break;
      7 x2 |. [) e# F7 D
    147.       case 'y':. ?. X. ]( f( ^& `6 j# r
    148.         m_yi = optarg;
      , S3 _: o$ H' p7 s3 @: x( d
    149.         break;
      - h1 E$ C3 B+ w- m* z2 f- @' S8 w
    150.     }, C. E7 E: O/ U% C4 b
    151.   }
      7 _3 B( E- w\" o
    152. 2 m+ h$ A' u& X$ }. j
    153.   res = m_lagrange_interpolating();
      2 o7 Q  p: _/ D: o8 u  J6 U# M5 O
    154.   printf("Lagrange interpolating with %.4f result is %.7f\n", m_p, res);
      + k* Z6 _8 D8 g# Z4 |: {2 C\" ?2 G
    155.   
      # b' D3 j: ?* a& I# F' l
    156.   return 0;
      7 d' l\" ^& o\" t: l3 f
    157. }
      * y  h; t8 [: G6 A9 [: |& Y. U\" O
    复制代码
    回复

    使用道具 举报

    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-15 14:17 , Processed in 3.614444 second(s), 106 queries .

    回顶部