QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 22148|回复: 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自定义插值函数插值计算数值计算5 M/ ]; o# t) T, q- g" n 版本号: 04y09m28: f m5 a! r" \; g9 P: Z 分类: 工程设计应用 7 C4 z' N% L: x% h' M( W性质: 免费软件) Z' Z" c0 c; }# D2 M r 使用说明:

    % M9 _' e$ ^- Q

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

    % d2 d# v$ d5 p2 V7 @, o/ L

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

    + d5 K: y9 `. S- X

    EXCEL每一个单元格就是一个电子表格,很容易进行一般的加、减、乘、除、乘方、开方,而三角函数、指数函数在EXCEL中可以直接引用内部函数。用EXCEL编制一般的工程计算程序还需解决的有以下两个问题:(1)循环计算,(2)表、单曲线、曲线组的查找(如:锅炉设计计算中的焓值)。对于问题(1)循环计算,EXCEL在工具菜单中提供了两个命令:单变量求解和规划求解,利用这两条命令很容易解决问题(1)。对于问题(2)表、曲线的查找,EXCEL没有提供现成的函数,但也可用VLOOKUP、MATCH、IF、OFFSET等函数的组合勉强近视解决,本文重点介绍表、曲线的查找自定义函数的定义及使用。 - e5 L& v& r& a1 j/ e" [ ! M3 t0 m+ U6 ?9 j5 p. p( B 为了更好地解决曲线查找的问题,应用C++程序设计语言,用拉格朗日插值计算法在EXCEL中建立了自定义函数,单曲线插值函数TWLQ(变量,"带路径的保存数据的文件名"),曲线组插值函数THLQ(变量1,变量2,"带路径的保存数据的文件名")。单曲线插值函数、曲线组插值函数的"带路径的保存数据的文件"包含着特定对映表、曲线的信息和计算精度的要求 (文件为Notepad编辑的txt文件) 。2 P# c* _' B. ~: _ `: { 单曲线lagrange插值函数:double twlq(double x,char* filename); 4 e- }, K$ R: I6 U _1 v double twlx(double q,char* filename); # L7 r$ Q6 ~ L5 z曲线组lagrange插值函数:5 `- ~2 _$ e8 w& V$ c! z double thlq(double x,double y,char* filename);% R0 y- b: ~2 P% [4 Z double thlx(double y,double q,char* filename);% K3 |9 l1 n0 R- r5 C double thly(double x,double q,char* filename);。

    ; _' R: B, @# W

    例:单曲线插值函数 "带路径的保存数据的文件"结构如下:9 M- s, z+ w l" s" R9 O' A @ Description @5 h, G% {; o: k, w n, nsel; * B* h6 {7 Q! K9 F/ Gx[0],x[1], x[2],··, x[n-2],x[n-1]; - A- R% {2 H+ ^ @q[0],q[1], q[2],··, q[n-2],q[n-1]; 2 q: `6 j+ i/ b3 sMinX=0.7,MaxX=0.9,OverRangeAlm=1,X=电压,XUnit=mv,Q=电流,QUnit=mA

    / O2 o" W: \1 Y

    注解:( y: w6 H- X, J" C+ a. `0 w Description:用户自定义描述字符串(Description中不可有@符号); : K5 x7 V( c1 U0 d0 M n: 总插值点个数; , X* K3 F+ {3 o& E2 P nsel:实际参与插值计算的插值点个数; ( ?1 C9 h6 Z" n- K MinX=0.7,MaxX=0.9 取值范围; ; O8 `: X# \. U [% ] OverRangeAlm=1 越限报警 1:报, 0:不报;" | K0 p9 d2 r, h z1 I X=电压,XUnit=mv,变量名称,单位。

    3 j" A1 ^# y+ H

    ****结论: , X6 R: W$ W- P' a l)图形化界面的插值函数数据文件生成器 LCZMaker 方便快捷生成单曲线或曲线组插值函数数据文件。 # `8 W. q+ S0 t- h9 {5 i4 G6 G 2)应用EXCEL自定义插值函数,在EXCEL中进行工程计算编程极为便利,比专业编程语言程序设计更易学易用、直观明了,用EXCEL编制的工程计算应用程序更易维护、修改、升级。; K" k8 p2 D4 P) c# \ 3) EXCEL本身长于表格制作,在EXCEL中进行工程计算编程人机界面友好,输入前、输出后处理方便简单。 % `9 [) m+ i; i4 A 4)在某大型锅炉厂电站锅炉性能设计计算中已显神力。

    0 e! y9 l5 c* [7 m

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

    . n! s4 `. O1 m6 t

    [分享]插值软件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. * S& H1 z/ S8 @& Q  E
    2. /* TODO: Lagrange interpolating
      # b8 t) A) s\" J& n  J+ @* G% T
    3. *
        i( X! W, u& Y# Y
    4. * For example, if lg2.71 = 0.4330, lg2.72 = 0.4346, then lg2.718 = ?* n$ s9 I+ v5 }$ i- O
    5. * In this situation, it could be solved via lagrange interpolating* X% T6 w7 G( S; W; Y# s# C+ x* p/ B
    6. *6 [5 g( v! s\" Y6 o* ]3 n) N
    7. * */
      & ?( O! d6 A8 {

    8.   Q7 Y. J' _$ u; q0 H5 P
    9. #include <stdio.h>
      2 Y' X( e- x3 P- w+ ^
    10. #include <stdlib.h>2 v( ?( F. t5 s0 Q
    11. #include <string.h>
      # R. q7 ~) D4 s1 s3 D* F* j% a
    12. 1 Q8 I* c* S2 X& G
    13. #define DEBUG 0
      # y5 W, d/ a' E7 h5 Z$ q\" d& y

    14. 7 D+ S' l! ~/ j/ D- K& t: ^
    15. static float m_p = 0.5635;
      $ [' q8 o9 I. k7 M3 {3 G
    16. static char *m_xi = NULL;
      - d7 S% Y7 ^# ^# Y& T
    17. static char *m_yi = NULL;, R$ U: m5 M/ F1 u
    18. static float m_arr[] = {};
      # X  {1 B: t7 \
    19. static unsigned int m_n = 0;
      2 X4 E' u# ]2 B2 I% e0 L3 o
    20. # g' }8 O9 |. ]5 ], ?
    21. static void m_lagrange_interpolating_usage();
      2 T, r# c9 X) Y2 t/ z+ g. U
    22. static int m_lagrange_interpolating_set_n_arr();6 D/ z. ]% g; C6 W* T$ r, Z
    23. static float m_lagrange_interpolating();
      / ]- F: N- s0 j& y& Y  y\" r2 j
    24. ! {\" A+ T9 ?+ u, O# |. U  ^
    25. static void * ]2 F/ p/ y* Y/ }: D1 W
    26. m_lagrange_interpolating_usage()
      2 l7 q# K, T. S* K
    27. {
      8 \1 _' M  }\" }* K
    28.   printf("Lagrange Interpolating Usage:\n");* _: a0 ^3 |6 y6 k1 B, Q
    29.   printf("bin/li -p ** -x ** -y **\n");! B( ]+ i: x4 L+ V: ~2 g
    30.   printf("-p 0.5635\n");
      & F1 g; f, d: ^) _2 `  x: b
    31.   printf("-x 0.56160,0.56280,0.56401,0.56521\n");
      . x; s9 _* j) v3 T  I* f
    32.   printf("-y 0.82741,0.82659,0.82577,0.82495\n");
      / _, i3 I8 v1 J( R+ w& D2 ~8 V
    33. }9 G/ w! A2 F$ _& p8 q
    34. 8 w9 z6 u4 P4 I3 h
    35. static int
      - y6 ?% N# j0 X& s
    36. m_lagrange_interpolating_set_n_arr()
      # C0 \, c2 {4 n0 L; E\" w
    37. {. P' f( C  k+ r& x
    38.   int xi_n = 0;: ~8 }- \2 l# h( z  v( u
    39.   int yi_n = 0;
      / t) @& i4 e/ }
    40.   int n = 0;
      \" I: A$ c+ ~& p% I$ c
    41.   char *token = NULL;1 I2 w3 t+ `; m) t
    42.   const char *delim = ",";4 d  _9 _- {4 I% Y5 h- i' u

    43. ! l- G. v& I. F# p, k/ P% L* h
    44.   token = strtok(m_xi, delim);
      5 y- e& |1 a; K8 C) r2 t
    45.   while (token)
      $ i2 d. ]& Q, c6 ~7 }, g! D
    46.   {
      ; z. ?% S% m# K! X- M' y
    47.     xi_n++;
      / K* t9 n  |( Y& e0 p
    48.     n++;
      - g1 U4 d7 _/ }- J5 W% L
    49.     m_arr[n] = (float) atof(token);* Q  N4 h% ^2 E* T3 A\" W9 ^5 [( k
    50.     token = strtok(NULL, delim);  W, H, d; Y  E6 S$ f0 P
    51.   }- e( o: S9 x9 V, G1 A& A* U) x
    52. + u( q6 T/ u5 P- K0 m% Q. D) R
    53.   token = strtok(m_yi, delim);\" I8 u8 u: E5 a3 y5 @) `% {( p
    54.   while (token)
      & b: A/ K( h: j
    55.   {
      1 b  O: P: T. @% J
    56.     yi_n++;
      , K8 k8 R# P1 V0 m7 ^
    57.     n++;
      / y6 _9 H8 W$ _' V
    58.     m_arr[n] = (float) atof(token);' g- I* n+ Q9 |% O0 @0 z. T% p, e
    59.     token = strtok(NULL, delim);
      4 E( v3 z. O( J4 i+ v; r- n
    60.   }$ D0 o& u, g! w, }$ b
    61.   
      \" F# c5 _\" Q\" I* [# l
    62.   if (xi_n != yi_n) 7 I$ ?6 @5 W9 I2 V: a- k
    63.   {  J\" c7 v) ^) J5 E( Z% d3 y& x
    64.     return 0;
      - h* Y2 a8 i6 ]+ R7 Z
    65.   }
      * Q, Z' B& d- W( A  H9 h
    66. \" {/ m* h\" k& ^3 `& I7 P) F) v
    67.   m_n = xi_n = yi_n;
      & K8 J0 Z7 y8 j* _\" O

    68. . ]% N( N1 }( u; K) t
    69.   return 1;
      4 `1 k7 Q% @4 A# U
    70. }! w5 Z+ v  n/ r  y5 Y4 M+ a
    71. 6 I  N# C& E( b- z1 N
    72. static float \" W: K3 d! y+ O- x! J, C, Q* q6 E
    73. m_lagrange_interpolating() \" a) {3 F& r+ v+ Z! K, Q
    74. {& D/ C6 m8 \! D1 B
    75.   float l = 0.00000;- t4 y) f5 u7 {$ b$ G0 Y1 @+ ^9 X
    76.   float li;# T6 V\" z' y1 @+ a1 ]
    77.   int i;  V! b2 o2 Q4 J$ p- R. b
    78.   int j;
      5 E& f0 ^' X1 c- a* O6 m6 }; l

    79. 2 E1 ]$ E3 p5 X& T; x
    80. #if DEBUG
      1 ^1 M\" s) H, Z* X
    81.   printf("DEBUG at %d: enable debug mode\n", __LINE__);
      \" N$ Y# A! a* ?4 E4 u) _  y
    82.   unsigned int m_n = 3;\" x5 Y  l* H& S\" K  j
    83.   float m_p = 0.5635;
      8 e  A4 D3 p: H! e\" U: C& V% D
    84.   float m_x[] = {0.56160, 0.56280, 0.56401, 0.56521};& U\" }. r\" z3 Y; x\" g# u9 Z
    85.   float m_y[] = {0.82741, 0.82659, 0.82577, 0.82495};
      & t* H  W. y! c6 X$ B* n  W. w( q
    86.   
      7 G. v6 }4 z2 Y1 G0 v* m
    87.   for (i = 0; i < m_n; i++), n: i4 S( n# ~. P0 p\" s$ n
    88.   {
      5 [# e3 F3 U9 g, A. N; i  z
    89.     li = 1.0000000;
      & ?- h; Q, e/ h
    90.     for (j = 0; j < m_n; j++)- P* H; ^  s. g# o9 x# x4 G6 `
    91.     {# X7 _  n4 s2 G) W0 q3 x
    92.       if (j != i)8 L/ J1 b/ `\" r: W2 s' M$ ^) B
    93.       {
      2 s* M+ h  y8 R* i4 o
    94.         li = li * (m_p - m_x[j]) / (m_x[i] - m_x[j]);8 i. @! u( ^3 v  n8 }
    95.       }
      1 w9 {2 A; b. f# K\" C5 {. i
    96.     }: e  q5 i* x, ?' J, T2 L& w  Q
    97.     l = l + li * m_y[i];4 V4 ^$ @) E8 b
    98.   }
      8 F0 _  K, z- T
    99. #else; }' [; ^' I: v  L# B
    100.   if (!m_lagrange_interpolating_set_n_arr())
      * x4 v# d# ]! S. _9 h+ |  Y: N
    101.   {2 \, l! Z. O4 M0 M8 [
    102.     printf("Error: xi and yi counter is diff\n");0 P- V7 b; H- U) B- j( }6 F
    103.    
      ' S$ D; M) R. l2 U, b& B1 o7 T* h
    104.     return 0;
      6 t\" u( p  t8 f# b+ o
    105.   }: f3 \\" [' p. K: \: R! Q3 Q  j/ H
    106. ; J  g5 o+ V9 l3 x0 ~
    107.   for (i = 0; i < m_n; i++) * c: _; x, i! x9 y
    108.   {
      \" I+ h( O3 g\" G& S! }\" i0 g1 v
    109.     li = 1.0000000;
      3 W5 [# w* ~! I+ j1 z/ n
    110.     for (j = 0; j < m_n; j++)
      1 n3 r  s. v. D( f
    111.     {
      6 Q8 [1 I' S* Q6 a# O* w/ ^
    112.       if (j != i) 1 {' N2 O$ ~% ^3 h; a9 L
    113.       {
      # H$ T% G; C. e$ Q
    114.         li = li * (m_p - m_arr[j + 1]) / (m_arr[i + 1] - m_arr[j + 1]);
      9 q6 U/ C1 S3 G8 D& F1 a
    115.       }+ K: E& E7 s8 m# E; t- F6 n
    116.     }
      ) w, m. r0 @) J, x4 n  _
    117.     l = l + li * m_arr[i + m_n + 1];3 t$ M1 ^/ H( r3 q& X  \
    118.   }
      7 H- ?% j3 U3 w9 q3 p5 X
    119. #endif8 J5 g4 X. Q1 h0 U: D, h6 I
    120. # p8 x9 a* T  `# n1 C
    121.   return l;
      / `4 K- X1 x  {/ v2 I3 }
    122. }
      5 V( W# P) H- M7 U9 a$ @; Q

    123. 8 x7 d' i4 i- U0 Y* w! h# v
    124. int
      , u% I' l0 I* i$ _$ _9 [8 D\" ^
    125. main(int argc, char **argv) 1 m6 y4 c\" e# q$ Q3 Q% Z
    126. {7 s: R7 h! @7 R  U2 |( m7 J$ _
    127.   int c;
      & d; v& _$ f9 ^4 f
    128.   extern char *optarg;' E9 v4 t  S8 j( r2 s5 y
    129.   float res;
      % r+ m* n' x# b* r$ r) B2 g) q4 b7 ^
    130. & |& X) s1 U\" f3 i: K+ y6 S, c\" {
    131.   if (argc < 2) 0 Q3 N4 }\" D$ \
    132.   {3 ]$ \\" t8 S1 f% q  K: D+ h% s' U
    133.     m_lagrange_interpolating_usage();- |! v( m. n. F6 [5 ?  G/ f
    134.     # Z) t; ^5 J2 B9 r
    135.     return -1;$ C6 `6 J& k% k  V% `! A
    136.   }5 m. I9 |# n: R0 j
    137. + L3 N\" ]/ G2 E! T0 b
    138.   while ((c = getopt(argc, argv, "p:x:y:")) != -1) $ b7 b% ]4 p1 h, z: L& u
    139.   {3 P, l: d* n- C* [& b* f
    140.     switch (c)
      . _  c# e. t# H+ ]
    141.     {
      2 h. e: O0 |\" X
    142.       case 'p':8 u  t9 M9 ~0 B% ]+ K8 U: L! c$ u  t
    143.               m_p = (float) atof(optarg);+ o5 w5 Q1 s  W$ F& L  A9 K
    144.       case 'x':
      7 C2 e. d$ G; [1 u
    145.         m_xi = optarg;
      1 R( j% I9 l- h+ a
    146.         break;+ {) l1 K' u- e& |
    147.       case 'y':; V: S0 C& b* z+ t) Y$ k
    148.         m_yi = optarg;
      2 B! Z\" g/ D7 c) p* R
    149.         break;; ^3 e$ o: P* ^1 j0 j- C' @\" @: Q
    150.     }# D\" S6 i\" W# M  o
    151.   }- U% _* i0 J' R6 |9 J* z

    152. ! c' ]\" ^# p! ?\" r4 o
    153.   res = m_lagrange_interpolating();
      8 _$ \0 N$ h$ c0 @4 S
    154.   printf("Lagrange interpolating with %.4f result is %.7f\n", m_p, res);
      5 n9 w( T* x) K, i$ e5 o
    155.   5 m; x8 \) c6 C% A0 d, f6 Z
    156.   return 0;
      , j\" }+ C8 s! V6 d) u
    157. }
      1 ^+ I  ^* [5 b) o1 C( M; a) W9 B
    复制代码
    回复

    使用道具 举报

    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-4-11 09:03 , Processed in 0.623285 second(s), 105 queries .

    回顶部