QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 22250|回复: 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自定义插值函数插值计算数值计算 9 {" W3 d4 _, h2 ?( p" w& v版本号: 04y09m28! o" {3 \9 O8 T9 U% G1 o 分类: 工程设计应用 0 T4 l# c8 x6 |+ J) F9 v" U' L性质: 免费软件 ; ^; L4 [5 y5 Y$ @8 I8 d- `' s使用说明:

    6 g) x, G/ b4 J6 v0 \- _

    人们对EXCEL普遍熟悉的功能是表图的处理,不太知道其在工程计算(如锅炉设计计算)中的应用。复杂的工程计算常常用专业编程语言(Fortran、C、Pascal 等)来编制计算程序解决,用专业编程语言编制工程计算程序往往有下面二个缺点: + w3 ~9 k( @1 P6 V/ {; s 6 W( ]7 D, |3 K! Z: R Y 1) 编程语言专业性强,一般工程技术人员难以掌握,由这些专业编程语言编制的计算应用程序的维护、修改、升级都比较困难。

    # L3 b1 z5 y6 y

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

    8 ]1 T# _6 q; R" G6 Y1 Q7 l5 I& H

    EXCEL每一个单元格就是一个电子表格,很容易进行一般的加、减、乘、除、乘方、开方,而三角函数、指数函数在EXCEL中可以直接引用内部函数。用EXCEL编制一般的工程计算程序还需解决的有以下两个问题:(1)循环计算,(2)表、单曲线、曲线组的查找(如:锅炉设计计算中的焓值)。对于问题(1)循环计算,EXCEL在工具菜单中提供了两个命令:单变量求解和规划求解,利用这两条命令很容易解决问题(1)。对于问题(2)表、曲线的查找,EXCEL没有提供现成的函数,但也可用VLOOKUP、MATCH、IF、OFFSET等函数的组合勉强近视解决,本文重点介绍表、曲线的查找自定义函数的定义及使用。 ' {1 @! U/ t" k- Z( d" E 1 f7 K2 I3 {, X2 J4 @* ?& K) Z 为了更好地解决曲线查找的问题,应用C++程序设计语言,用拉格朗日插值计算法在EXCEL中建立了自定义函数,单曲线插值函数TWLQ(变量,"带路径的保存数据的文件名"),曲线组插值函数THLQ(变量1,变量2,"带路径的保存数据的文件名")。单曲线插值函数、曲线组插值函数的"带路径的保存数据的文件"包含着特定对映表、曲线的信息和计算精度的要求 (文件为Notepad编辑的txt文件) 。0 p" n" k2 e! F- V 单曲线lagrange插值函数:double twlq(double x,char* filename); - `- [7 R5 S3 t" ^, |& H double twlx(double q,char* filename); ' i/ G& f6 M: k9 G) ^7 j曲线组lagrange插值函数: . y( F& f7 G, s( b double thlq(double x,double y,char* filename); # n8 e. d& v! J1 ^; E* Z double thlx(double y,double q,char* filename);- |2 J0 U! p1 ^! c0 A7 ^ double thly(double x,double q,char* filename);。

    % `3 o# S/ ?1 Y/ {0 m

    例:单曲线插值函数 "带路径的保存数据的文件"结构如下: ' y9 g: N, c& r* W/ A* O; a* `@ Description @# A( o J' @+ I n, nsel;: B+ v' q1 n! _. J7 m) R8 g7 Z x[0],x[1], x[2],··, x[n-2],x[n-1]; 6 X6 Q1 s, M6 i1 s1 ]. ~q[0],q[1], q[2],··, q[n-2],q[n-1];+ Y @$ [& S9 R% M' N! } MinX=0.7,MaxX=0.9,OverRangeAlm=1,X=电压,XUnit=mv,Q=电流,QUnit=mA

    : J! ^3 r% |+ p- k& X

    注解:8 v$ Y7 t5 ^8 d5 L$ I Description:用户自定义描述字符串(Description中不可有@符号); 9 O" H U% }9 }( e n: 总插值点个数;9 G" O2 u% Z- l nsel:实际参与插值计算的插值点个数; 8 o' O. O1 d& q* ~) P& b MinX=0.7,MaxX=0.9 取值范围;) [3 ?0 Z$ }* [3 @3 D OverRangeAlm=1 越限报警 1:报, 0:不报; ) k* k; P( m( I9 v X=电压,XUnit=mv,变量名称,单位。

    ) l# O! H! P& U: {

    ****结论:, o: ?: J- T* B0 Y! k+ r l)图形化界面的插值函数数据文件生成器 LCZMaker 方便快捷生成单曲线或曲线组插值函数数据文件。5 q! g& P* t" S6 a# B 2)应用EXCEL自定义插值函数,在EXCEL中进行工程计算编程极为便利,比专业编程语言程序设计更易学易用、直观明了,用EXCEL编制的工程计算应用程序更易维护、修改、升级。' X q& i3 |& G) x' s; H( f 3) EXCEL本身长于表格制作,在EXCEL中进行工程计算编程人机界面友好,输入前、输出后处理方便简单。3 Q2 R/ K0 O+ {: L) {$ x 4)在某大型锅炉厂电站锅炉性能设计计算中已显神力。

    8 H1 B& o% b; w5 R

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

    * T6 T9 c7 o4 m# D0 u+ J# A8 w

    [分享]插值软件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. 0 f0 W& z2 g( ~/ l* J\" B
    2. /* TODO: Lagrange interpolating 7 x4 C6 ~: q# C; g
    3. *
      \" m$ i8 M& F4 ^( q* F
    4. * For example, if lg2.71 = 0.4330, lg2.72 = 0.4346, then lg2.718 = ?) o3 d/ i+ m' I, ~
    5. * In this situation, it could be solved via lagrange interpolating
      - C7 {$ f+ P/ o
    6. *5 e- t* y. J& K9 Y6 z
    7. * */# f$ o2 y# A& f& C5 J; a0 J\" u

    8. # |  m8 w4 U* G- ~& i
    9. #include <stdio.h>
      . G8 R! x) N: P1 x7 E6 r
    10. #include <stdlib.h>
      \" l5 y$ c) x; c. B
    11. #include <string.h>
      * N. s  u9 p7 a- p. v5 P5 v

    12. 7 G* ?5 Q9 `+ l9 @8 i3 I/ Y
    13. #define DEBUG 0+ [. i5 H# l# Y: r+ o/ q# _
    14. 5 E% Q& p: Z, C/ f0 k
    15. static float m_p = 0.5635;
      + s4 h) R: Y/ @! T
    16. static char *m_xi = NULL;
      ' w( W5 O  T5 d2 d1 O- z4 E
    17. static char *m_yi = NULL;5 V3 Z% ?+ H. c$ l4 w0 F
    18. static float m_arr[] = {};
      , ?* H! s/ ^, _5 x
    19. static unsigned int m_n = 0;
      5 {3 R: q. Y4 k, |
    20. ) ~. j6 X1 E& q, m9 m
    21. static void m_lagrange_interpolating_usage();
      & Z9 m7 b  l' X8 B8 F! N9 w
    22. static int m_lagrange_interpolating_set_n_arr();5 j9 X* m! F( ]% w: R6 M8 u% M
    23. static float m_lagrange_interpolating();
      7 m1 _4 b- r# Z3 M- l5 R/ p
    24. ! {0 D7 W4 E. m* l. A  M5 H
    25. static void : Q( g) a& a# E+ K! A5 t) o
    26. m_lagrange_interpolating_usage()
      % A. w7 N3 C/ B7 |
    27. {
      # E\" O8 L5 h! v8 ^( |
    28.   printf("Lagrange Interpolating Usage:\n");
      % J5 @- d8 X1 G4 x8 X7 M4 a% `- _0 X* P: t
    29.   printf("bin/li -p ** -x ** -y **\n");
      4 g  L/ e5 K$ d4 U2 c
    30.   printf("-p 0.5635\n");
      $ R$ X/ U& V4 f
    31.   printf("-x 0.56160,0.56280,0.56401,0.56521\n");
      0 Y. f\" D8 W' y  B
    32.   printf("-y 0.82741,0.82659,0.82577,0.82495\n");0 j8 P\" D4 s/ V) L$ S& ?
    33. }
      & ?6 u* |% J3 \2 G  S% s; c

    34. : j7 H4 C3 Q3 m0 Q) y% H. M. I6 A\" \
    35. static int
      9 ]% s3 }3 K2 h; m) T# F
    36. m_lagrange_interpolating_set_n_arr()
      5 |' P/ ^* I' o/ o
    37. {/ R( o* P% R3 I6 ]  C
    38.   int xi_n = 0;
      - L3 X8 [; T$ q) Q3 u: b
    39.   int yi_n = 0;$ Q2 X) ~% f9 n\" v* M2 z
    40.   int n = 0;& T' s$ L9 L& l
    41.   char *token = NULL;& B. F: l5 N, L
    42.   const char *delim = ",";  ^3 b- e; C/ l+ g( D8 R\" t
    43. ; p* ^\" k% x* \: t) _, Y2 X+ G
    44.   token = strtok(m_xi, delim);
      ; f+ G- i+ S) F+ O; g* K# L
    45.   while (token)
      ! q# H; k$ _2 u3 G; K2 a) t
    46.   {4 {# f\" D% }/ W/ R: P: o9 X
    47.     xi_n++;
      ; t/ P& h- h! ^9 a* Q% u6 _9 j
    48.     n++;
        j1 Q5 i6 Y7 |, L9 R6 q5 G9 }' X
    49.     m_arr[n] = (float) atof(token);
      6 S+ @2 [: t4 \$ S# j1 }$ L9 K
    50.     token = strtok(NULL, delim);
      4 U9 |5 ]  _) f
    51.   }
      # I' o7 n7 j# w2 g7 o& z5 E

    52. + C' m/ I+ J4 L+ i, k
    53.   token = strtok(m_yi, delim);5 }! ~; d/ D8 t4 A
    54.   while (token)
      : U9 v6 J& x2 k- g8 v, K3 X4 J5 E, b
    55.   {
      % u4 f% n' m3 G6 b7 w\" V
    56.     yi_n++;
      2 ?7 M* h5 ~3 W+ x& d$ L* M/ X
    57.     n++;/ D. C5 Y6 L+ v& w
    58.     m_arr[n] = (float) atof(token);, |. o# n! y\" \! c. q
    59.     token = strtok(NULL, delim);% ^& `* J1 t5 Z* Q4 x
    60.   }
        V2 [% A3 z( W$ N  {# U
    61.   + a\" u# }; b% b: S- a' d
    62.   if (xi_n != yi_n) # Z\" a' ^  D\" t* w& }1 F/ p+ E
    63.   {8 Z# G, X  X1 T5 W+ H9 N+ V$ t% ]
    64.     return 0;
      ; y2 X; m3 w, O  t
    65.   }
      \" Z\" ~. [+ Y6 a( }

    66. 5 ?1 s8 N' E+ R
    67.   m_n = xi_n = yi_n;
      : D# R) w: z( o  P( a5 _7 B, q  {

    68. 7 ^  i\" x1 j  r+ s
    69.   return 1;( \; v& ^. _, s4 Q
    70. }9 ~# m8 ^\" R+ T9 v5 P: N

    71. % b4 G2 Y8 l$ O3 Q' M2 C. n( V
    72. static float
      & k/ h) s' _) }: l
    73. m_lagrange_interpolating() & _# h2 g  _0 `+ G3 H
    74. {
      2 q/ y\" ]; c8 w( V
    75.   float l = 0.00000;
      9 {0 R! Y7 n% l) {, k7 i5 V. e
    76.   float li;
      & B9 M3 @# {. |- o: b1 m8 _
    77.   int i;. J, C( G. s0 R* p8 p
    78.   int j;
      ) U/ G4 m5 ?) e\" I! G3 ^. U

    79. # w: E) k2 b\" y0 l/ a0 @9 {5 |
    80. #if DEBUG
      5 d- d: j5 ?\" ]! L0 c, y
    81.   printf("DEBUG at %d: enable debug mode\n", __LINE__);1 O' X5 g! M( w5 j
    82.   unsigned int m_n = 3;
      2 `& ^' J3 X+ u. \
    83.   float m_p = 0.5635;0 q4 u9 |7 j9 U/ `
    84.   float m_x[] = {0.56160, 0.56280, 0.56401, 0.56521};
      : `8 V. a' }9 a- Z\" J- P
    85.   float m_y[] = {0.82741, 0.82659, 0.82577, 0.82495};
      2 d4 ~, U' L: Y$ h6 r$ H
    86.   - Z0 N8 f7 `: A
    87.   for (i = 0; i < m_n; i++)
      - Y, K& b4 I2 a1 V
    88.   {: H/ b$ f3 V, \/ c\" s
    89.     li = 1.0000000;
      % I. s2 L. T3 D8 O
    90.     for (j = 0; j < m_n; j++)
        |7 K6 r% `) Y7 E
    91.     {* `0 |) e7 p: D% ?$ b
    92.       if (j != i)* p. J3 W) Y& X& U' a2 M# Y
    93.       {
      ; P2 y2 R( c& K
    94.         li = li * (m_p - m_x[j]) / (m_x[i] - m_x[j]);
      - d\" _8 m3 N3 [7 ^+ k  j6 ]+ k\" T
    95.       }
      # {( Q* u4 t) L6 H! Z/ }( ]* L2 m  W8 M
    96.     }
      ) b- n3 a- S7 Q
    97.     l = l + li * m_y[i];2 `0 p. [  o\" X0 `5 c- Q0 I: K
    98.   }
      - w3 D2 S2 S5 E, Y; o7 w
    99. #else
      * K& B# g. J- Z% G
    100.   if (!m_lagrange_interpolating_set_n_arr()) 3 R; ~8 A\" a\" T& u5 k5 V4 f' F
    101.   {
      + x8 g; y% T\" H; u8 z! Y5 i
    102.     printf("Error: xi and yi counter is diff\n");
      7 D. Y/ z2 r5 D/ G! z0 \
    103.    
      ; s$ y6 ~4 L$ b
    104.     return 0;8 r2 j' ]. s: W3 N: A2 E
    105.   }
      3 t5 L+ ]. U# n6 T3 e- C0 ?& |

    106. / [. ?/ f) P5 ?' }/ |1 J
    107.   for (i = 0; i < m_n; i++) : o; c. a: w5 T2 N+ t( Z
    108.   {
      / r  Y; J, u6 u* b& u- v' m& W3 S
    109.     li = 1.0000000;
      $ `# L: Q! Z) ^1 a) K! W
    110.     for (j = 0; j < m_n; j++)
      ( y% U- ?; D* ~) p
    111.     {6 }$ J! H3 ?: \
    112.       if (j != i) 2 ]* r* L\" Y! G7 ~
    113.       {5 U/ G7 s: r: W$ c, i- f' p
    114.         li = li * (m_p - m_arr[j + 1]) / (m_arr[i + 1] - m_arr[j + 1]);# V( V7 k  ]2 y9 {# |7 M
    115.       }
      , X5 i6 H- p! x, z; r+ _
    116.     }
      . n2 o1 t3 ?: q) N. U
    117.     l = l + li * m_arr[i + m_n + 1];
      4 ~2 Z  M/ N/ ]% Q5 t8 B. H
    118.   }
      % n3 O0 x) ~# H$ W4 C- D9 i
    119. #endif3 X3 H+ ]8 J7 s) m) K
    120. * p; B4 _- y$ R6 ]/ j: I) j3 H\" s
    121.   return l;2 h) e: ~0 H\" M3 ^
    122. }
      0 g\" ]! r8 l\" o% l6 N+ ?; [) X! D

    123. 2 v5 ]! I7 i( y  x
    124. int 2 v% S$ Y& `1 Z
    125. main(int argc, char **argv)
      : n+ y! v6 E  C0 ~/ A
    126. {7 ^( E, e  P/ R& z9 L& ]8 j# c$ T
    127.   int c;
      6 l0 u1 K+ R/ }: W  e
    128.   extern char *optarg;
      7 b  D( m* t5 E. F* C' {( ^+ F- Q
    129.   float res;
      % O1 I- `/ M\" [7 s

    130. 7 c# q/ T$ [. N0 e) X0 h5 [
    131.   if (argc < 2)   T' C) O; K) n% a
    132.   {# h  b. T9 j5 f6 n- ^
    133.     m_lagrange_interpolating_usage();& ]. z0 H4 _- ^2 a7 [  Y6 _
    134.    
      7 [( I& J4 X\" t- p
    135.     return -1;
      # |: |3 \: j2 Z. o, c) [
    136.   }5 U7 z# ^9 @6 Y

    137. 4 [: R$ h# ~0 F( `1 |8 B- Q\" a
    138.   while ((c = getopt(argc, argv, "p:x:y:")) != -1) 6 g/ T9 S) {\" `8 k
    139.   {$ z8 c\" ^$ \0 j  ?8 _
    140.     switch (c) - L8 W$ r: J1 O4 y
    141.     {
      \" r4 ~, w% ~- d7 a) g
    142.       case 'p':
      * k, g8 T- L* b
    143.               m_p = (float) atof(optarg);$ K8 x4 l4 i, N- L
    144.       case 'x':8 Q, ?% ?7 `3 ~6 n/ w
    145.         m_xi = optarg;4 S/ [1 Z$ |2 B1 B- E
    146.         break;
      * o9 b  i6 d0 p9 `; f' h* R* E
    147.       case 'y':; g/ ~' l7 J! H7 |0 B
    148.         m_yi = optarg;
      , {- a$ J8 l( L, `3 Z+ E1 j1 h
    149.         break;
      2 S: z1 d0 D2 i) |3 g
    150.     }: m8 G\" d3 n; d
    151.   }
      0 j  g4 \) v+ o; Y  C4 B

    152. 8 N) j4 |, `, f. ~
    153.   res = m_lagrange_interpolating();. j$ A+ m) o2 C
    154.   printf("Lagrange interpolating with %.4f result is %.7f\n", m_p, res);
      ) l1 d2 ]  s: }! H, I1 t% j
    155.   2 R. {$ P$ W! z- v5 D( G% c
    156.   return 0;9 m( P$ C4 y( @- ^. H
    157. }- F; A7 K' p1 V! ~. z9 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-29 01:04 , Processed in 0.544682 second(s), 104 queries .

    回顶部