QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 22247|回复: 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自定义插值函数插值计算数值计算" G0 w, `* p! f- x- z6 Z 版本号: 04y09m28 % A, n7 d' ?: {+ X! A分类: 工程设计应用! m: p* @7 g$ S v& v6 {7 {9 @ 性质: 免费软件 * `6 N/ A5 ^, b" ?: ]使用说明:

    $ x1 N1 F8 [3 R) Y2 o, }5 e

    人们对EXCEL普遍熟悉的功能是表图的处理,不太知道其在工程计算(如锅炉设计计算)中的应用。复杂的工程计算常常用专业编程语言(Fortran、C、Pascal 等)来编制计算程序解决,用专业编程语言编制工程计算程序往往有下面二个缺点:0 c6 X1 ^+ [6 p ; \( R7 N e7 s* H! H$ A# I 1) 编程语言专业性强,一般工程技术人员难以掌握,由这些专业编程语言编制的计算应用程序的维护、修改、升级都比较困难。

    / Z) _1 t3 l# H( O

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

    " n/ b1 Y& X* h8 v& f

    EXCEL每一个单元格就是一个电子表格,很容易进行一般的加、减、乘、除、乘方、开方,而三角函数、指数函数在EXCEL中可以直接引用内部函数。用EXCEL编制一般的工程计算程序还需解决的有以下两个问题:(1)循环计算,(2)表、单曲线、曲线组的查找(如:锅炉设计计算中的焓值)。对于问题(1)循环计算,EXCEL在工具菜单中提供了两个命令:单变量求解和规划求解,利用这两条命令很容易解决问题(1)。对于问题(2)表、曲线的查找,EXCEL没有提供现成的函数,但也可用VLOOKUP、MATCH、IF、OFFSET等函数的组合勉强近视解决,本文重点介绍表、曲线的查找自定义函数的定义及使用。 " [; ]4 l$ X" y) z 3 N) K0 K5 w/ p! n& x 为了更好地解决曲线查找的问题,应用C++程序设计语言,用拉格朗日插值计算法在EXCEL中建立了自定义函数,单曲线插值函数TWLQ(变量,"带路径的保存数据的文件名"),曲线组插值函数THLQ(变量1,变量2,"带路径的保存数据的文件名")。单曲线插值函数、曲线组插值函数的"带路径的保存数据的文件"包含着特定对映表、曲线的信息和计算精度的要求 (文件为Notepad编辑的txt文件) 。 9 I" Q# p- U. X7 q单曲线lagrange插值函数:double twlq(double x,char* filename); & ~, |. T F( c# f6 M2 e1 y# Z; E double twlx(double q,char* filename);% j+ C. }( i& `# C r! W3 s 曲线组lagrange插值函数:6 f( S- H A; [6 D- R; b$ v double thlq(double x,double y,char* filename);& n* R& b2 s. t* U$ N3 j double thlx(double y,double q,char* filename);' D0 u4 G. c" G# Y y* ? double thly(double x,double q,char* filename);。

    * g/ m' V% H k6 ?- d% v' F+ y8 t

    例:单曲线插值函数 "带路径的保存数据的文件"结构如下:0 l- m' l6 o/ l+ F+ { @ Description @ 7 c6 k2 ^4 S @+ d: x n, nsel;; _9 ?! r+ q A: C `* r* D6 s0 W/ u x[0],x[1], x[2],··, x[n-2],x[n-1]; ( H3 r% [& p* q4 D* @6 F+ I* o3 {& Cq[0],q[1], q[2],··, q[n-2],q[n-1];' Z0 t6 K' ?2 ?7 ^ MinX=0.7,MaxX=0.9,OverRangeAlm=1,X=电压,XUnit=mv,Q=电流,QUnit=mA

    0 K7 `; |2 J$ m- e# |

    注解: * e5 j( R6 F# `2 H Description:用户自定义描述字符串(Description中不可有@符号);0 u2 t; B3 A+ q5 A0 k n: 总插值点个数; " d/ k; M8 {5 K) x nsel:实际参与插值计算的插值点个数; $ ^9 k% i: t5 ~1 c. i MinX=0.7,MaxX=0.9 取值范围; , g7 [2 W2 m* o OverRangeAlm=1 越限报警 1:报, 0:不报;# k4 W: Y% D' T+ Y& N- T X=电压,XUnit=mv,变量名称,单位。

    ' v! W/ p8 |/ L4 h

    ****结论: / ?, H- |3 f0 C: d, T2 V l)图形化界面的插值函数数据文件生成器 LCZMaker 方便快捷生成单曲线或曲线组插值函数数据文件。) J! x. q" d& r! d! ?6 Z. U" o 2)应用EXCEL自定义插值函数,在EXCEL中进行工程计算编程极为便利,比专业编程语言程序设计更易学易用、直观明了,用EXCEL编制的工程计算应用程序更易维护、修改、升级。 . U3 D) S, D+ \2 R 3) EXCEL本身长于表格制作,在EXCEL中进行工程计算编程人机界面友好,输入前、输出后处理方便简单。 ! f4 U* U7 i& Y5 W% o& q u3 i+ Y 4)在某大型锅炉厂电站锅炉性能设计计算中已显神力。

    , G9 d! O5 J7 C

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

    & E0 t5 s9 i$ V

    [分享]插值软件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. ! W1 @\" H0 s& B- L1 m
    2. /* TODO: Lagrange interpolating
      - b! h6 o. i# \6 i( l5 u
    3. *
      5 H7 i6 {  e9 V  U: R0 Y% {6 z$ i
    4. * For example, if lg2.71 = 0.4330, lg2.72 = 0.4346, then lg2.718 = ?+ G1 \! p( g0 Y* U
    5. * In this situation, it could be solved via lagrange interpolating
      4 I* z\" U4 D- c
    6. *
      $ n$ q- Q3 |/ G/ K0 @8 e8 i  k
    7. * */
      , p$ C  ]& x& _+ J4 ?
    8.   g4 h- [+ s6 q  B' r$ X2 h
    9. #include <stdio.h>
      , k% q5 q- W# n/ T: i; P/ {  O
    10. #include <stdlib.h>9 [. O. V4 |8 }5 \7 s0 z; b* Q
    11. #include <string.h>' [  l# {! V. G/ J& @\" o

    12. 0 d* w  ~+ C+ B\" j$ I* U
    13. #define DEBUG 0( E8 p9 G1 d) g* P2 z
    14. , l1 `+ Y0 T/ I5 N$ H
    15. static float m_p = 0.5635;
      # K, @/ g) P; `) v/ f
    16. static char *m_xi = NULL;
      ( `4 {; h5 c! R+ {* W$ Y
    17. static char *m_yi = NULL;
      % |, c0 g9 B+ J- _
    18. static float m_arr[] = {};
      0 m# F9 f% |1 Z5 \- C, e, U
    19. static unsigned int m_n = 0;& E) t) _9 p7 @. [6 R# U- b

    20. ( M\" ^\" m- R* \) I$ p
    21. static void m_lagrange_interpolating_usage();. u) ]/ j7 G% |
    22. static int m_lagrange_interpolating_set_n_arr();
      ; ?2 y8 n! {& z) e; j( _0 ^
    23. static float m_lagrange_interpolating();+ y, g- @5 S/ i5 r5 F4 V) P\" c  D

    24. ) Y\" n2 b6 W6 }$ s4 e/ j
    25. static void ( _- D( }+ |# A1 [0 S6 z
    26. m_lagrange_interpolating_usage()
      2 f0 f# u$ ^; u( T
    27. {
      + K( l7 ?( Y# E! t0 Q. F
    28.   printf("Lagrange Interpolating Usage:\n");
      - f. r$ h0 T5 j, ?/ m( Y( s
    29.   printf("bin/li -p ** -x ** -y **\n");( c. D0 K' Q( z1 a
    30.   printf("-p 0.5635\n");1 M1 }! c& X! a& i& S- G
    31.   printf("-x 0.56160,0.56280,0.56401,0.56521\n");1 W\" d. G1 f* W9 H2 |( e0 X9 |
    32.   printf("-y 0.82741,0.82659,0.82577,0.82495\n");
      % g' z: v5 A+ C$ I0 S\" a6 \
    33. }\" J6 }& M, P3 N) D, Z& S

    34. 0 M) R5 {7 U$ n5 M
    35. static int 6 ]$ j0 t6 Z% O+ e  s' H# D
    36. m_lagrange_interpolating_set_n_arr() 5 c8 a# z' x8 `
    37. {' @- o) I6 Q5 G$ `6 @9 g9 O, }2 k
    38.   int xi_n = 0;: h( P3 {( |' M! [- N
    39.   int yi_n = 0;- d. p9 k3 p( G6 Y' B* U9 f) O3 m
    40.   int n = 0;. g* t) [6 [/ w- ~. T: n3 e
    41.   char *token = NULL;0 v) c! k; u2 {! B
    42.   const char *delim = ",";
      ! d- _9 m4 _# h' [+ _% w% C6 |
    43. 6 @4 F# ?( K4 ^- L, a2 D# ?* s
    44.   token = strtok(m_xi, delim);
      5 A& z  x. {3 X
    45.   while (token)
      + E* m) K/ D- i4 Z4 O3 m: v2 w6 X
    46.   {1 g! t5 x+ r& e
    47.     xi_n++;- P+ ]9 y) b8 W, O7 P6 x
    48.     n++;
      ( ~4 `. ~' ^* A5 L; ^3 |% r
    49.     m_arr[n] = (float) atof(token);
      * ?8 w$ |5 i4 k+ @: P! d
    50.     token = strtok(NULL, delim);2 y' t$ B- N  I8 Z% A# h
    51.   }
      1 R( N( o# R. M* g( C
    52. 9 ]7 u9 ]: O; l6 ?0 F\" y
    53.   token = strtok(m_yi, delim);: b3 c- @2 M# b/ x, g
    54.   while (token)
      , V& c6 e: p5 f' [
    55.   {* z3 ]& M\" G# u, s( b; [
    56.     yi_n++;4 ^, v* O\" T4 I' Q9 L; e
    57.     n++;1 S% R. r1 X$ W
    58.     m_arr[n] = (float) atof(token);
      0 V\" I2 x1 A3 N* g- T
    59.     token = strtok(NULL, delim);
      ) R1 _. R. i  ]! V4 X  a' L( ^
    60.   }
      & s/ B2 Y2 g3 A\" ~9 ]& l3 [, }+ e
    61.   \" K: n/ v# k- O/ G0 V/ i
    62.   if (xi_n != yi_n) $ m5 z, ?- q# S9 A# d2 Z. G. D! |
    63.   {
      2 ^4 [  A$ G\" u; p% _7 z! X
    64.     return 0;5 u+ R( e& w& a& q
    65.   }7 X3 @* t1 m, L9 l6 J3 l

    66. ) _  p% o( s- |7 Q$ A0 c8 e+ |: p
    67.   m_n = xi_n = yi_n;3 `* l/ \8 M9 y# |- }2 R

    68. / o  W. U7 ^4 \  a
    69.   return 1;
      ; k\" |4 B7 p2 J
    70. }
      4 j+ Z% r+ `: Y
    71. ! W8 f1 Y6 v7 p, D/ E% ^
    72. static float
      + R0 [3 E$ m% l5 G. K/ t
    73. m_lagrange_interpolating() 7 a9 S$ B/ z' F1 p\" p
    74. {
      - N6 t7 H: ]8 `, @4 Z' V\" |\" o& n) `
    75.   float l = 0.00000;0 c2 H3 I# i+ ~
    76.   float li;
      % E. h9 ]* V  r. {. |7 S1 p. v
    77.   int i;
      / D5 M/ _' I% r# o, z- j
    78.   int j;4 i) I7 d( D' X/ a2 h; l4 }6 B

    79. , o7 A. b! b/ h5 S! x  Z9 x: d
    80. #if DEBUG# e# |( }% L( _. J  R. X4 a
    81.   printf("DEBUG at %d: enable debug mode\n", __LINE__);
      - Z3 m7 V: t$ y6 D/ W
    82.   unsigned int m_n = 3;
      - t6 ~5 d6 N& c4 V* f. B0 K! v
    83.   float m_p = 0.5635;, e& |! o* G' Z& o& T& j' m: v8 v) }
    84.   float m_x[] = {0.56160, 0.56280, 0.56401, 0.56521};
      6 b0 s5 u2 ~0 I$ p
    85.   float m_y[] = {0.82741, 0.82659, 0.82577, 0.82495};; K$ ]+ C( F3 ?2 N! {* C
    86.   
      1 m: D- s- D& l\" t2 l: R! U1 W
    87.   for (i = 0; i < m_n; i++)
      . T/ U: y: R: d
    88.   {1 C0 b/ y0 n( U* `6 O# n
    89.     li = 1.0000000;
      % x; ^; E2 }' U. m; q
    90.     for (j = 0; j < m_n; j++)
      ( P( H( G0 `; y! \
    91.     {; N( b4 a. J0 U
    92.       if (j != i)
      $ X( U- D  M9 g( A9 w1 Q6 _8 c% [; ^
    93.       {
      6 k# ^' N  n' H
    94.         li = li * (m_p - m_x[j]) / (m_x[i] - m_x[j]);
      & s: Q% G* ^3 V' `* ]\" E  V
    95.       }
      4 O6 l/ S/ [. p$ Y( N$ p* V
    96.     }& F9 C& |8 k6 w- H; V8 p
    97.     l = l + li * m_y[i];
      2 l6 D1 Y4 y6 _% L* m# o+ B\" R: V+ V
    98.   }
      ) Y  U; M2 H% A8 Q; O
    99. #else! r1 n8 r- J8 |* P8 W
    100.   if (!m_lagrange_interpolating_set_n_arr()) ' E2 D) ^7 A5 t. k8 m
    101.   {
      ! Y0 _0 a4 ]\" I
    102.     printf("Error: xi and yi counter is diff\n");
      4 g- U- ]6 e: m4 A\" W
    103.     \" b0 e, K2 t\" j
    104.     return 0;
      3 |- R- b; Y* }* W
    105.   }1 O/ {/ @/ g% z1 G' i: ?, T! Y

    106. ! m# H) q/ U/ n, f( s% H3 D\" a
    107.   for (i = 0; i < m_n; i++) ' _, Q$ k, S- K! l
    108.   {0 S* y3 C8 D9 t1 n: [3 Q# Q' `
    109.     li = 1.0000000;
      ! O) ^& L0 |8 Z
    110.     for (j = 0; j < m_n; j++)
      ; ?7 J$ ]/ H9 W4 ^) F- T
    111.     {
      1 X% `; Z& E, t* D* T
    112.       if (j != i) 7 x6 U& G6 w3 F, m* {$ `5 i* P
    113.       {! Z; ]( ~5 y4 H7 U# ^; I
    114.         li = li * (m_p - m_arr[j + 1]) / (m_arr[i + 1] - m_arr[j + 1]);( S, D9 ~& p' R6 e6 `) Y: k
    115.       }
      & d. }- _' A! R1 ~
    116.     }/ y\" V9 X. V8 }* P* M. {- r
    117.     l = l + li * m_arr[i + m_n + 1];
      ! F) ]. W) V, a8 i
    118.   }# I/ @2 ~2 J9 n% e% m6 u
    119. #endif& C# {( R2 @2 l2 L) Y& q; a
    120. : i& F; y  x$ D# l
    121.   return l;+ l& @( i& l4 G$ |# ]5 v2 f
    122. }
      ) A; _/ C( _3 l

    123. 1 s7 \- m1 @  D! O\" }7 r2 O
    124. int
      % y3 O( j  K7 d; s) c. ]\" H
    125. main(int argc, char **argv) ! W* j. ]: @! j+ `+ k3 b
    126. {0 \( |1 ]4 X. V- v. i+ b
    127.   int c;* J. R\" \6 Z) s8 Y
    128.   extern char *optarg;2 w* \: f3 Q\" k% v$ K9 @
    129.   float res;; b9 L. D# @! r6 b& R

    130. 6 b7 j$ E, F# A. P$ |, R6 H6 K
    131.   if (argc < 2) ( T5 q: K* I4 H1 J, v4 @; j
    132.   {9 l- [( Z! I4 ?0 F) w# m+ U3 J
    133.     m_lagrange_interpolating_usage();3 b$ }( y) I. \
    134.    
      & x; f' {8 l. p: g\" f' B
    135.     return -1;
      8 s. \/ z' b  M- i, T7 ~
    136.   }0 R: ~\" D7 D7 V1 O9 S
    137. % K7 M' P( i+ l* ~9 r3 b( a
    138.   while ((c = getopt(argc, argv, "p:x:y:")) != -1)
        R8 i  _$ \/ |
    139.   {# H, W\" s: k4 }$ ~/ q& `3 D. J
    140.     switch (c) 5 Q% M8 f6 E) |% W, J1 ?
    141.     {
      ; v$ t3 F* o& v5 X
    142.       case 'p':$ r% Q3 u& [+ K
    143.               m_p = (float) atof(optarg);
      9 }* U1 U! I8 K% @1 b0 d
    144.       case 'x':
      \" C& P) q2 G4 \2 D
    145.         m_xi = optarg;
      , \9 g8 \. J) d2 j. E
    146.         break;\" O! g2 U' ]# J0 Q+ m( E4 R, ^. U/ S
    147.       case 'y':
      \" E5 S) E! p$ Q) n& W
    148.         m_yi = optarg;% t1 P  F: J. `; J
    149.         break;
      5 i& A& O  {( j\" O
    150.     }
      , z6 _; ], W! M  \, [/ k; ]/ y
    151.   }
      \" u- K6 P# t7 F) ^/ o# B
    152. 6 z* m\" Y\" [4 U( h, F
    153.   res = m_lagrange_interpolating();\" t: e2 }+ P$ m9 @, m
    154.   printf("Lagrange interpolating with %.4f result is %.7f\n", m_p, res);5 p- w. Z, z; b
    155.   
      5 s3 N5 A0 o4 O6 j. N8 x% d7 c% e3 ~
    156.   return 0;
      1 T3 s* d2 f, m2 t: R0 k( f  R
    157. }3 w; |% X- g& {& b$ m* H2 d
    复制代码
    回复

    使用道具 举报

    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-5-28 05:25 , Processed in 0.542428 second(s), 104 queries .

    回顶部