QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 22400|回复: 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自定义插值函数插值计算数值计算% p; W/ Z6 _* C$ Y4 O( ? C; C 版本号: 04y09m281 r" z C3 T8 L 分类: 工程设计应用 Y0 b1 ?2 ]; d6 m1 ? 性质: 免费软件 . D7 M% r- c, }使用说明:

    2 @/ C! F! p; s) |3 O) r

    人们对EXCEL普遍熟悉的功能是表图的处理,不太知道其在工程计算(如锅炉设计计算)中的应用。复杂的工程计算常常用专业编程语言(Fortran、C、Pascal 等)来编制计算程序解决,用专业编程语言编制工程计算程序往往有下面二个缺点: 4 a: O% d; k8 X+ @' ^ , e5 z& G% D: P6 R( u/ \: o5 C; @ 1) 编程语言专业性强,一般工程技术人员难以掌握,由这些专业编程语言编制的计算应用程序的维护、修改、升级都比较困难。

    : z1 ]1 {! \& k* l

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

    % G; {+ `" @* n; k; H

    EXCEL每一个单元格就是一个电子表格,很容易进行一般的加、减、乘、除、乘方、开方,而三角函数、指数函数在EXCEL中可以直接引用内部函数。用EXCEL编制一般的工程计算程序还需解决的有以下两个问题:(1)循环计算,(2)表、单曲线、曲线组的查找(如:锅炉设计计算中的焓值)。对于问题(1)循环计算,EXCEL在工具菜单中提供了两个命令:单变量求解和规划求解,利用这两条命令很容易解决问题(1)。对于问题(2)表、曲线的查找,EXCEL没有提供现成的函数,但也可用VLOOKUP、MATCH、IF、OFFSET等函数的组合勉强近视解决,本文重点介绍表、曲线的查找自定义函数的定义及使用。4 }, q- F k* `/ V1 @+ ^ ! I$ _, O6 F* M. ] 为了更好地解决曲线查找的问题,应用C++程序设计语言,用拉格朗日插值计算法在EXCEL中建立了自定义函数,单曲线插值函数TWLQ(变量,"带路径的保存数据的文件名"),曲线组插值函数THLQ(变量1,变量2,"带路径的保存数据的文件名")。单曲线插值函数、曲线组插值函数的"带路径的保存数据的文件"包含着特定对映表、曲线的信息和计算精度的要求 (文件为Notepad编辑的txt文件) 。( T9 [& `% R2 f1 N- H4 N8 _ 单曲线lagrange插值函数:double twlq(double x,char* filename);* \/ ?' w( d* N2 y3 e$ Q double twlx(double q,char* filename); 4 y0 M: i( ~# d# I) ]& @$ v" b" W曲线组lagrange插值函数:- H1 {3 { h8 s T: q double thlq(double x,double y,char* filename);5 G: l9 \ q6 f1 l9 p% [+ O double thlx(double y,double q,char* filename);* J8 p; O% c- f) w- p: ~6 @ double thly(double x,double q,char* filename);。

    6 G7 x3 q, V) @( W7 R( S" L

    例:单曲线插值函数 "带路径的保存数据的文件"结构如下: % o7 V/ x) G/ T* t@ Description @ ' K3 ?% Q. Y% ^1 N S4 z( a1 s n, nsel; 2 L9 E; \8 e) h1 D2 o0 s$ ix[0],x[1], x[2],··, x[n-2],x[n-1];6 R7 @0 m" J' O4 }2 ^2 X- k q[0],q[1], q[2],··, q[n-2],q[n-1];+ v ]' n" S" |* Z MinX=0.7,MaxX=0.9,OverRangeAlm=1,X=电压,XUnit=mv,Q=电流,QUnit=mA

    * y4 {7 R8 W/ z, Q( P& j7 U

    注解:) e2 I: \+ _2 s: }# Y Description:用户自定义描述字符串(Description中不可有@符号); H6 W0 G6 N; O- g, ] n: 总插值点个数;7 _" A* p& n+ Q1 A7 C nsel:实际参与插值计算的插值点个数; 0 r- S! ~: V- ` MinX=0.7,MaxX=0.9 取值范围;% M- l0 C" Q ?4 \ OverRangeAlm=1 越限报警 1:报, 0:不报; 2 ~4 U! Q+ g* L- r$ c* m X=电压,XUnit=mv,变量名称,单位。

    2 A4 I% `. u# |& i- [+ w

    ****结论:9 \& E6 B7 p" b- S8 } l)图形化界面的插值函数数据文件生成器 LCZMaker 方便快捷生成单曲线或曲线组插值函数数据文件。3 s$ C5 k: ~* ] 2)应用EXCEL自定义插值函数,在EXCEL中进行工程计算编程极为便利,比专业编程语言程序设计更易学易用、直观明了,用EXCEL编制的工程计算应用程序更易维护、修改、升级。( _" J) `3 B9 |" Y- q! {. K 3) EXCEL本身长于表格制作,在EXCEL中进行工程计算编程人机界面友好,输入前、输出后处理方便简单。 ) U( w' {3 q. a+ k 4)在某大型锅炉厂电站锅炉性能设计计算中已显神力。

    ( [2 o1 C( p. {

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

    # T# Z* D- p# T5 K; ^3 ?& b+ o! }

    [分享]插值软件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. : c6 V. `0 m\" y% \* p. |- j
    2. /* TODO: Lagrange interpolating 2 s: O9 {\" L) \7 Q$ d
    3. *
        R7 q: Z\" x' c5 F! ~. [( j
    4. * For example, if lg2.71 = 0.4330, lg2.72 = 0.4346, then lg2.718 = ?. |7 V4 P5 [* m; g5 ?! C
    5. * In this situation, it could be solved via lagrange interpolating* t; J! _- W; r
    6. *
      7 b\" p) ?9 q: ~8 H7 d0 N7 Z: h
    7. * */\" F$ R- s# K4 m! z\" u3 P- @$ i
    8. & }, _0 y( H% o4 N4 o9 Z
    9. #include <stdio.h>9 R+ r% @( b& i\" c
    10. #include <stdlib.h>! c4 ?& Q\" Q1 m8 R3 D# k' T) U6 ~
    11. #include <string.h>
      \" ~% F, K$ m! O& y/ h( L, A
    12. 9 o\" G2 ^6 ^9 i$ Z- ]; D4 D
    13. #define DEBUG 0' j6 v) u  M  [  d0 A
    14. \" K6 g4 z+ L0 l! ~) i
    15. static float m_p = 0.5635;2 f2 I\" k5 _6 o1 d6 }; X
    16. static char *m_xi = NULL;
      7 T) }9 `9 z& A8 M
    17. static char *m_yi = NULL;
      1 f% F& H\" k( f  M  ]3 n+ @; d
    18. static float m_arr[] = {};
      ) u3 r6 ~$ D5 g8 H3 R3 X  k- c
    19. static unsigned int m_n = 0;+ X; q, P' Y8 A- K
    20. 8 X. G1 g0 K# G$ u. }6 ~\" Q
    21. static void m_lagrange_interpolating_usage();. s9 r3 o! J2 e5 b! t
    22. static int m_lagrange_interpolating_set_n_arr();. u- p$ k5 `  \8 k
    23. static float m_lagrange_interpolating();
      % O& K% y; G9 Y' f& h

    24. ) \+ D8 N, {- D* T5 ^+ [9 K
    25. static void ; c5 k' U2 \- T1 Z5 {; x
    26. m_lagrange_interpolating_usage() 5 I+ B6 @$ G; j
    27. {; {6 b6 ^, S\" g5 ?8 j
    28.   printf("Lagrange Interpolating Usage:\n");% n- V0 v3 b\" p2 e( A9 C! @% Y& M
    29.   printf("bin/li -p ** -x ** -y **\n");
      1 p9 {2 K3 \4 B0 I% q
    30.   printf("-p 0.5635\n");
      4 b$ ?# `) U$ _2 L
    31.   printf("-x 0.56160,0.56280,0.56401,0.56521\n");
      5 f/ a  B$ a2 \6 N6 w
    32.   printf("-y 0.82741,0.82659,0.82577,0.82495\n");
      / A- ~$ J2 d2 Z( A
    33. }
      & M, x) s& B& z, q1 |

    34. \" R- m' v1 T: C. ?5 j) m
    35. static int
      2 @- g! f5 ~+ I4 J/ H( T
    36. m_lagrange_interpolating_set_n_arr()
        ^2 a, h  j/ i! @5 u
    37. {
      / Z  p; j2 Q. Z7 V' x* b
    38.   int xi_n = 0;
      / r. l. z. p3 M# q( U% a; s2 S; \\" v
    39.   int yi_n = 0;
      $ X+ r& S+ ~  [9 M1 H
    40.   int n = 0;\" m; R+ p1 C) s1 F# b6 }
    41.   char *token = NULL;
      7 D- q, B% s7 O/ R, J
    42.   const char *delim = ",";5 ?; |7 i, {# f$ F6 a
    43. ' s2 ?' a) Y+ a5 H0 l. N; }3 B
    44.   token = strtok(m_xi, delim);
      ! V9 z$ D* @& m9 N* [+ c. b
    45.   while (token)
      $ L. o2 Z3 _* b. k9 X0 W* A
    46.   {% q\" R6 N. j% `! b
    47.     xi_n++;8 Y+ D- V9 S/ k5 J7 G' q/ j
    48.     n++;
      ( B/ m- F/ r- {; U* m
    49.     m_arr[n] = (float) atof(token);
      * E5 L; [& m* Z$ ]& o
    50.     token = strtok(NULL, delim);
      , O  N$ |  |6 c  a9 t! B+ @& e
    51.   }
      ; u! Q9 t/ ]8 A# d5 n* X

    52. & M, X$ L9 M  x9 Q2 V& k
    53.   token = strtok(m_yi, delim);- u& B$ g# K4 ^1 Z3 Z
    54.   while (token)
      5 m: v; t! _! T  j) E8 _' E
    55.   {
      3 V- ]# I: Z. {$ U8 v( A
    56.     yi_n++;, _3 q* f: d$ R8 l7 I  u/ T
    57.     n++;: Q3 x6 c9 b; ^) U5 ?# E
    58.     m_arr[n] = (float) atof(token);* l% V1 D) ]6 A' {
    59.     token = strtok(NULL, delim);
      5 b4 J, p# S4 n: I( g+ [0 u( V, L( G+ _
    60.   }
      9 K5 t: J- ^3 o& V1 h
    61.   
      + v# t2 W! F2 j4 k! t
    62.   if (xi_n != yi_n) : y) r: c4 M3 Y, y  i9 v  o
    63.   {
      8 X: \+ E3 p2 j; W. V. V4 q
    64.     return 0;, f& ?8 \2 h: x3 K
    65.   }
      $ z) t+ I- k# M: F3 U

    66. 5 K' D4 f3 ~% k% @
    67.   m_n = xi_n = yi_n;# Z  |( e, {5 G: e: L
    68. , N2 N5 \: t& \# `- w& _) x1 b
    69.   return 1;\" L! D/ Z- l8 H\" `* r6 ]) W% l
    70. }
      % G% }: R# m2 Q3 [5 R
    71. # e& Q7 b7 J8 ^2 x* V
    72. static float
      & f. `% O1 h7 j! w; U' @$ u6 ^' f
    73. m_lagrange_interpolating()
      8 P% `# l; I6 r4 E! ?2 S! i
    74. {: p' m( I. _# f; Y\" j
    75.   float l = 0.00000;5 N% B\" {1 P- {+ @; f* _/ n
    76.   float li;: v( F( {1 r8 h* c
    77.   int i;- i$ k6 Z2 n( B7 t$ Q4 K. l) }
    78.   int j;
      : K+ V$ J$ Z2 a/ a1 ?+ j\" }2 X3 V
    79. / s\" ~6 f7 |6 n4 I\" q
    80. #if DEBUG
      4 e% t! U0 X\" \9 l& D* x
    81.   printf("DEBUG at %d: enable debug mode\n", __LINE__);
      7 @0 H) ^3 H* p  }
    82.   unsigned int m_n = 3;
      9 R& _! Q\" d1 x
    83.   float m_p = 0.5635;
      . l/ Q/ u9 z4 [; k5 q
    84.   float m_x[] = {0.56160, 0.56280, 0.56401, 0.56521};
      7 T: T8 h( M; i: m
    85.   float m_y[] = {0.82741, 0.82659, 0.82577, 0.82495};
      8 q; ]: ?0 b3 N+ c! z
    86.   ' d, e' |* c, P! d2 S
    87.   for (i = 0; i < m_n; i++)
      % \( A/ K4 g+ n, m3 ^! R
    88.   {
      , P\" L  |8 k* L* _9 t
    89.     li = 1.0000000;
      / N5 F9 J  q/ ^- q
    90.     for (j = 0; j < m_n; j++)\" b. B9 y\" f3 p( T. w- u
    91.     {
      + `+ l. f/ [, R- k2 x0 [0 \
    92.       if (j != i)
      & ?1 ?3 F) \$ s6 n
    93.       {
      2 v) g3 R/ J6 I; W' G
    94.         li = li * (m_p - m_x[j]) / (m_x[i] - m_x[j]);
      - g+ i2 v8 n* w& _% l1 p
    95.       }- z' I4 ^: K- {3 Z4 g' w+ S+ r) q4 }
    96.     }% D& q$ J9 Y. m/ U$ F
    97.     l = l + li * m_y[i];) J4 W- h+ k& g  C$ W1 r' u. x
    98.   }
      ) t! Y& s1 \* s  k; [1 ~- h
    99. #else- G5 ~! x! Y4 ?1 }8 z' T; S) E
    100.   if (!m_lagrange_interpolating_set_n_arr()) - @5 l2 j$ N. M3 {; E7 f
    101.   {+ w: @7 W& q. ]1 \8 }
    102.     printf("Error: xi and yi counter is diff\n");
      # ?/ c8 X3 p' l; a9 i
    103.     ' [3 \* D( O, Q( K& z
    104.     return 0;
      3 T\" x1 f- J% k$ k
    105.   }, C3 ]5 f( J7 i4 t$ z8 n/ V
    106. % D3 x6 k+ X& I
    107.   for (i = 0; i < m_n; i++)
      ' P  a8 X) W3 x$ ~
    108.   {\" B( W  ?9 |: |9 B
    109.     li = 1.0000000;
      ) T: k\" P2 I+ w+ W2 b1 V8 N9 E
    110.     for (j = 0; j < m_n; j++) - B$ o\" D/ ~2 U
    111.     {
      # W+ b$ X$ p% ?2 v. Y
    112.       if (j != i)
      4 {% H5 p% {7 G% K0 o
    113.       {' W' e7 O2 N  w- [' Q7 _* A8 g- f
    114.         li = li * (m_p - m_arr[j + 1]) / (m_arr[i + 1] - m_arr[j + 1]);- ?0 S& X' a\" c1 M, g
    115.       }8 n9 I9 d. _\" `$ x- S: W
    116.     }' b/ L8 N1 e% W7 A8 j2 L' |2 r6 l
    117.     l = l + li * m_arr[i + m_n + 1];
      3 u  o5 G/ s2 ^6 X# A, F
    118.   }' ^  c2 \8 ^) g+ Y
    119. #endif
      ; U\" J  Z, h' ?! k\" l1 U

    120. - W/ L* D* _- P9 H' J& c! z
    121.   return l;& I\" [; `) U( I% P. j* H9 F' P
    122. }3 H2 o3 r\" @+ G4 q) M' d7 E

    123. % a  R- A, p' J' O, ~5 W0 ^\" E, C
    124. int
      \" O. N+ Z8 D9 M7 ?
    125. main(int argc, char **argv)
      - a/ V3 x* o' E9 L. {( O
    126. {
      0 V; F6 ~- s$ ]1 U( E6 n5 u: ?; F  f
    127.   int c;( I4 N6 e' }' M3 ~( J5 m
    128.   extern char *optarg;0 @# n( D& \\" [2 ^3 o, _
    129.   float res;
        p+ _# ?. z. C. c; A) U3 s

    130. 7 ^# `! J9 _1 C: [9 B! A! Z9 {9 e- T
    131.   if (argc < 2)
      $ ~( B& U- U1 }5 s$ e) R
    132.   {
      4 l8 z# a* l8 ?1 G  H' _' M, [- C3 Z
    133.     m_lagrange_interpolating_usage();
      5 F4 u. Y3 W\" l) s4 T2 ?
    134.     4 u\" H& x- c: B9 r# @
    135.     return -1;
      ) C) R2 l* Y; d' G7 g) @- V' ~
    136.   }
      ( z5 S+ b) S! ^2 ^( X8 o
    137. ! j6 p5 p& w# r  Z& o
    138.   while ((c = getopt(argc, argv, "p:x:y:")) != -1)
      + @4 A# g/ A- ]5 Q
    139.   {5 u$ N  d0 G. K. D5 c7 q
    140.     switch (c) 6 Z: b* z1 i; N
    141.     {
      \" q( D2 h0 d9 C
    142.       case 'p':
      * ~4 }- w/ w% y5 c
    143.               m_p = (float) atof(optarg);! n& R2 a% W& L! t6 L- K
    144.       case 'x':5 ~6 W  m2 f, R) t% t
    145.         m_xi = optarg;
      ( w+ P/ |3 \, N: T+ D8 F2 _
    146.         break;
      4 ?  c7 [& R5 a
    147.       case 'y':4 i. x0 U- L1 i; f8 g
    148.         m_yi = optarg;
      6 [' u' H1 O) t* ]/ ?- q
    149.         break;
      + h! {) {6 C7 a6 H
    150.     }  V+ H; \- n5 {0 h6 H# f  d) t( P9 q
    151.   }. V+ i- [2 Y8 L% a# G2 @% z\" Z- Z

    152. : z! C9 G$ U& K+ d( [/ ~8 Y
    153.   res = m_lagrange_interpolating();
      # q! \) ?6 h/ z- ]
    154.   printf("Lagrange interpolating with %.4f result is %.7f\n", m_p, res);8 J% U6 ?6 l3 _0 I\" K
    155.   8 v4 t$ U7 Z+ s% x0 s, e
    156.   return 0;1 ]9 r' Y: q+ H' F# a7 U' h0 \
    157. }
      ( v- D2 y3 J9 k: a8 a, m+ i: d5 a' y
    复制代码
    回复

    使用道具 举报

    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 23:09 , Processed in 0.588122 second(s), 105 queries .

    回顶部