QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 22424|回复: 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自定义插值函数插值计算数值计算 1 i- d- f! W& k0 }/ \版本号: 04y09m28* ]& p+ ?* _. P9 R0 o 分类: 工程设计应用# ^8 a; u% a, ~: s$ z+ j 性质: 免费软件 % s% ^( u! r( I使用说明:

    & P" w9 v- U7 I! k R

    人们对EXCEL普遍熟悉的功能是表图的处理,不太知道其在工程计算(如锅炉设计计算)中的应用。复杂的工程计算常常用专业编程语言(Fortran、C、Pascal 等)来编制计算程序解决,用专业编程语言编制工程计算程序往往有下面二个缺点: & Q4 y' z( I+ Q$ g; g% V 8 O1 ?) I9 R( T, x* V# i4 H( ` 1) 编程语言专业性强,一般工程技术人员难以掌握,由这些专业编程语言编制的计算应用程序的维护、修改、升级都比较困难。

    % t/ s3 F+ A6 R& S1 l0 u. u

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

    - F: N8 Q8 g: y9 h8 N; P8 O5 q

    EXCEL每一个单元格就是一个电子表格,很容易进行一般的加、减、乘、除、乘方、开方,而三角函数、指数函数在EXCEL中可以直接引用内部函数。用EXCEL编制一般的工程计算程序还需解决的有以下两个问题:(1)循环计算,(2)表、单曲线、曲线组的查找(如:锅炉设计计算中的焓值)。对于问题(1)循环计算,EXCEL在工具菜单中提供了两个命令:单变量求解和规划求解,利用这两条命令很容易解决问题(1)。对于问题(2)表、曲线的查找,EXCEL没有提供现成的函数,但也可用VLOOKUP、MATCH、IF、OFFSET等函数的组合勉强近视解决,本文重点介绍表、曲线的查找自定义函数的定义及使用。 2 D* R& Q Y- K) v# V( o* p) R $ {0 I) R# e! x" I3 ^/ q 为了更好地解决曲线查找的问题,应用C++程序设计语言,用拉格朗日插值计算法在EXCEL中建立了自定义函数,单曲线插值函数TWLQ(变量,"带路径的保存数据的文件名"),曲线组插值函数THLQ(变量1,变量2,"带路径的保存数据的文件名")。单曲线插值函数、曲线组插值函数的"带路径的保存数据的文件"包含着特定对映表、曲线的信息和计算精度的要求 (文件为Notepad编辑的txt文件) 。 / c3 I5 o$ P' r: T2 I单曲线lagrange插值函数:double twlq(double x,char* filename);* ^2 a1 {0 n& a4 `6 ?* p double twlx(double q,char* filename); ( \+ [" f; P2 i/ M曲线组lagrange插值函数: ; e7 W; V1 ^( A% S; R+ w& e double thlq(double x,double y,char* filename);/ n* |+ K+ J ~$ F! n double thlx(double y,double q,char* filename);" T1 \, L0 ]' {1 }; h: b double thly(double x,double q,char* filename);。

    2 d6 z }# D- P& ~7 D- I, e* F' ~

    例:单曲线插值函数 "带路径的保存数据的文件"结构如下: ) d$ s% H5 k7 c) k( ?# L; L! e/ E@ Description @3 {6 N( j# I$ t( j! ?6 W n, nsel; ( V; U) @3 [$ L" A4 E$ px[0],x[1], x[2],··, x[n-2],x[n-1]; " E* R- H$ n% J* Qq[0],q[1], q[2],··, q[n-2],q[n-1];9 z/ T/ Y4 C& | MinX=0.7,MaxX=0.9,OverRangeAlm=1,X=电压,XUnit=mv,Q=电流,QUnit=mA

    : g! A* e+ L5 A

    注解: % f$ ?) w% q5 Q5 }9 l- T9 X7 o Description:用户自定义描述字符串(Description中不可有@符号); 2 s& B& w, @, `9 K3 \/ c! [ n: 总插值点个数; D" D) C. l# D1 ` nsel:实际参与插值计算的插值点个数;0 d7 J# `. w) H& \; c$ G8 C. u* m MinX=0.7,MaxX=0.9 取值范围;' O% V2 q3 o. L, U0 J OverRangeAlm=1 越限报警 1:报, 0:不报; * L( r! p7 v+ H9 g X=电压,XUnit=mv,变量名称,单位。

    * A4 [9 A9 N+ I. k; B

    ****结论:; p; T/ v* i$ \ ~ l)图形化界面的插值函数数据文件生成器 LCZMaker 方便快捷生成单曲线或曲线组插值函数数据文件。 2 e2 {. y6 ?, X' J, W 2)应用EXCEL自定义插值函数,在EXCEL中进行工程计算编程极为便利,比专业编程语言程序设计更易学易用、直观明了,用EXCEL编制的工程计算应用程序更易维护、修改、升级。 0 i% J7 `5 X# q! y 3) EXCEL本身长于表格制作,在EXCEL中进行工程计算编程人机界面友好,输入前、输出后处理方便简单。 }" H r4 S* S 4)在某大型锅炉厂电站锅炉性能设计计算中已显神力。

    ( j+ Z, @8 I0 \; w6 q$ B

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

    ' h7 M% q3 h7 T7 Y( s

    [分享]插值软件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. * R  P( \3 f) Z
    2. /* TODO: Lagrange interpolating
      + V. D4 S* c* {4 W\" W
    3. *
      ; |* E! P, N7 p: {
    4. * For example, if lg2.71 = 0.4330, lg2.72 = 0.4346, then lg2.718 = ?
      ( \, Q. z9 G% _- ~9 n8 o  x
    5. * In this situation, it could be solved via lagrange interpolating
      1 r& _5 m  R3 L/ }; P
    6. *
      $ w  [\" I- X# J4 z! o0 s, e
    7. * */
      + v! t6 I1 ^& c/ r
    8. ; A+ i* x* o1 M, y6 i
    9. #include <stdio.h>
      8 O7 s$ [, t! S- s4 j' n
    10. #include <stdlib.h>8 }0 V# R) s, k) F& N
    11. #include <string.h>
      / X9 e; t9 D) p* ]1 v\" [, F* Y
    12. ' z9 D! N, q8 O$ q9 ]5 J* U
    13. #define DEBUG 0
      . u1 T# O& w9 r1 Y* k* q/ t. u
    14. ' J* N! S/ K$ Z9 j5 S& z0 v
    15. static float m_p = 0.5635;
      1 j! }5 z! t3 W/ t\" ]2 G
    16. static char *m_xi = NULL;
      # j7 |; F$ j9 K) O
    17. static char *m_yi = NULL;( V) ?6 q6 k+ c( J3 m! B3 k
    18. static float m_arr[] = {};
      # X. S9 ?+ l& w! k0 v5 H
    19. static unsigned int m_n = 0;
      / Y; w9 s) V( s
    20. % h. C, b# E& e
    21. static void m_lagrange_interpolating_usage();* C  N; e! Q7 n( o# v
    22. static int m_lagrange_interpolating_set_n_arr();
      & v8 W$ U, c$ L7 J' Q, H  ?
    23. static float m_lagrange_interpolating();
      2 F- `* ]& t. U, X\" d2 B

    24. 7 {& h5 Q( r/ @: B  u  \8 L. Y) J+ f% U
    25. static void
      2 v+ d% |& R3 r% p
    26. m_lagrange_interpolating_usage()
      8 R8 A8 v& C( l8 o3 D+ }
    27. {
      # Q( f& v  [3 c7 o8 M$ O+ s
    28.   printf("Lagrange Interpolating Usage:\n");
      # A: c% r, A; s3 [
    29.   printf("bin/li -p ** -x ** -y **\n");
      : h6 J( L% `$ T1 T
    30.   printf("-p 0.5635\n");
      4 W1 G5 m2 p! p% q# H( n
    31.   printf("-x 0.56160,0.56280,0.56401,0.56521\n");
      4 y% k  r$ l2 w# Q
    32.   printf("-y 0.82741,0.82659,0.82577,0.82495\n");
      0 J0 [- o0 @) |+ t' V$ `& b
    33. }
      \" {. j4 u. K% \; Y/ L6 ]* @

    34. 5 M- z8 N# d8 e- I: s6 f' L% n; b! ~
    35. static int - ^6 F% h) n! v  Y! ^/ Q
    36. m_lagrange_interpolating_set_n_arr()
      ; _! n2 j. P$ J: X- d# R  C# [9 l
    37. {( A& x, M3 K7 v0 T0 y) z+ @
    38.   int xi_n = 0;+ t/ i1 ]6 v) V  N0 T\" K* R
    39.   int yi_n = 0;\" N, A4 s4 C) a( v1 I* b4 O
    40.   int n = 0;
      ' c, S6 t+ N7 k, S: \
    41.   char *token = NULL;
      # \3 t+ k/ ?6 T3 ^
    42.   const char *delim = ",";1 n4 X% F3 f# q\" z1 ?7 s' ~
    43. 7 R! N6 z7 ~0 r. G  t\" E$ {
    44.   token = strtok(m_xi, delim);
        q9 U6 b7 u\" n7 J4 @1 ?% F4 P
    45.   while (token)$ @, \: g; I) O& @: @) H$ M) k: \( X: X7 x
    46.   {
      ' K% ~, i3 Q6 I3 }( L
    47.     xi_n++;( W$ B7 j/ p% @: x6 K+ e
    48.     n++;1 V% }0 W8 v0 |; R
    49.     m_arr[n] = (float) atof(token);
      7 c) o$ h! ]- p8 f4 \
    50.     token = strtok(NULL, delim);
        r& Z8 `% K, l+ X) I) t+ G3 L
    51.   }/ a. K/ y- Q2 V( B

    52. & P\" n8 ^0 u( s9 I4 ^1 K
    53.   token = strtok(m_yi, delim);, ]) O& W3 |  Q  J
    54.   while (token)# m7 m, M4 L3 b
    55.   {
      6 l* V2 j1 [( a. d; O- A$ W, [
    56.     yi_n++;
      / d8 i6 N2 \0 j3 V( ^2 u5 [$ q
    57.     n++;/ R& X; {2 G* [% g+ \3 C
    58.     m_arr[n] = (float) atof(token);$ n4 i* o2 o! y' `& f: P
    59.     token = strtok(NULL, delim);
      7 O& e: ?3 L$ W. m5 _
    60.   }
      4 I: U4 u8 @' ]- V$ ~1 m$ I
    61.   0 t7 ~% I1 s3 X0 s! ]  C# V
    62.   if (xi_n != yi_n) & P8 t) O, G8 a* Z. d0 y; y2 f9 _
    63.   {
      7 h  V0 T$ g, \# b( p0 l; }
    64.     return 0;2 a) d  J& n& h
    65.   }
        A% Q9 U3 y/ X- @$ o& n+ P1 c
    66. % V7 ]1 J' r2 {+ l( @/ w' v
    67.   m_n = xi_n = yi_n;
      4 y: |5 b% Z: J2 L' I& J. q( g( w
    68. 0 s9 |9 c: @4 t6 Q/ p9 l
    69.   return 1;* y1 `  I\" M5 E; z4 W: q9 Z
    70. }; g: ^$ u) T/ e& Y2 ?1 M6 e

    71. & i  C. m4 Q2 M: {6 q
    72. static float ( |$ V/ T, l* R% X1 s8 N7 v0 w
    73. m_lagrange_interpolating() 8 `, D\" Z) l! l0 Y% g  K' ^$ J
    74. {$ F( t; g& Z5 ^& w7 \+ {' r0 [
    75.   float l = 0.00000;) a* P4 m: j5 C$ p' D% A\" f6 ^' h
    76.   float li;
      2 J* T; ^! J( Q$ T, p
    77.   int i;
      & Q: U5 f$ H3 }1 N
    78.   int j;
      0 m: O, p/ \) a3 g; ^2 t
    79. : Q7 P6 V0 s5 h* P  \\" Y
    80. #if DEBUG  L/ R3 ~% n& V
    81.   printf("DEBUG at %d: enable debug mode\n", __LINE__);: V2 k\" B4 e: T
    82.   unsigned int m_n = 3;1 t! X' Z5 M1 u4 N) r! Q0 H
    83.   float m_p = 0.5635;6 q. s( e. m* i+ m# E5 }
    84.   float m_x[] = {0.56160, 0.56280, 0.56401, 0.56521};6 D6 d  j& U! L0 l8 F. z5 ?
    85.   float m_y[] = {0.82741, 0.82659, 0.82577, 0.82495};
      1 W, |) A2 Z/ W1 Y1 H
    86.   3 ~, a% ~7 [% C
    87.   for (i = 0; i < m_n; i++)
      + ]1 f. I2 a' l9 `: X& i
    88.   {8 S* V& a  H. e  O) |
    89.     li = 1.0000000;
      : c) w/ W: T5 z$ ^' ^- m9 ?. Z4 W
    90.     for (j = 0; j < m_n; j++)0 t; w, G4 ^: g$ k) H) ?
    91.     {1 B( \: x- n\" U\" b
    92.       if (j != i)
      ! Z; ~4 \% X* f9 |, E0 V, A\" d
    93.       {
        A$ w4 M/ ^- q\" R! k
    94.         li = li * (m_p - m_x[j]) / (m_x[i] - m_x[j]);; g/ I% s( [: V6 f\" ]1 u; ?3 q+ q
    95.       }
      7 P1 u/ [. W; B8 d9 m# y: b
    96.     }! w8 T5 O# z\" U6 N# D
    97.     l = l + li * m_y[i];' T* L6 X7 H. A7 p: D; W) v
    98.   }- x9 L' I8 W: r# M
    99. #else
      ! ~2 S- ~! t8 y* `5 ~, B
    100.   if (!m_lagrange_interpolating_set_n_arr()) 1 Q0 Z6 h9 X3 _& o+ B
    101.   {, ^, w1 U. m! o. s8 ~
    102.     printf("Error: xi and yi counter is diff\n");# M9 v3 k9 W1 P# E1 E$ }+ u0 [
    103.    
      & k' i3 r8 X3 _/ a
    104.     return 0;* @2 A+ [* y; k$ {
    105.   }
      0 g/ ]8 G! ?: n! M* E$ @- l

    106. ! f8 }9 C) I4 [( J2 W( j, ^4 C. h
    107.   for (i = 0; i < m_n; i++)
      6 R4 a) D) a6 ?( M1 ]% y
    108.   {
      8 i! n. `5 x. [
    109.     li = 1.0000000;% Z, R4 A3 T4 W% H
    110.     for (j = 0; j < m_n; j++)
      * T$ |4 @2 p\" j5 Z/ S! j
    111.     {4 w- D4 W) [! S$ i
    112.       if (j != i) # _% y, E5 J- M' }2 T& f5 Z
    113.       {9 x0 \# }8 P( P) [9 t( L- T2 Z
    114.         li = li * (m_p - m_arr[j + 1]) / (m_arr[i + 1] - m_arr[j + 1]);
      : ?5 a, o8 U7 t8 o
    115.       }
      3 j0 m6 u# r1 ~4 E
    116.     }
      8 C4 h* |! v( u\" Z- b, k
    117.     l = l + li * m_arr[i + m_n + 1];
      . [: E$ _8 a$ \/ D% G. i' ^% @. S
    118.   }
      3 |/ v0 o( h, Q+ G( \2 a9 j
    119. #endif
      9 H/ c0 L9 z8 K. _$ E

    120. ' k0 @- n' ^1 g; z( O  e1 x
    121.   return l;
      9 p' Y6 [' z7 S6 N9 |
    122. }/ S. f7 i! _* y* Z8 [5 n7 B1 Y$ R* {

    123. 8 N5 j3 l6 U6 O  r* o
    124. int
      2 C/ S. l5 T3 k8 Q' ?& r, ~9 u: e$ l
    125. main(int argc, char **argv) & ^& e, e* G0 R
    126. {$ J& K& j# o; I2 [: ]* I# }\" s; w3 M3 n8 H
    127.   int c;8 ^. B; Y2 G/ R9 O# {
    128.   extern char *optarg;
      1 Y9 R) h- t- C2 B8 z* g
    129.   float res;
      , F; r. h8 ~7 P! J# Q4 h
    130. / m2 `( r& C* m# |# M' k) s) P5 m& O
    131.   if (argc < 2)
      # U7 e4 G7 X\" `1 w
    132.   {3 c6 \* ~& z5 H/ [) [& v6 z6 j
    133.     m_lagrange_interpolating_usage();
      8 u# t5 m0 D& K+ `4 T
    134.     , J7 }* L0 w  N( H+ v8 D
    135.     return -1;
      ; N3 f( n3 @; f4 g% q
    136.   }- E/ T& K/ Q\" s\" f2 o6 P  Q
    137. ( V. ~/ {6 G6 V) z2 I7 b5 q
    138.   while ((c = getopt(argc, argv, "p:x:y:")) != -1) 4 B8 m4 t. {+ r$ w2 T5 V
    139.   {
      2 @* b$ V) e8 X! e( S. ?
    140.     switch (c)
      7 F  ^' p8 |\" L1 o2 J
    141.     {
      5 d7 w0 @' [+ o: T6 j) Z\" R
    142.       case 'p':
      0 I1 s* z: T1 W! w
    143.               m_p = (float) atof(optarg);  P9 q  W5 m# g: a+ C* l0 q- H. R
    144.       case 'x':( x; A: x# q; g7 Q8 E5 f1 d2 E
    145.         m_xi = optarg;
      3 ]2 L0 g7 }# U/ O4 A
    146.         break;! n8 s; q5 e; `! d/ X
    147.       case 'y':
      4 G& x2 o- W6 U* O$ S
    148.         m_yi = optarg;
      . U* O0 l\" ~0 q( ]
    149.         break;3 B# o* I1 m( R- M
    150.     }7 o) E6 `' J8 G9 R5 Y3 @
    151.   }
      ) [# Q2 R) S1 J1 B7 d. l. u

    152. . O: D; R7 s- ]& l3 h5 l
    153.   res = m_lagrange_interpolating();  ?. K# l# e) S+ y: ?3 B* s
    154.   printf("Lagrange interpolating with %.4f result is %.7f\n", m_p, res);
      9 e5 t+ [0 A0 B6 a7 E
    155.   
      & B: n  m3 b$ C4 P% d* j1 ^. r/ i1 l
    156.   return 0;
      9 ?2 P* r3 f1 w+ x( [( a; B7 u
    157. }
      9 V1 F1 i/ _; f6 V
    复制代码
    回复

    使用道具 举报

    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-30 04:53 , Processed in 0.426034 second(s), 105 queries .

    回顶部