QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 22248|回复: 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自定义插值函数插值计算数值计算 - @( Q5 Q1 y: c7 _: y# c版本号: 04y09m28/ L* O& v, a% S# u3 N 分类: 工程设计应用 / e# a2 f N& O1 g( b' t; n性质: 免费软件" P5 q5 E! Y) k, {6 {- L# R 使用说明:

    L& ?: E0 n* k6 o* n$ ?; u6 Z

    人们对EXCEL普遍熟悉的功能是表图的处理,不太知道其在工程计算(如锅炉设计计算)中的应用。复杂的工程计算常常用专业编程语言(Fortran、C、Pascal 等)来编制计算程序解决,用专业编程语言编制工程计算程序往往有下面二个缺点: 9 ?4 y1 Z7 c1 w# ] 2 E. y$ }7 ^6 A; f 1) 编程语言专业性强,一般工程技术人员难以掌握,由这些专业编程语言编制的计算应用程序的维护、修改、升级都比较困难。

    $ B+ r D: v2 S: r$ q. l0 X

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

    }: _5 z& a S! S0 W$ W1 G5 E

    EXCEL每一个单元格就是一个电子表格,很容易进行一般的加、减、乘、除、乘方、开方,而三角函数、指数函数在EXCEL中可以直接引用内部函数。用EXCEL编制一般的工程计算程序还需解决的有以下两个问题:(1)循环计算,(2)表、单曲线、曲线组的查找(如:锅炉设计计算中的焓值)。对于问题(1)循环计算,EXCEL在工具菜单中提供了两个命令:单变量求解和规划求解,利用这两条命令很容易解决问题(1)。对于问题(2)表、曲线的查找,EXCEL没有提供现成的函数,但也可用VLOOKUP、MATCH、IF、OFFSET等函数的组合勉强近视解决,本文重点介绍表、曲线的查找自定义函数的定义及使用。$ |# Z% ^/ D" {) W3 P1 D# I j $ f; F! S; H4 _! h" B9 s 为了更好地解决曲线查找的问题,应用C++程序设计语言,用拉格朗日插值计算法在EXCEL中建立了自定义函数,单曲线插值函数TWLQ(变量,"带路径的保存数据的文件名"),曲线组插值函数THLQ(变量1,变量2,"带路径的保存数据的文件名")。单曲线插值函数、曲线组插值函数的"带路径的保存数据的文件"包含着特定对映表、曲线的信息和计算精度的要求 (文件为Notepad编辑的txt文件) 。 0 k t/ k# f9 W V9 C单曲线lagrange插值函数:double twlq(double x,char* filename); ; H: o: H( @* n/ q I double twlx(double q,char* filename);3 P4 _( R f4 x/ G) J, Z 曲线组lagrange插值函数: ) Q; ^6 J& U) J; {5 A double thlq(double x,double y,char* filename); - _8 Y0 Y" @( M( ^" s double thlx(double y,double q,char* filename); 7 |' I) q1 S! y0 {& I0 Y double thly(double x,double q,char* filename);。

    ; B! k9 g$ |* d( \: [! p; J

    例:单曲线插值函数 "带路径的保存数据的文件"结构如下: 4 M% _- G0 c( b4 j# ?7 U$ }@ Description @! H* q7 e# Q8 W" U n, nsel;" y6 m$ ]5 W: U x[0],x[1], x[2],··, x[n-2],x[n-1];$ q! B' ?: W7 d3 t( r" S q[0],q[1], q[2],··, q[n-2],q[n-1]; & P' x+ b, u* Z' k9 nMinX=0.7,MaxX=0.9,OverRangeAlm=1,X=电压,XUnit=mv,Q=电流,QUnit=mA

    ' Y2 U$ d: \. z) [" `

    注解:8 g8 o3 Z2 S E/ D Description:用户自定义描述字符串(Description中不可有@符号);: @0 w$ o2 `) ]" _" D n: 总插值点个数; 8 U/ d' `+ S8 u& d. V& K nsel:实际参与插值计算的插值点个数; 5 q V( q9 J; _: f4 V MinX=0.7,MaxX=0.9 取值范围;: @/ [+ [) d# h/ W OverRangeAlm=1 越限报警 1:报, 0:不报; 4 D* N1 X$ w0 p8 C3 _) ^ X=电压,XUnit=mv,变量名称,单位。

    7 A3 O2 f; b& o; j+ J

    ****结论:7 B: L' I/ B; @( s3 a8 i0 L' M l)图形化界面的插值函数数据文件生成器 LCZMaker 方便快捷生成单曲线或曲线组插值函数数据文件。 $ L6 I9 g) t. ]2 E% d* ?5 O( A+ w 2)应用EXCEL自定义插值函数,在EXCEL中进行工程计算编程极为便利,比专业编程语言程序设计更易学易用、直观明了,用EXCEL编制的工程计算应用程序更易维护、修改、升级。/ ^; h- I" _* y7 \" a& H1 P 3) EXCEL本身长于表格制作,在EXCEL中进行工程计算编程人机界面友好,输入前、输出后处理方便简单。# K' `" ]% F! K/ x) H C 4)在某大型锅炉厂电站锅炉性能设计计算中已显神力。

    , F6 j* E2 e4 p! l& Y

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

    7 \+ U/ v: S% l- ], l; H

    [分享]插值软件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 L* r& O2 X# G
    2. /* TODO: Lagrange interpolating 0 I8 x, z  F$ j
    3. *, v- F/ v: N$ A. h# ~. x1 y
    4. * For example, if lg2.71 = 0.4330, lg2.72 = 0.4346, then lg2.718 = ?# l9 c% b7 J* v- z2 Z
    5. * In this situation, it could be solved via lagrange interpolating( [. k. c+ T\" Y8 s8 A$ L+ K$ ?- M
    6. *
      1 W6 V5 \# k. J  |8 g
    7. * */3 |8 V& Q' e. c$ d: h; i
    8. . }0 A, L5 Q4 n+ }/ r% I2 `9 W; w: j( g
    9. #include <stdio.h>
      - y. r\" W5 N6 M8 c1 s, |! [) q
    10. #include <stdlib.h>4 \+ B) K% y3 F! m2 W
    11. #include <string.h>4 B. N$ R7 }& K3 m: g

    12. 7 ^8 u! Y. c7 n3 T5 C( ]3 H* d
    13. #define DEBUG 0; I' M7 V. z. }7 N

    14. % G3 U, ?2 Z6 C! V2 T8 w
    15. static float m_p = 0.5635;
      $ q6 D2 J6 [3 p  ?; O6 d) S( Y
    16. static char *m_xi = NULL;& Q+ Z$ G* w0 w' r# b* N' K
    17. static char *m_yi = NULL;
      8 o7 F0 N3 c9 `- z\" c$ u. E$ x
    18. static float m_arr[] = {};
      + E\" }; k% L. z4 [: e+ O& l' l\" z
    19. static unsigned int m_n = 0;* ^. P6 T+ j' ~

    20. 4 L1 q  f/ K- k% g
    21. static void m_lagrange_interpolating_usage();7 `4 r- E. [5 j
    22. static int m_lagrange_interpolating_set_n_arr();
      ( @\" i$ a( K2 s' x; h
    23. static float m_lagrange_interpolating();
      . n- P$ e\" E$ [0 \! j- H' s

    24. + [7 E: t( w* B) n1 @
    25. static void 9 h' {5 l1 c! Y0 U) E4 C0 }
    26. m_lagrange_interpolating_usage() 7 h7 _9 W7 o- y* J# E/ H
    27. {
      3 ]+ ^! p/ o% K
    28.   printf("Lagrange Interpolating Usage:\n");
      2 n; p- a/ q/ _8 i: H! x9 X9 p
    29.   printf("bin/li -p ** -x ** -y **\n");
      9 ^! C( ~; [& p2 A# F+ R
    30.   printf("-p 0.5635\n");
      \" x3 }6 F. h7 d1 D\" O
    31.   printf("-x 0.56160,0.56280,0.56401,0.56521\n");$ M6 O& G  E% \; W1 X- V7 e1 J* i! W
    32.   printf("-y 0.82741,0.82659,0.82577,0.82495\n");- d7 l$ h3 m/ r+ }
    33. }
      4 }4 d- t6 A: c; L: \) x
    34. ! t' b9 M% }3 i  F
    35. static int
      ' E# _7 ^$ b( r8 H3 T
    36. m_lagrange_interpolating_set_n_arr() ; ~% Z9 H5 C# }! A3 Q* I; `
    37. {8 X& u, A$ J  _
    38.   int xi_n = 0;* n5 }/ F! P# L\" o+ O
    39.   int yi_n = 0;
      * P4 K1 x, D2 l8 d
    40.   int n = 0;
      ; O5 E. F7 j$ U3 A' X% ~' D
    41.   char *token = NULL;- {6 Y' F\" @6 L6 s
    42.   const char *delim = ",";$ e' x. M+ a0 }  i, E
    43. ' ~! N2 t3 H\" }& X
    44.   token = strtok(m_xi, delim);
        q& \# y& U8 F
    45.   while (token)
      0 I( `: B% h5 X3 m\" I6 I1 R
    46.   {
      ( A6 v- M7 i3 A$ {
    47.     xi_n++;1 t! I, d7 Y3 {/ X, E( ~
    48.     n++;9 d5 U: {) d9 |( Q0 ^  ?8 t
    49.     m_arr[n] = (float) atof(token);
      6 O% [# M7 o- g' r4 ]) H7 A' p
    50.     token = strtok(NULL, delim);\" \, y- d( d7 D( M0 h- k
    51.   }
      \" I8 C0 W8 ~. w4 ~

    52. 8 d6 f6 w  R0 K! [9 ~8 j- c/ }
    53.   token = strtok(m_yi, delim);
      7 }2 O- D% I6 G
    54.   while (token)
      # p% Z3 @- J1 ^4 J
    55.   {9 S8 y& L  ]9 V: ]6 }. u
    56.     yi_n++;) ^3 F0 E2 E% u
    57.     n++;$ R+ P) `  R9 C+ M  W
    58.     m_arr[n] = (float) atof(token);2 `# ?3 o, s. b. V9 j
    59.     token = strtok(NULL, delim);0 b' H  j4 I4 a  B2 g8 L; _
    60.   }7 l- w  _$ I- X4 `* j- r1 i
    61.   
      4 v3 U7 C3 C3 f4 }7 j7 A% f% E% H
    62.   if (xi_n != yi_n) - S0 b; @0 e- s7 w9 P9 S
    63.   {0 A1 t% ]. Y+ J; S) D3 w. o
    64.     return 0;
      3 g' k% N. ~- G2 R* j1 f
    65.   }
      3 y& Y5 V8 y, s; l6 p

    66. ; v  B  ?% M. d3 |$ N
    67.   m_n = xi_n = yi_n;
      4 B, D2 ?4 e) F: ^) T

    68. 5 Q  m) S1 [$ I( z
    69.   return 1;
      - r( f% |; G5 A\" C
    70. }
      ( n1 z2 p* L8 |) ?, K: w
    71. : u6 I' P. k( `' T6 B6 H$ }# m
    72. static float 2 s8 z8 D+ W' M
    73. m_lagrange_interpolating()
      ! Y. b& |7 n3 l, Z6 `( {
    74. {; e( g- B\" A5 A\" M) x0 Q$ k) y# S$ d3 Y
    75.   float l = 0.00000;! ^- n  T1 J' X; M$ e\" Q9 Q\" y/ @
    76.   float li;4 P7 S0 R; _8 s1 \* U6 _- T
    77.   int i;
      7 U1 @' ^4 j+ s$ k
    78.   int j;
      ' h\" a: X' ]5 C$ B8 t8 S# E0 i

    79. 3 h( @8 b4 W. c3 V6 ]5 k' a
    80. #if DEBUG
      : A/ f6 j$ {7 K) U
    81.   printf("DEBUG at %d: enable debug mode\n", __LINE__);
      ( Z+ y, o+ _0 U( i% {) m* w7 Z
    82.   unsigned int m_n = 3;
      1 ]) M9 X1 G9 C\" V( N6 Z. y+ l; V
    83.   float m_p = 0.5635;# z: g. Z: m3 i# }7 J9 u. r
    84.   float m_x[] = {0.56160, 0.56280, 0.56401, 0.56521};8 \6 z( X4 B7 i& m/ p
    85.   float m_y[] = {0.82741, 0.82659, 0.82577, 0.82495};
      \" x/ V* U5 h- m. s$ ]$ H
    86.   
      , K/ a+ c. H/ O& g
    87.   for (i = 0; i < m_n; i++)# n& X4 D: p5 G% W7 n* `! g
    88.   {
      , c9 @2 B0 [- s5 o: u/ w: y
    89.     li = 1.0000000;
      8 t; W1 e+ k' z% g: g% J- p) @
    90.     for (j = 0; j < m_n; j++)$ h3 @, y, u  M; x/ V& i
    91.     {9 B9 l/ \; C- v, k5 H1 S$ {\" D
    92.       if (j != i)
      0 a1 l7 r9 h  y! [
    93.       {
      0 v' Q7 z- ~4 \+ p+ G/ o
    94.         li = li * (m_p - m_x[j]) / (m_x[i] - m_x[j]);
      9 |% ]! V8 q0 s, f3 g8 L3 F1 @, j
    95.       }
      \" w  @6 n( ^2 S9 S3 c/ V  U
    96.     }
      / q; }: x\" C, x9 M! F9 a* Q
    97.     l = l + li * m_y[i];
      ; u8 T\" s! T' \1 a7 b5 C) R
    98.   }
      ( k\" `4 q. }* r7 l2 k, n9 b5 e
    99. #else. e: v  v  ?6 o
    100.   if (!m_lagrange_interpolating_set_n_arr())
      / y, O, v$ L0 t6 @- g
    101.   {9 z\" i  h. F/ [  ~1 r4 k# |
    102.     printf("Error: xi and yi counter is diff\n");/ b$ z. T7 z& P0 V- c6 m  F
    103.    
      + Y( V# J& C! N: M5 W9 B/ N
    104.     return 0;
      6 H  }/ B6 F; X: Y3 V% I& ?! U
    105.   }; v' w* a' z. P4 r* [( d

    106. 9 `* Y; ]. j+ n( W5 Z, j9 F6 I
    107.   for (i = 0; i < m_n; i++) ( i/ R% w  ?* c0 f  M7 U
    108.   {
      0 l8 d! `' q& X, X  i% `: K
    109.     li = 1.0000000;
      % H3 e, Q2 @. @9 G; W2 X7 H2 L# i) q
    110.     for (j = 0; j < m_n; j++) + y7 C  }& s3 |6 a2 ~- M; L
    111.     {. e; g\" k7 J( X' ]% ~
    112.       if (j != i)
      1 v) `/ L' E# T5 ~: j
    113.       {
      0 S7 x. m% y5 ~. I0 P
    114.         li = li * (m_p - m_arr[j + 1]) / (m_arr[i + 1] - m_arr[j + 1]);
      # ?1 q' H+ }1 ?/ j) c& ?# N+ Z
    115.       }
      ; ~; Y: i# @+ i. w
    116.     }
      3 M& L, T+ V\" }8 J+ n
    117.     l = l + li * m_arr[i + m_n + 1];
      0 ]\" |6 n% B. q6 ^, i
    118.   }8 i3 ~* ]* S9 g' O
    119. #endif
        f* u$ N( d\" ]! a

    120. 0 a' [. V2 w1 i. N( f5 d; R$ J/ n
    121.   return l;
      5 e2 w9 e, k' @
    122. }- d4 O# s! M+ p& w( r
    123. , r/ i. C! E( z0 E4 R5 a
    124. int 5 U( p7 v7 n( n
    125. main(int argc, char **argv)
        _9 ~- |) f+ h
    126. {% ~( g\" G/ F  \
    127.   int c;7 K\" I) u\" w. K- r
    128.   extern char *optarg;
      1 }  ~. Q% l, x) A# `5 J2 ^
    129.   float res;/ s8 E* S5 h+ l3 w0 H1 ]3 e
    130.   I% u/ H2 F- I4 \
    131.   if (argc < 2) 4 W% S1 F/ I9 f' W
    132.   {
      # F\" o: w+ G/ ~4 h8 {
    133.     m_lagrange_interpolating_usage();0 E# [, m' |* p\" q
    134.       X; }8 v\" N) r( u
    135.     return -1;, _1 L* v  X9 C) _2 g2 o: k# l
    136.   }
      % E/ h  h* [4 V4 E, ^2 W5 m; n

    137. ( |. L! w1 A3 K  B\" n8 [\" Q
    138.   while ((c = getopt(argc, argv, "p:x:y:")) != -1)
      6 `8 P# z$ ~% o6 f
    139.   {
      , N/ B- b% y6 U! E/ l  _) X% T
    140.     switch (c)
      ) h9 |5 r  [, T; Z! F+ m# E& l
    141.     {
      % A* w, Q& \1 I/ r* f3 ?! I% L
    142.       case 'p':
      ' ?* A3 s# r& j2 l9 z
    143.               m_p = (float) atof(optarg);
      & J+ o8 \) I* `! G. `! ^\" ^
    144.       case 'x':
        C: f5 S5 B8 n9 J( E' H
    145.         m_xi = optarg;
      ( v, Q% Z- ?& z; U
    146.         break;8 V% U+ l6 D( r  }, v
    147.       case 'y':
        Q9 X( e+ a8 ~4 l' S
    148.         m_yi = optarg;9 o6 A\" m4 v/ O8 _! Z
    149.         break;
      ( u9 |; `9 Z- l# f- E6 `3 P5 i
    150.     }
      : h3 w1 @+ c\" j; q2 ]' [5 h8 _
    151.   }( Y; K' i+ m3 ]9 V
    152. & C0 n7 `4 I+ y2 _
    153.   res = m_lagrange_interpolating();) j* f  f* {( h% ^3 k2 K1 U, i0 c# |
    154.   printf("Lagrange interpolating with %.4f result is %.7f\n", m_p, res);2 u! N% j+ x2 b. H' v9 D  E* x1 n
    155.   \" K+ D( G) I! r+ z! c8 Z\" H
    156.   return 0;/ [1 l+ r; o7 d& u\" G  }
    157. }
      1 m: _+ d% K5 q/ l  G\" o
    复制代码
    回复

    使用道具 举报

    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 13:34 , Processed in 0.549279 second(s), 104 queries .

    回顶部