请选择 进入手机版 | 继续访问电脑版

QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 18803|回复: 12

[分享]插值软件langrang

[复制链接]
字体大小: 正常 放大
ilikenba 实名认证       

2634

主题

47

听众

1万

积分

  • TA的每日心情
    奋斗
    2024-4-15 06:07
  • 签到天数: 1008 天

    [LV.10]以坛为家III

    社区QQ达人 新人进步奖 优秀斑竹奖 发帖功臣

    群组万里江山

    群组sas讨论小组

    群组长盛证券理财有限公司

    群组C 语言讨论组

    群组Matlab讨论组

    发表于 2005-3-20 11:55 |显示全部楼层
    |招呼Ta 关注Ta

    软件名称:EXCEL自定义插值函数插值计算数值计算 , g" h* \0 ]% D7 o) P1 y2 ], i; p版本号: 04y09m281 Z4 Z( i) e3 h' T) \6 }# A 分类: 工程设计应用 3 ?7 | X) X3 y' k性质: 免费软件3 x, `1 I' ~" P& m5 Z5 R# W- v2 a 使用说明:

    % d! @7 d* b7 d% r

    人们对EXCEL普遍熟悉的功能是表图的处理,不太知道其在工程计算(如锅炉设计计算)中的应用。复杂的工程计算常常用专业编程语言(Fortran、C、Pascal 等)来编制计算程序解决,用专业编程语言编制工程计算程序往往有下面二个缺点:( l' b! `9 W/ r. V, \) q 9 j( R4 ]' v! {3 {; B9 G 1) 编程语言专业性强,一般工程技术人员难以掌握,由这些专业编程语言编制的计算应用程序的维护、修改、升级都比较困难。

    - C7 e" R: ?! Z. W. m. i+ v

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

    - N) V- h/ ]$ z

    EXCEL每一个单元格就是一个电子表格,很容易进行一般的加、减、乘、除、乘方、开方,而三角函数、指数函数在EXCEL中可以直接引用内部函数。用EXCEL编制一般的工程计算程序还需解决的有以下两个问题:(1)循环计算,(2)表、单曲线、曲线组的查找(如:锅炉设计计算中的焓值)。对于问题(1)循环计算,EXCEL在工具菜单中提供了两个命令:单变量求解和规划求解,利用这两条命令很容易解决问题(1)。对于问题(2)表、曲线的查找,EXCEL没有提供现成的函数,但也可用VLOOKUP、MATCH、IF、OFFSET等函数的组合勉强近视解决,本文重点介绍表、曲线的查找自定义函数的定义及使用。) I) Z+ B; z q: K+ Q9 O- z: \1 L8 l) Q 5 O; [9 O# z# I6 _ 为了更好地解决曲线查找的问题,应用C++程序设计语言,用拉格朗日插值计算法在EXCEL中建立了自定义函数,单曲线插值函数TWLQ(变量,"带路径的保存数据的文件名"),曲线组插值函数THLQ(变量1,变量2,"带路径的保存数据的文件名")。单曲线插值函数、曲线组插值函数的"带路径的保存数据的文件"包含着特定对映表、曲线的信息和计算精度的要求 (文件为Notepad编辑的txt文件) 。7 B0 C( J6 e% @& N/ i 单曲线lagrange插值函数:double twlq(double x,char* filename);: D" A3 m% r) m, }+ s double twlx(double q,char* filename); , a) m# K' t: g/ k0 Q曲线组lagrange插值函数: " C. G* B" n$ Y double thlq(double x,double y,char* filename); 7 [3 d5 o5 o$ z4 C! ~7 ^1 _ double thlx(double y,double q,char* filename);! b+ h; [- T7 X$ `- ^ n double thly(double x,double q,char* filename);。

    3 q- g4 w# U( q

    例:单曲线插值函数 "带路径的保存数据的文件"结构如下: 5 I% u. C, X1 T- z$ h, x) p, }4 W/ S@ Description @, Y1 B; h5 Q9 J; ]7 X n, nsel;1 G0 z( ? ~$ K* d) L; u6 A x[0],x[1], x[2],··, x[n-2],x[n-1];' M2 G- P/ @$ G2 C5 e# z C( ] q[0],q[1], q[2],··, q[n-2],q[n-1];4 N4 [, U: `" @) s' L: m) K, V5 Z MinX=0.7,MaxX=0.9,OverRangeAlm=1,X=电压,XUnit=mv,Q=电流,QUnit=mA

    5 x- @' T: }2 C* e

    注解:& {; r! i6 a$ w* E% a Description:用户自定义描述字符串(Description中不可有@符号); . t( l' y6 y: ] n: 总插值点个数;7 o- h7 c8 E( d* ]5 Z nsel:实际参与插值计算的插值点个数; ) _& U# i" K( I6 K; O- o MinX=0.7,MaxX=0.9 取值范围;9 d3 O, ^0 i0 J: i1 x. [ OverRangeAlm=1 越限报警 1:报, 0:不报; 5 S; W- Z2 W2 L7 H X=电压,XUnit=mv,变量名称,单位。

    , I! d, Z! o5 Y, v9 s C% D( \

    ****结论: 7 ]4 Z( y5 N8 O! C l)图形化界面的插值函数数据文件生成器 LCZMaker 方便快捷生成单曲线或曲线组插值函数数据文件。 $ C$ V3 M% g: _* p/ H9 m 2)应用EXCEL自定义插值函数,在EXCEL中进行工程计算编程极为便利,比专业编程语言程序设计更易学易用、直观明了,用EXCEL编制的工程计算应用程序更易维护、修改、升级。) Q& T5 t) ]$ d2 A 3) EXCEL本身长于表格制作,在EXCEL中进行工程计算编程人机界面友好,输入前、输出后处理方便简单。3 u, r- q# S3 ~9 f1 [+ K) @ 4)在某大型锅炉厂电站锅炉性能设计计算中已显神力。

    % B$ X+ y7 y0 V1 d

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

    / e& {4 q, k0 c1 E. s. l3 M8 ^9 @7 v

    [分享]插值软件langrang.zip

    419.84 KB, 下载次数: 85, 下载积分: 体力 -2 点

    [分享]插值软件langrang

    zan
    ww991616        

    0

    主题

    3

    听众

    17

    积分

    升级  12.63%

    该用户从未签到

    新人进步奖

    回复

    使用道具 举报

    ft12345 实名认证       

    0

    主题

    0

    听众

    13

    积分

    升级  8.42%

    该用户从未签到

    自我介绍
    200 字节以内

    不支持自定义 Discuz! 代码
    回复

    使用道具 举报

    0

    主题

    3

    听众

    14

    积分

    升级  9.47%

    该用户从未签到

    自我介绍
    爱打羽毛球的程序员
    1. + Q& n: f4 U3 l, G  m2 J7 r
    2. /* TODO: Lagrange interpolating
      6 @: e3 Q5 H1 w( f
    3. *. l( Z: E; e, v2 n, H  O
    4. * For example, if lg2.71 = 0.4330, lg2.72 = 0.4346, then lg2.718 = ?
      5 O7 X( V2 f/ [
    5. * In this situation, it could be solved via lagrange interpolating- y3 s9 O# t7 I6 P$ ~% \
    6. *8 L- ]5 F; o  l& q+ h( K
    7. * */
      * w+ N! J: J* ~8 J
    8. ! ^% j; K8 E  ^/ J  q
    9. #include <stdio.h>
      # v  {! g) X$ [& `; y% k
    10. #include <stdlib.h>, N/ V$ H( t$ U7 f- s0 I$ p
    11. #include <string.h>
      0 r, B. }4 _5 I; X; Y5 h& J

    12. . C: l) ~; m1 k, z$ ?
    13. #define DEBUG 0
        d  w/ x- V5 S/ P: W+ f2 W% F4 b
    14. 2 g8 d/ Q: g/ F& {8 Y0 ]2 {
    15. static float m_p = 0.5635;
      0 y2 u, K! K0 p% j
    16. static char *m_xi = NULL;
      : _; N) K$ @9 B3 t2 o3 V2 C\" ~
    17. static char *m_yi = NULL;
      2 {0 b6 B$ R( N3 w# d8 P
    18. static float m_arr[] = {};\" I) B4 n' F( T6 a4 i' v
    19. static unsigned int m_n = 0;
      ) j3 o! E  z* y5 W  b6 N+ I
    20. * t' c$ v, m: @, h; |' g2 w
    21. static void m_lagrange_interpolating_usage();8 Y' s6 I+ {4 M
    22. static int m_lagrange_interpolating_set_n_arr();+ V  j0 {9 t. A: s, P! L' e  [
    23. static float m_lagrange_interpolating();
      5 E& z5 M\" X, v$ r' U+ b
    24. 7 N5 m% ^- z' d, |6 \0 h. O' E
    25. static void
      1 q3 h$ D) v# ^
    26. m_lagrange_interpolating_usage()
      0 _2 C: s' N* {0 W) d6 q5 L9 N
    27. {
      2 `  Z$ n, e3 ^8 `
    28.   printf("Lagrange Interpolating Usage:\n");0 c( G3 D\" [+ J' f. {0 R  m\" p
    29.   printf("bin/li -p ** -x ** -y **\n");
      $ G' c. T4 c9 z& e6 z3 l
    30.   printf("-p 0.5635\n");, I$ b; u4 D. W( B' U; D
    31.   printf("-x 0.56160,0.56280,0.56401,0.56521\n");
      * A+ L$ j8 j& z2 k' x
    32.   printf("-y 0.82741,0.82659,0.82577,0.82495\n");
      * |4 q! Y! M$ l* A6 Q/ c
    33. }( G1 A3 |& s4 F8 B
    34. 3 z+ z! D! i5 w: H9 W\" f+ t2 k3 U
    35. static int 6 A5 k8 v8 |0 M3 q7 A9 M& k( E
    36. m_lagrange_interpolating_set_n_arr()
      \" v9 J9 l. V, j7 V
    37. {* s0 ]7 B% _9 n$ m  ^\" |
    38.   int xi_n = 0;0 J; L' w4 n* d) V\" e
    39.   int yi_n = 0;# a/ d6 T- j9 x6 u; i: V4 y
    40.   int n = 0;
      \" O# T' u* q8 m9 ^+ y: w+ k0 R
    41.   char *token = NULL;
      2 {4 I4 z2 L, I! J( D! R
    42.   const char *delim = ",";5 k- [1 B0 J) T! ]- ?
    43. \" h: b6 y8 I6 G( {& M
    44.   token = strtok(m_xi, delim);! t: \& U9 `, G5 w$ z' H
    45.   while (token): K  z4 ^1 o' a
    46.   {
      5 C. Z1 F/ _3 O  O4 ?+ {
    47.     xi_n++;8 B/ x/ m( E* ~2 A
    48.     n++;' C  S; e6 w+ P! U/ m
    49.     m_arr[n] = (float) atof(token);  ]/ j0 o, Q' A
    50.     token = strtok(NULL, delim);
      0 E5 h4 T2 n# ~9 S$ r* }9 K( {; L- \
    51.   }
      $ I2 V( |( T1 J5 U
    52. % l# N! K! \+ H; J
    53.   token = strtok(m_yi, delim);
      $ W$ T) |# D% ]' V) P, j
    54.   while (token)1 ]: p# {! D) `* A! O5 l2 d
    55.   {
      & w  d% [1 F: P8 l
    56.     yi_n++;
      0 l4 u; h& U3 R( T/ q' A6 p
    57.     n++;
      3 J) _  U+ {8 [' i; ~\" f1 N+ x# ?7 R2 t
    58.     m_arr[n] = (float) atof(token);
      6 z3 v( {5 Z$ h* ~0 t
    59.     token = strtok(NULL, delim);0 }. ^; d# @; K2 z, @; z4 A
    60.   }
      ; G! q! {2 m) G! L, h3 y1 c
    61.   $ n! P- G; o' b: \
    62.   if (xi_n != yi_n) # N! Y4 P  R$ ~' h4 V# D) p* C* k# w
    63.   {
      ( N$ _( p) M( k4 l\" k. ^  b
    64.     return 0;- {/ U0 b$ n3 N% p' g\" o
    65.   }
      ' i# ?6 T; O4 W9 o

    66. ' c5 j- n9 r/ F; K) A9 ~# d
    67.   m_n = xi_n = yi_n;
      ; L* ]# G# t, ]7 Z: G

    68. ! c' E# e- k! `$ }* r
    69.   return 1;) X5 u  z- K; p. U\" w
    70. }
      2 D/ O/ l' w  ~+ p: i6 d, Q

    71. * B: X: ]! I( ^* v
    72. static float * g5 ^* n5 Y2 l% Q
    73. m_lagrange_interpolating() + P# i$ c5 O) A5 r) Q
    74. {1 d( s- I, G8 x: D4 W/ O, ]9 {% [
    75.   float l = 0.00000;2 e3 t$ C8 q\" z% P; j
    76.   float li;1 M8 U! g: p5 p' x2 i; G( K8 h. a: H0 \
    77.   int i;
      3 R, W  W2 p7 J
    78.   int j;2 i0 K- Y2 X; t6 I2 e0 }
    79. # h1 n' [. q3 x# A
    80. #if DEBUG) [. [$ Q+ U& E% Y' F: F
    81.   printf("DEBUG at %d: enable debug mode\n", __LINE__);
      - [0 J2 b3 a2 q+ R3 E6 J
    82.   unsigned int m_n = 3;3 j. R: T0 O& v! I: j. t
    83.   float m_p = 0.5635;9 @, l( j' _5 @5 b9 _( e
    84.   float m_x[] = {0.56160, 0.56280, 0.56401, 0.56521};4 G% D: {- q& p! k0 h+ V9 Q
    85.   float m_y[] = {0.82741, 0.82659, 0.82577, 0.82495};: r# q% b0 w# Q( B/ ^0 O
    86.   ) _5 Q\" w4 F, F/ k/ S
    87.   for (i = 0; i < m_n; i++)2 b2 m7 f0 [9 g' K
    88.   {, }( ^4 O- r\" _* @\" A, Y, m# |
    89.     li = 1.0000000;/ P) P7 d7 N+ T
    90.     for (j = 0; j < m_n; j++)# x! T% K4 s& q8 r1 y+ C6 j) \
    91.     {: J' k4 r5 R% u# p
    92.       if (j != i)) q( f9 W% T3 t. Z* o) [\" q
    93.       {
      8 \; G7 s' ]/ E1 h6 v+ t
    94.         li = li * (m_p - m_x[j]) / (m_x[i] - m_x[j]);
      & `, S5 X4 Z' q
    95.       }
      7 w\" Y. Q4 i/ I+ o: I
    96.     }, D2 C7 }! ^9 }
    97.     l = l + li * m_y[i];
      \" y9 _: d, z% t+ J
    98.   }
      4 w' m+ ^7 D% h+ {9 z$ k
    99. #else
      6 [- O$ P  B! ~- y
    100.   if (!m_lagrange_interpolating_set_n_arr())
      7 j$ C* d\" }& F0 r4 E9 X/ [
    101.   {
      ( R0 u' t; I# H7 B$ K( Z
    102.     printf("Error: xi and yi counter is diff\n");3 a( S) j* J8 f9 A0 d4 ]  P
    103.    
      , `. i! S  N/ Z+ ^8 ?* r( f
    104.     return 0;% j! G! _! k8 ^4 c3 @
    105.   }
      ; f; o, n: [2 J' ?. n$ q9 o
    106. - _2 p7 M8 s8 [3 v' b4 e3 a0 s
    107.   for (i = 0; i < m_n; i++)
      3 V7 Q8 ]/ N3 ?) K& ?
    108.   {, u$ e) H  i8 ~
    109.     li = 1.0000000;3 Q, p  R- K- B
    110.     for (j = 0; j < m_n; j++) 6 C# K1 w6 g7 o$ w# r
    111.     {
      5 ~% g- P% r' B: @+ f
    112.       if (j != i) + I! @3 z* Y; D0 O; A& g3 V6 h6 V! l
    113.       {: ~+ z  Z3 R+ j
    114.         li = li * (m_p - m_arr[j + 1]) / (m_arr[i + 1] - m_arr[j + 1]);6 f% a, C3 F: e
    115.       }/ J2 A! {4 w: L) J. o9 Z\" z+ H/ Z$ x! X
    116.     }
      9 `, S6 J) J& v2 {$ D% q2 \) H2 Z; E( \
    117.     l = l + li * m_arr[i + m_n + 1];. m7 v& u) ?  g
    118.   }* ?2 A8 ~5 K# V; D) Y3 s5 \0 y
    119. #endif
      * h' ^1 |) u) E: q
    120. & A# q( w' T  `; p4 z2 N( M
    121.   return l;6 f7 S7 P2 e$ O! U/ K+ |
    122. }
      . `/ j2 y' d0 y+ ^  o

    123. , r/ o' [( b) [& l# ]* `7 {
    124. int % s: S6 N, h0 t\" e0 \
    125. main(int argc, char **argv)
      6 ^, w\" l; ?$ R\" C* {' F
    126. {
      8 w1 I( T1 r, F  [. \' G3 a\" E! C/ x
    127.   int c;5 l6 |4 t4 n! z- I9 E' t$ Z! H
    128.   extern char *optarg;. Z\" L2 I& V9 H
    129.   float res;
      ; S- {9 X% Z7 P8 A% Y9 f
    130. ; ?& l2 j) L! G- M  \5 J
    131.   if (argc < 2)
      6 r: _( ~. O\" r7 B/ l
    132.   {
      : y' x; q: c! i9 O\" u! Y/ }
    133.     m_lagrange_interpolating_usage();; T2 t; Z5 q7 _
    134.     # J0 e4 D8 W0 T0 [1 \
    135.     return -1;$ H4 `+ ?( L7 _% z
    136.   }2 R( L: e* [) }9 |3 T

    137. ) s$ b! X6 Q\" m- F/ G7 b
    138.   while ((c = getopt(argc, argv, "p:x:y:")) != -1)
      ' |! Y0 T1 S5 k3 J5 g+ @
    139.   {
      % o5 N- I) Z6 r; ^% l5 j
    140.     switch (c) : u& P! [. T\" E% U- o/ @
    141.     {
      \" w& O! O! l! g1 ?
    142.       case 'p':* E, M% g: u\" Y$ X, x3 q5 F; X2 A
    143.               m_p = (float) atof(optarg);! C6 ~9 y+ w* J  ~* l\" x
    144.       case 'x':
      : q+ H% z' n, H9 ~! j, `
    145.         m_xi = optarg;' v$ Z. H$ D0 R, F, A! [/ y
    146.         break;% C  Y6 {7 Y2 Q0 a! `6 z
    147.       case 'y':& {1 ^: |' `( w! t+ w: K
    148.         m_yi = optarg;( \6 M( j& s\" M# ]; _5 B
    149.         break;; ]- J! a\" _: a3 E; L$ j8 g
    150.     }% T, t/ f) {4 ]% T( ^% q. T
    151.   }, M2 ]+ ?. _6 r\" d
    152. # V$ _3 l' ]0 U7 I
    153.   res = m_lagrange_interpolating();, h/ n, J) U: I: N% N
    154.   printf("Lagrange interpolating with %.4f result is %.7f\n", m_p, res);
      . m3 w& S5 n/ U% c7 h* K
    155.   
      \" s$ W1 Q5 B1 n1 t- s4 `7 k2 h
    156.   return 0;
      5 [8 l0 |- b\" {$ V\" A
    157. }
      $ m' y2 b0 T6 b( Y4 g
    复制代码
    回复

    使用道具 举报

    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, 2024-4-17 08:03 , Processed in 0.767740 second(s), 106 queries .

    回顶部