QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 22243|回复: 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 S* X' Y8 `. J版本号: 04y09m289 p/ _2 X+ q P) V# b! n 分类: 工程设计应用( X$ ~( { A9 o 性质: 免费软件6 c1 x4 K, K9 i- r2 P% _8 B 使用说明:

    ; Y" k0 \- m1 `. t x

    人们对EXCEL普遍熟悉的功能是表图的处理,不太知道其在工程计算(如锅炉设计计算)中的应用。复杂的工程计算常常用专业编程语言(Fortran、C、Pascal 等)来编制计算程序解决,用专业编程语言编制工程计算程序往往有下面二个缺点:, m, V5 r' m$ h+ t. A+ j0 c7 M* a ) N4 h5 f. \9 ^ 1) 编程语言专业性强,一般工程技术人员难以掌握,由这些专业编程语言编制的计算应用程序的维护、修改、升级都比较困难。

    ( j v, s! C. s+ A

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

    : s& `9 P3 s3 v6 e

    EXCEL每一个单元格就是一个电子表格,很容易进行一般的加、减、乘、除、乘方、开方,而三角函数、指数函数在EXCEL中可以直接引用内部函数。用EXCEL编制一般的工程计算程序还需解决的有以下两个问题:(1)循环计算,(2)表、单曲线、曲线组的查找(如:锅炉设计计算中的焓值)。对于问题(1)循环计算,EXCEL在工具菜单中提供了两个命令:单变量求解和规划求解,利用这两条命令很容易解决问题(1)。对于问题(2)表、曲线的查找,EXCEL没有提供现成的函数,但也可用VLOOKUP、MATCH、IF、OFFSET等函数的组合勉强近视解决,本文重点介绍表、曲线的查找自定义函数的定义及使用。 ) u9 S8 Y! q* w4 r7 w * V$ D9 e+ J0 H 为了更好地解决曲线查找的问题,应用C++程序设计语言,用拉格朗日插值计算法在EXCEL中建立了自定义函数,单曲线插值函数TWLQ(变量,"带路径的保存数据的文件名"),曲线组插值函数THLQ(变量1,变量2,"带路径的保存数据的文件名")。单曲线插值函数、曲线组插值函数的"带路径的保存数据的文件"包含着特定对映表、曲线的信息和计算精度的要求 (文件为Notepad编辑的txt文件) 。 2 r) V( j% g2 V9 [0 ]" v单曲线lagrange插值函数:double twlq(double x,char* filename);; e, i! f6 R" C8 N double twlx(double q,char* filename); 6 O) D+ b1 V& K1 l曲线组lagrange插值函数: ) O$ f. }, b# {* S, q% N# w) W double thlq(double x,double y,char* filename); 2 c6 X3 \8 y( c5 g5 F1 Q double thlx(double y,double q,char* filename); 3 h5 K7 T# q8 d, Y* m double thly(double x,double q,char* filename);。

    * y( {6 ^; G/ W7 U; c9 ^1 n# B2 t4 ]

    例:单曲线插值函数 "带路径的保存数据的文件"结构如下:0 p! V, z; v' _- i |4 ] @ Description @ $ G0 v& O) y6 E8 q n, nsel; 2 {: p, a! H* r! fx[0],x[1], x[2],··, x[n-2],x[n-1]; % e# {/ g1 w0 e' V2 x h$ Uq[0],q[1], q[2],··, q[n-2],q[n-1]; 6 k5 G6 d) l- s' T" OMinX=0.7,MaxX=0.9,OverRangeAlm=1,X=电压,XUnit=mv,Q=电流,QUnit=mA

    ( O/ f& T8 B% c8 Y" b% A0 k% j

    注解: ' w% f# ?1 T6 Z Description:用户自定义描述字符串(Description中不可有@符号);0 a7 B2 Q2 Y; H. a& D# u! ^; y n: 总插值点个数;0 y; {( y$ `9 q! Q% z8 { nsel:实际参与插值计算的插值点个数;9 g' \9 N7 I9 f) { d7 Y, c MinX=0.7,MaxX=0.9 取值范围; # V) [# x' o" n0 Y OverRangeAlm=1 越限报警 1:报, 0:不报;$ _: l5 y% N# x/ ~! a: }$ O0 X v. s) _* c X=电压,XUnit=mv,变量名称,单位。

    1 W6 \/ a* B. n$ R6 K

    ****结论:# f# E) O! j v7 g7 P! R, R4 a l)图形化界面的插值函数数据文件生成器 LCZMaker 方便快捷生成单曲线或曲线组插值函数数据文件。 . ^) E1 Q2 ~6 |3 e 2)应用EXCEL自定义插值函数,在EXCEL中进行工程计算编程极为便利,比专业编程语言程序设计更易学易用、直观明了,用EXCEL编制的工程计算应用程序更易维护、修改、升级。 ! t- R7 B' R) A& M* w2 b0 r# F# W8 | 3) EXCEL本身长于表格制作,在EXCEL中进行工程计算编程人机界面友好,输入前、输出后处理方便简单。: R6 P9 O( }! u* R: I) N 4)在某大型锅炉厂电站锅炉性能设计计算中已显神力。

    ( O0 e5 }. [6 _% t; r. v* x3 d

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

    j% }+ a0 {5 O: W% Z2 R% ]

    [分享]插值软件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. / F7 x( }! ^4 f6 W. w0 B
    2. /* TODO: Lagrange interpolating
      % H3 D; `4 X( R0 M
    3. *
      \" g: q& m; `- F& F9 d
    4. * For example, if lg2.71 = 0.4330, lg2.72 = 0.4346, then lg2.718 = ?
      0 |  L/ o( x. f' b. m
    5. * In this situation, it could be solved via lagrange interpolating\" {$ V% @0 \; w8 a9 m
    6. *$ O: N9 t! e7 y  Z0 _: V' G! F
    7. * */* f/ @: h0 y! r2 s8 ]' k
    8. 9 w9 o7 L+ O$ W% T# U
    9. #include <stdio.h>9 ]& g# P9 J7 O
    10. #include <stdlib.h>& u2 ~- _* K: }+ |# N8 ~6 C( ]; Y1 o
    11. #include <string.h>% ]' s  V5 k/ `\" V0 j* O
    12. $ \7 D- E4 `* x9 v; r
    13. #define DEBUG 0
      6 m. W3 J\" Y7 m

    14. $ b1 C9 K2 C- T+ ^4 ?
    15. static float m_p = 0.5635;2 Y$ k  c$ ~- F* e% p1 R/ _
    16. static char *m_xi = NULL;
      ! b( ~$ \/ w6 O! Y6 i9 c
    17. static char *m_yi = NULL;/ Y\" d$ H8 y* y% n6 e
    18. static float m_arr[] = {};
      / P- [4 V/ D4 r3 M% B. E
    19. static unsigned int m_n = 0;# P% i) D2 |! p; P
    20. , M: c0 s& ^# s- L& I# S3 h
    21. static void m_lagrange_interpolating_usage();
      7 z( e, q& f9 B% m- @$ P
    22. static int m_lagrange_interpolating_set_n_arr();
      * A1 ]$ v: l( Q9 @) i7 b\" t! d
    23. static float m_lagrange_interpolating();' {2 A; N' ], B/ v$ R* i

    24. ) Z8 y$ S7 g7 [. f& ~! `5 j# s% _
    25. static void # Z8 }& E8 @: r# f5 {# c+ {
    26. m_lagrange_interpolating_usage()
      6 W5 G& J& W% u
    27. {
      ; A( M, ?( {- P' c* ^( M; R
    28.   printf("Lagrange Interpolating Usage:\n");# c) G( c/ B, K( B( _
    29.   printf("bin/li -p ** -x ** -y **\n");
      ) t\" ~4 e; V* D4 c, g. q2 f
    30.   printf("-p 0.5635\n");; F; P  O1 \0 F0 ^% X
    31.   printf("-x 0.56160,0.56280,0.56401,0.56521\n");
      , \  u# p6 z+ g! K  m! X! l
    32.   printf("-y 0.82741,0.82659,0.82577,0.82495\n");
      $ k; g4 E& W8 _0 }% |
    33. }
      ' r( x5 n0 z# T0 J
    34. , s/ B9 K9 T5 V6 i5 I; R/ Z
    35. static int
      , X  ^3 c0 {: d  d' u6 F
    36. m_lagrange_interpolating_set_n_arr() + {9 P) F9 u+ r8 M& M& O  w. k6 H\" R
    37. {5 ?8 r8 b- N0 N; s  A: r
    38.   int xi_n = 0;
      - m8 p- s% A+ p9 i3 `& ?
    39.   int yi_n = 0;
      / m; O9 y$ u- D: {9 _
    40.   int n = 0;
      4 @+ X8 w' J8 n! v+ ], x
    41.   char *token = NULL;7 f4 d7 `; x, w+ l8 [
    42.   const char *delim = ",";: p: D' ^+ _3 i# U4 L

    43. - Z  k) f4 A( F' I7 Q0 U
    44.   token = strtok(m_xi, delim);2 b) t. @' ^- m; {  W5 k
    45.   while (token)\" U5 P\" T' _5 W
    46.   {
      \" E* y: y- a. r\" w9 u: l
    47.     xi_n++;
      * t' q9 q3 v* @2 ]
    48.     n++;7 q( O5 a) |5 s6 Z6 d+ z
    49.     m_arr[n] = (float) atof(token);
      ' {, _4 F% l3 C) B5 ~
    50.     token = strtok(NULL, delim);
      & W8 d+ z- `4 \7 R1 r' h
    51.   }
      $ e: ]& r$ W; L/ j4 o) w\" E

    52.   [; E# s. u; b) g( O: a/ y
    53.   token = strtok(m_yi, delim);2 t+ k# _. X. W5 x* v+ u  t- z* R+ t- S
    54.   while (token)$ K8 z& w; ^4 W: P3 j
    55.   {' j* a8 D0 s. K
    56.     yi_n++;
      \" P% c4 U( ~# n- q' t
    57.     n++;- e0 y( \  k' A
    58.     m_arr[n] = (float) atof(token);9 h5 j4 Q8 L. T% `6 Y) i
    59.     token = strtok(NULL, delim);
        ^1 ^, e# D( _1 q/ l\" x% L; H
    60.   }5 \; T\" Y+ b+ C: g& g; L4 Q
    61.   
      ; _8 l( k  B6 b/ i
    62.   if (xi_n != yi_n) ' X2 {5 x5 z6 P. T8 }8 ^
    63.   {1 y\" W. v: I2 L5 A
    64.     return 0;
      \" E/ e7 ?4 Y6 e: [
    65.   }\" E% l) d; Y1 J5 H
    66. , n$ I4 y+ H% A: L2 y7 F3 Z
    67.   m_n = xi_n = yi_n;
      ) [* `9 ]$ ]- B* |  l, D
    68. # X0 N  M8 u* X& d
    69.   return 1;8 s. A( E, \* A
    70. }' |: n/ t. p0 V5 s) Q. y

    71. \" s- z1 f, N$ H, H
    72. static float
      5 E! k( Q5 H8 T0 l2 @7 h
    73. m_lagrange_interpolating() + ^* u/ |8 ~8 _8 A3 e; Y
    74. {
      7 C& r0 {  r\" S. J# D3 l, [
    75.   float l = 0.00000;9 F1 l4 ]# u  A: A. r; E
    76.   float li;
      ) v0 n1 P) _2 W, ^
    77.   int i;0 ^. g7 A- A5 V2 t4 f: s3 u9 H$ `
    78.   int j;
      # G! A9 P3 n& t\" E' M
    79. ! l: ^& o% g( T( ]
    80. #if DEBUG6 M. P8 F) P! W# f% l/ |
    81.   printf("DEBUG at %d: enable debug mode\n", __LINE__);
      , b7 ~4 `8 {! f( H7 T8 `+ B) E  {
    82.   unsigned int m_n = 3;$ S, h$ H9 }  [0 Q0 R' C) g
    83.   float m_p = 0.5635;
      # G4 i* t7 U7 s+ p
    84.   float m_x[] = {0.56160, 0.56280, 0.56401, 0.56521};
      6 o- }5 K$ z% }' A/ i; n
    85.   float m_y[] = {0.82741, 0.82659, 0.82577, 0.82495};
      ; ~0 l5 K5 h2 H\" ?, U# \0 m
    86.   ! Y& @/ |\" H  ?! ~
    87.   for (i = 0; i < m_n; i++). a; g; M' C/ x+ p# t0 ^
    88.   {$ u. U\" M; \1 x  M
    89.     li = 1.0000000;
      3 a4 B$ T8 ^# j3 t0 `. ?& a
    90.     for (j = 0; j < m_n; j++)
      , `# o: R2 o2 _8 G9 b
    91.     {
      ! B1 a* Z. j. h6 Q
    92.       if (j != i)
      8 Q9 U' Q7 v0 p2 P
    93.       {* I9 i; ]3 h' r) S. ~
    94.         li = li * (m_p - m_x[j]) / (m_x[i] - m_x[j]);
      : g% T, [5 L4 y\" Y
    95.       }2 Q. |9 W) K6 ^5 i
    96.     }
      5 }$ K6 D$ u2 w4 j* O$ U
    97.     l = l + li * m_y[i];
      + L- h, z' N3 z. g6 i) v! E
    98.   }  `6 G' ?; _) D7 i! w5 I
    99. #else: M' A! O1 f  ]! |' N) p% b
    100.   if (!m_lagrange_interpolating_set_n_arr())
      ' p, X. X* i/ G9 Q
    101.   {# r# m+ O3 D. k- e; Q7 O' P9 E! T
    102.     printf("Error: xi and yi counter is diff\n");6 R% D- O0 r- c2 c$ W* m2 Q; D
    103.     9 K8 m# C1 K% W. h. ~/ D
    104.     return 0;# p1 ^+ o- W9 Q\" G3 ^4 |+ Z
    105.   }9 m  M6 M7 q$ c& z8 o! [

    106. 5 D+ S8 F2 ]: h
    107.   for (i = 0; i < m_n; i++)
      : T# O4 m, A! E; r1 F' _4 J& `
    108.   {& s& |8 ?$ }4 D( _9 ]
    109.     li = 1.0000000;8 v) u0 y3 h- H6 u# I\" z- N
    110.     for (j = 0; j < m_n; j++) 3 o3 w\" A5 b4 I; K) y9 ^* Y
    111.     {
      $ ?\" O  Z+ O6 j; H; f7 H
    112.       if (j != i)
      ! S, Y/ {; c5 c# D) i( V. h; q( h
    113.       {
      \" E- m$ F; r( a0 P. {7 H5 j  p
    114.         li = li * (m_p - m_arr[j + 1]) / (m_arr[i + 1] - m_arr[j + 1]);
      7 P8 x& v- \+ g, K
    115.       }' Y\" K: ^* B& X, F4 e& P
    116.     }6 N; X\" s6 F  c0 x
    117.     l = l + li * m_arr[i + m_n + 1];- P- q1 `/ m: W
    118.   }
      4 j/ t/ l% u& A  Z1 P
    119. #endif* c7 I. F0 }+ X' c
    120. - Z! G' _: S9 y' t5 s
    121.   return l;
      ; s  u\" R, b1 d# I& U2 ^, f
    122. }2 m6 }, L0 }/ H( ^: L; k; h. r+ k

    123. , M% f* c3 W! l5 c\" o9 d& F/ ?
    124. int ( m$ }7 A' T' g& y5 P# g! m: ?
    125. main(int argc, char **argv) 5 i+ f# v) J3 D/ }' q
    126. {
      ' n% o: @* l4 }
    127.   int c;* W7 ~% N, G) g3 u' B3 Z/ {) C
    128.   extern char *optarg;+ a5 Y  D  b$ i& ~0 g$ i1 Y
    129.   float res;5 e0 m\" e, K/ R7 C! {5 s

    130. ( B( p5 `6 d  K: k1 t5 [' v
    131.   if (argc < 2) ! k\" c# K$ ]$ j, T\" d( s
    132.   {1 G\" h/ ~5 D7 M7 X( U- K
    133.     m_lagrange_interpolating_usage();% p9 {8 X7 e9 G  x# v
    134.     4 |. s( b/ h& ^0 V+ _) h
    135.     return -1;
      0 b9 i4 [6 _8 X/ W5 t8 g  \6 S/ w
    136.   }
      2 c+ m( K. s0 H, m; w

    137. 0 Z& B\" J6 ~\" @
    138.   while ((c = getopt(argc, argv, "p:x:y:")) != -1) 0 S) @2 K7 l& V9 D
    139.   {- t/ s2 W+ g$ {/ X8 }2 y# V' ~
    140.     switch (c) 2 p0 O7 c\" G. O% Y; W) m
    141.     {  D+ p5 m5 _$ I# U\" S: l, F5 {
    142.       case 'p':
      ! {) z, A  R5 ^
    143.               m_p = (float) atof(optarg);5 c\" r' z2 {% T, K
    144.       case 'x':
      % Y; _* o0 f, a. J
    145.         m_xi = optarg;' O  G9 E' P+ j- j
    146.         break;
      & @\" I2 L+ D0 ?! s% v4 c
    147.       case 'y':
      , a9 k! d: Y% q$ [* @! A! Z; s
    148.         m_yi = optarg;( ]\" S# t2 |6 r' G9 E% A5 \
    149.         break;: ~1 H' r# _  _! A; w! k; Q. E
    150.     }) ~& i. o7 r8 k
    151.   }
      ; l1 e, r( [\" H; s

    152. ) ]+ |& W5 A. K5 ?% J6 b\" l
    153.   res = m_lagrange_interpolating();\" C( ~0 {% l  o5 A: T
    154.   printf("Lagrange interpolating with %.4f result is %.7f\n", m_p, res);0 a; Z! [3 M/ P* S) N
    155.   
      1 U4 x; h/ u; b$ \4 t0 N3 H
    156.   return 0;( @' O& E$ T7 |. }  A6 O% H
    157. }
      - o  |; ~$ G0 g$ n  V: 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-27 03:53 , Processed in 0.577046 second(s), 104 queries .

    回顶部