QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 22855|回复: 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自定义插值函数插值计算数值计算 ! I/ j/ q8 Z' \# m/ o, d1 M版本号: 04y09m28 - r# n4 P3 a6 h4 w6 t分类: 工程设计应用 6 r& V; I- n+ {( {# j性质: 免费软件- I" k7 t& E, _- o7 C" _ 使用说明:

    $ S/ ]/ p2 l, ]; l4 d

    人们对EXCEL普遍熟悉的功能是表图的处理,不太知道其在工程计算(如锅炉设计计算)中的应用。复杂的工程计算常常用专业编程语言(Fortran、C、Pascal 等)来编制计算程序解决,用专业编程语言编制工程计算程序往往有下面二个缺点: 5 t* P& T$ l4 A5 n5 V: N# f ) X7 e1 O# @& X1 p; A8 r. B 1) 编程语言专业性强,一般工程技术人员难以掌握,由这些专业编程语言编制的计算应用程序的维护、修改、升级都比较困难。

    8 m/ l8 k7 v8 |; A( ]6 Q t

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

    . b' d" |( e8 a: j. i: N' C$ V( q

    EXCEL每一个单元格就是一个电子表格,很容易进行一般的加、减、乘、除、乘方、开方,而三角函数、指数函数在EXCEL中可以直接引用内部函数。用EXCEL编制一般的工程计算程序还需解决的有以下两个问题:(1)循环计算,(2)表、单曲线、曲线组的查找(如:锅炉设计计算中的焓值)。对于问题(1)循环计算,EXCEL在工具菜单中提供了两个命令:单变量求解和规划求解,利用这两条命令很容易解决问题(1)。对于问题(2)表、曲线的查找,EXCEL没有提供现成的函数,但也可用VLOOKUP、MATCH、IF、OFFSET等函数的组合勉强近视解决,本文重点介绍表、曲线的查找自定义函数的定义及使用。& M3 f7 X4 e. X1 M+ l+ w/ f4 F 4 ^) I: H2 t1 q7 S% e" m4 a 为了更好地解决曲线查找的问题,应用C++程序设计语言,用拉格朗日插值计算法在EXCEL中建立了自定义函数,单曲线插值函数TWLQ(变量,"带路径的保存数据的文件名"),曲线组插值函数THLQ(变量1,变量2,"带路径的保存数据的文件名")。单曲线插值函数、曲线组插值函数的"带路径的保存数据的文件"包含着特定对映表、曲线的信息和计算精度的要求 (文件为Notepad编辑的txt文件) 。 6 W: m7 ?3 o) S3 e) w单曲线lagrange插值函数:double twlq(double x,char* filename);1 m% E- ]$ |+ L- R' I: p1 ^# A double twlx(double q,char* filename); $ |* s& _6 f: }曲线组lagrange插值函数:+ f# h8 ^5 P9 Y0 b( x double thlq(double x,double y,char* filename); % `6 l% ^2 \5 ?' H; w double thlx(double y,double q,char* filename); : b F6 s% E. J" Z* s double thly(double x,double q,char* filename);。

    6 A0 ]( |4 w" M6 G! X7 `

    例:单曲线插值函数 "带路径的保存数据的文件"结构如下: 2 d h+ G! H+ ~@ Description @ 3 a$ }3 U9 A/ L% K5 O5 v) m n, nsel; % f e) \, {5 v& U8 o+ zx[0],x[1], x[2],··, x[n-2],x[n-1];( e" ?) H, \4 V% j- w& p q[0],q[1], q[2],··, q[n-2],q[n-1]; ; ~+ z9 ~, q. e6 f) r" hMinX=0.7,MaxX=0.9,OverRangeAlm=1,X=电压,XUnit=mv,Q=电流,QUnit=mA

    + `5 f5 {1 ]. f; Z% ^1 c3 ]

    注解:% q8 f2 q- g, P i Description:用户自定义描述字符串(Description中不可有@符号);( y$ `/ S1 S7 {0 T& o! m n: 总插值点个数;' J& \, h6 [4 I( D6 ? nsel:实际参与插值计算的插值点个数;! }6 k0 Q- B, U4 q' m: ?' _ MinX=0.7,MaxX=0.9 取值范围;- k% F( m% W9 _8 B" F4 }" a OverRangeAlm=1 越限报警 1:报, 0:不报; 2 A7 N3 z$ U0 I, W4 P3 A X=电压,XUnit=mv,变量名称,单位。

    % L- u$ E* l9 y: F' H6 A

    ****结论: 6 c" Q9 V0 i# f' }) M7 ] l)图形化界面的插值函数数据文件生成器 LCZMaker 方便快捷生成单曲线或曲线组插值函数数据文件。 " T9 V6 G6 z N6 c2 Q1 x. h 2)应用EXCEL自定义插值函数,在EXCEL中进行工程计算编程极为便利,比专业编程语言程序设计更易学易用、直观明了,用EXCEL编制的工程计算应用程序更易维护、修改、升级。' ~3 E. [1 Z. b5 ]( ]% ]. x 3) EXCEL本身长于表格制作,在EXCEL中进行工程计算编程人机界面友好,输入前、输出后处理方便简单。 ) A1 j# E3 B4 z" j: U: T7 P 4)在某大型锅炉厂电站锅炉性能设计计算中已显神力。

    7 C0 _" ]$ k ?# S9 c h

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

    . G# t' `9 V6 {2 F8 x6 l

    [分享]插值软件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. & F+ b4 ~& C, q2 T% }) J
    2. /* TODO: Lagrange interpolating ' b9 `4 Y8 Z2 ]6 s9 U; \
    3. *
      , a9 h4 ?' y\" d: z2 @; a4 h# M
    4. * For example, if lg2.71 = 0.4330, lg2.72 = 0.4346, then lg2.718 = ?
      ! F1 q\" M& ^) \3 n
    5. * In this situation, it could be solved via lagrange interpolating; i: d( I% H* t0 H' {0 q1 E6 t) O
    6. *& Q1 x# {6 X! d6 R8 {; T( Z\" w4 J
    7. * */# c6 A$ h- O7 W/ `\" A4 Z
    8. 7 a! E1 e; S: o\" l- w+ y. D: F: h$ N
    9. #include <stdio.h>: p  @# N# V: T% q( f! P6 P0 C! ]
    10. #include <stdlib.h>
      # `. e2 [+ W5 ^, z% R1 ]6 S
    11. #include <string.h>* m& P4 R4 ^4 P' B& x

    12. 7 [2 m0 g* ]2 k0 R$ F
    13. #define DEBUG 0
      ; A2 N- x/ i& O0 G/ Z4 _' c' J# p5 v

    14. 6 R: J5 q\" }) D+ {1 h2 P) r
    15. static float m_p = 0.5635;
      0 J7 _7 e8 \6 D
    16. static char *m_xi = NULL;( h7 {. N4 j. a- c; h' v4 ^# p
    17. static char *m_yi = NULL;) U1 d7 I5 Z' w4 [
    18. static float m_arr[] = {};& B9 b\" [# ]! f6 r7 V
    19. static unsigned int m_n = 0;/ a! E2 m7 m) o9 v; s( f

    20. # d) s& d2 c& v5 A% m3 s
    21. static void m_lagrange_interpolating_usage();
      1 g2 o# Q1 c3 V; k
    22. static int m_lagrange_interpolating_set_n_arr();
      1 a( }5 c$ v7 ]  H  `6 B% n
    23. static float m_lagrange_interpolating();, r/ s! n3 b; C, q& l$ v

    24. 0 B  z6 B; H2 T' u  c; m+ X
    25. static void 9 ]* A1 G\" V: N- a
    26. m_lagrange_interpolating_usage()
      ! ^: Y( f( }5 d1 `
    27. {. ]  W# P& N# N6 G2 K, W6 U8 C
    28.   printf("Lagrange Interpolating Usage:\n");- u$ G8 z1 f2 B
    29.   printf("bin/li -p ** -x ** -y **\n");
      3 `, ~! H8 L9 v6 |5 P
    30.   printf("-p 0.5635\n");- @1 D6 K6 _5 B5 ^, w% J& c, l* M
    31.   printf("-x 0.56160,0.56280,0.56401,0.56521\n");- V( u/ F; \1 Q  G1 o7 Z
    32.   printf("-y 0.82741,0.82659,0.82577,0.82495\n");% k: Z8 f8 f; `! J- r
    33. }
      ! L! P1 [$ x/ I$ T

    34. 5 a4 |9 z2 }! G9 ]( r* n2 u/ Q
    35. static int , m; d% c% X% c0 ^  Z! j, `9 S$ E
    36. m_lagrange_interpolating_set_n_arr()
      , y/ j; O( p& Z! f4 J7 u* v* P/ W
    37. {
      5 c2 u/ G, P. U  a- U; m( r
    38.   int xi_n = 0;
      4 Y' U\" ~0 X; V0 a
    39.   int yi_n = 0;
      $ b& y; E( z, b8 i4 Q! k
    40.   int n = 0;) v  E5 k1 @/ @1 q. z/ J: F
    41.   char *token = NULL;
      2 F- I$ z$ r/ U8 M8 F1 G# \
    42.   const char *delim = ",";5 V: e\" e8 L- G: U! z# A( ^6 o. c

    43. 1 P* @; Z/ X* T' l6 `- r. _
    44.   token = strtok(m_xi, delim);
      \" q# t# c1 {. A# d% F
    45.   while (token)
      - K/ W\" c: J- j. e
    46.   {2 v/ Y( D; s% H/ ]% r
    47.     xi_n++;$ w* Y. l9 i* @1 L/ M% P$ [) t
    48.     n++;2 p% E+ p: ^5 G2 R) C\" D4 K) X0 r. @
    49.     m_arr[n] = (float) atof(token);
      / `* q* `; O  c* Q3 S5 H- F
    50.     token = strtok(NULL, delim);& F- O8 U/ h2 u) I4 j% N0 Z  s6 n
    51.   }
      - T9 N. C2 b4 I/ M4 |; h8 E3 S
    52. & X& z5 ~/ ^- J5 Y1 E; `( @, }9 z
    53.   token = strtok(m_yi, delim);
      ' H\" Y3 m  H; g' Q) d6 X  L
    54.   while (token)1 S0 ]9 F. `+ T1 T' V\" g2 V8 w$ x
    55.   {4 L* q9 [2 J7 X
    56.     yi_n++;  H0 V4 O0 i4 B1 k, R
    57.     n++;
      $ k  ]( O\" [  ^9 C/ `
    58.     m_arr[n] = (float) atof(token);
      # [' Y% c7 S& @* T' W- y( E' g
    59.     token = strtok(NULL, delim);) \, N/ s1 s1 I  O5 z
    60.   }
      ' j: ~! i# U2 l' K, @
    61.   
      9 l, P; A: P5 v( h5 Z7 Y
    62.   if (xi_n != yi_n) # l# F, h7 p( r
    63.   {
      2 J* z- j3 P$ C; j
    64.     return 0;8 ]4 K2 a0 ?: q# [0 m\" y/ I
    65.   }4 r. M5 ]7 e' r+ `7 q7 y- o/ d
    66. ) m$ c3 |2 t$ v: n: |4 N' f
    67.   m_n = xi_n = yi_n;  t; r6 S& d; R! P9 w9 D

    68. , A' p( [/ I4 _8 r5 }1 a
    69.   return 1;9 j  E  p( ?\" X$ z8 k8 R
    70. }1 K+ b1 A7 J# m# ?1 M+ K

    71. * K. _; M+ o! T; ?9 `, S6 I  s  k
    72. static float $ b: a) L) F8 w7 i
    73. m_lagrange_interpolating()
      # w+ i! w* {+ V) D% X
    74. {; x! n. f( P8 P/ \5 d. g, |% }
    75.   float l = 0.00000;
      \" L4 m2 l1 C8 D
    76.   float li;
      * P: [# g! `% T( t2 ~4 I
    77.   int i;' M' h7 K6 h+ K4 i* l
    78.   int j;5 y# r' k, @2 a. q# A: E
    79. + h3 M1 {7 m# p4 n0 a; {  O
    80. #if DEBUG6 I: [/ |( M- \9 r( |
    81.   printf("DEBUG at %d: enable debug mode\n", __LINE__);
      2 g\" r% C) A5 @$ n2 N9 B/ Z
    82.   unsigned int m_n = 3;
      % Q; N: X3 |\" z. g
    83.   float m_p = 0.5635;6 f7 R7 s$ V3 N$ c3 Z
    84.   float m_x[] = {0.56160, 0.56280, 0.56401, 0.56521};7 p9 b% t, K7 v1 K\" W8 q6 [4 m
    85.   float m_y[] = {0.82741, 0.82659, 0.82577, 0.82495};9 M0 e2 g2 b8 y5 k
    86.   
      6 Y3 M% d) X6 e( r. S# t. O
    87.   for (i = 0; i < m_n; i++)
      - @\" T9 B' V6 Q* e! O& I' z- x8 Q4 c
    88.   {1 @# i/ d# v) P' J1 [
    89.     li = 1.0000000;
      / I\" ]3 H9 n\" d; v. H9 V
    90.     for (j = 0; j < m_n; j++)
      6 `( s5 r  R1 k8 A; f: R
    91.     {' W% N# B7 b+ g, J, d
    92.       if (j != i)
        m6 j% o; P  A* f: f, b! P# U. U
    93.       {1 g5 G4 @  W- ?5 _
    94.         li = li * (m_p - m_x[j]) / (m_x[i] - m_x[j]);! T2 H) L# R: v5 l- Q. r
    95.       }
      . x& l2 }- M* D
    96.     }2 g, i7 ?6 L, D( p' {2 a
    97.     l = l + li * m_y[i];
      7 a2 X9 V3 u. Z+ {% e4 G: ]8 |( M
    98.   }- I! G8 R+ r9 W9 J* {' T7 }
    99. #else
      0 g; V6 U; i' z7 u( ]
    100.   if (!m_lagrange_interpolating_set_n_arr())
      \" y2 ~\" g  t\" m( \: p
    101.   {
      3 N7 J; F: j' l1 r6 [+ Q- n, H( z
    102.     printf("Error: xi and yi counter is diff\n");0 x& }\" |  o0 T: I
    103.    
      : ^5 M9 J! }4 o/ a: Z
    104.     return 0;
      3 H$ Y8 V9 w4 l
    105.   }
        n) {6 l! z# R  E2 a) \% r

    106. - r% X7 E1 Y; u+ @& x) Q
    107.   for (i = 0; i < m_n; i++)
      , D1 Q\" C+ k7 j6 p2 B
    108.   {
      ; s, ?3 P! e7 j6 E4 g& X* k
    109.     li = 1.0000000;
      \" }7 h, C2 N9 P2 Q* s
    110.     for (j = 0; j < m_n; j++) ' h, @/ [& @! I) e1 Y+ j5 y/ c6 w
    111.     {
      . y) g2 S* J: Q- t
    112.       if (j != i)
      6 @! O% L# p' p
    113.       {& @9 |2 L3 L* L3 w% K
    114.         li = li * (m_p - m_arr[j + 1]) / (m_arr[i + 1] - m_arr[j + 1]);8 {# j+ q2 F2 w  i' a- l
    115.       }/ @3 _8 o+ S' J* I4 B: z
    116.     }
      4 i& {2 X8 Z  Z! j8 c2 O: F
    117.     l = l + li * m_arr[i + m_n + 1];% r1 J6 U$ ]1 b0 x
    118.   }
      ( T4 N3 o' Q) e
    119. #endif
      # n% H+ I- h9 g

    120. / z0 N1 {5 t0 W4 t$ u, x
    121.   return l;7 h( Z\" @- Y  A
    122. }7 t9 h( @, ~. x+ W6 z4 _  s

    123. & u- _\" L$ G! k, _  q
    124. int * F2 H! p6 A) ^) _. [8 C
    125. main(int argc, char **argv)
      9 ~0 O8 v0 x2 n* g3 L( k
    126. {
      5 g  L% y( Q) |2 [$ ?
    127.   int c;) G5 \: I, h* |\" [  w$ t\" y
    128.   extern char *optarg;
      ! i& ~4 B/ ^/ A6 J* _
    129.   float res;
      $ M\" Y, W/ g# o7 ?0 a  J, L( @! A\" R
    130. \" o: ~( m9 O# D; R2 y5 ^$ Y
    131.   if (argc < 2) 5 M. n  @$ ~- F5 s
    132.   {
      - g1 A: ]  C4 n
    133.     m_lagrange_interpolating_usage();) L  S5 m4 |2 ~; l6 _; H# T
    134.    
      # l( `- A; K- z1 a- _\" M
    135.     return -1;$ A) O/ E5 z2 C3 `
    136.   }2 \. N1 L8 Y! T1 W  K
    137. . f% o  J+ N3 u( k9 ]: d
    138.   while ((c = getopt(argc, argv, "p:x:y:")) != -1)
      ( c) f* G; A- B5 U) b  ]& G% Q
    139.   {# n7 F- p5 s1 @: V: b* U
    140.     switch (c)
      1 a! H; y7 }( f! ?
    141.     {4 {/ t* d  U0 m% K: L
    142.       case 'p':
      ! W\" [6 O& v- \; ?: H8 m' u. X. M
    143.               m_p = (float) atof(optarg);' [1 L0 g+ K# s9 w) S' \
    144.       case 'x':# q, x5 r% m\" Z8 u: v% R1 m% D1 U
    145.         m_xi = optarg;$ f% x) e0 ?2 ^' ~& d
    146.         break;
      0 ?- t' _) w! w. p
    147.       case 'y':
      4 F4 X  v9 f1 y2 D
    148.         m_yi = optarg;
      7 Y+ y& d1 s! B
    149.         break;
      0 K% y3 ^! ^& l9 V# _
    150.     }
      * k\" L: a* p( S  t3 M. K! T
    151.   }
      # i4 \. p, x\" g1 c6 M3 b
    152.   C4 {* n. R  H
    153.   res = m_lagrange_interpolating();, v\" A\" S3 m8 d4 [# \
    154.   printf("Lagrange interpolating with %.4f result is %.7f\n", m_p, res);1 Z1 S) [7 g: t5 b) r; t* L/ X
    155.   
      % O4 ^; \2 c% A
    156.   return 0;
      4 y4 B( a) L. [2 D
    157. }! Z: r7 l# b- j! O  k3 }- }- M
    复制代码
    回复

    使用道具 举报

    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%

    该用户从未签到

    自我介绍
    好好学习
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册地址

    fastpost qq
    收缩
    • 电话咨询

    • 04714969085

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2026-11-1 04:13 , Processed in 0.279064 second(s), 105 queries .

    回顶部