QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 22150|回复: 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自定义插值函数插值计算数值计算 $ V" \6 s6 i4 K! Y; I版本号: 04y09m28 . A8 c) d& L' k/ O% L分类: 工程设计应用. [; N- h$ V; x" C1 T 性质: 免费软件 ( G& l0 Y# K! a/ V& c' u使用说明:

    6 W3 H6 t" w' v) \+ m

    人们对EXCEL普遍熟悉的功能是表图的处理,不太知道其在工程计算(如锅炉设计计算)中的应用。复杂的工程计算常常用专业编程语言(Fortran、C、Pascal 等)来编制计算程序解决,用专业编程语言编制工程计算程序往往有下面二个缺点: & ]) l5 l8 m" v& ]& _( W! o % j# K. k; ]' ? 1) 编程语言专业性强,一般工程技术人员难以掌握,由这些专业编程语言编制的计算应用程序的维护、修改、升级都比较困难。

    . w$ V5 D/ ^, }

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

    $ f% R/ w' m i/ }7 }% |

    EXCEL每一个单元格就是一个电子表格,很容易进行一般的加、减、乘、除、乘方、开方,而三角函数、指数函数在EXCEL中可以直接引用内部函数。用EXCEL编制一般的工程计算程序还需解决的有以下两个问题:(1)循环计算,(2)表、单曲线、曲线组的查找(如:锅炉设计计算中的焓值)。对于问题(1)循环计算,EXCEL在工具菜单中提供了两个命令:单变量求解和规划求解,利用这两条命令很容易解决问题(1)。对于问题(2)表、曲线的查找,EXCEL没有提供现成的函数,但也可用VLOOKUP、MATCH、IF、OFFSET等函数的组合勉强近视解决,本文重点介绍表、曲线的查找自定义函数的定义及使用。 1 c! e4 {/ H+ _* }7 k * ]: J" M6 ?9 g2 @3 m3 q 为了更好地解决曲线查找的问题,应用C++程序设计语言,用拉格朗日插值计算法在EXCEL中建立了自定义函数,单曲线插值函数TWLQ(变量,"带路径的保存数据的文件名"),曲线组插值函数THLQ(变量1,变量2,"带路径的保存数据的文件名")。单曲线插值函数、曲线组插值函数的"带路径的保存数据的文件"包含着特定对映表、曲线的信息和计算精度的要求 (文件为Notepad编辑的txt文件) 。/ ^3 n- \" Y8 G( z& F 单曲线lagrange插值函数:double twlq(double x,char* filename);& r0 g0 y* s, {% S double twlx(double q,char* filename);. c1 D% l: _/ D1 ^/ t: A 曲线组lagrange插值函数: 6 ^) E3 D* x1 w7 G @ double thlq(double x,double y,char* filename); 2 j& |9 W8 h$ `% { ]- k" X double thlx(double y,double q,char* filename);# K7 U5 O# w0 `3 G9 J6 G double thly(double x,double q,char* filename);。

    4 C) F, q. ?4 ~) a

    例:单曲线插值函数 "带路径的保存数据的文件"结构如下: & f; o' g/ n# D7 T@ Description @; ]$ I- O( w- {8 L& j! O: L: s n, nsel; 3 |* c9 A" D* Cx[0],x[1], x[2],··, x[n-2],x[n-1];/ Y8 f) t) g0 f q[0],q[1], q[2],··, q[n-2],q[n-1];' J0 f# p7 \* @, `1 X/ G6 W6 D/ q, h MinX=0.7,MaxX=0.9,OverRangeAlm=1,X=电压,XUnit=mv,Q=电流,QUnit=mA

    * y, C8 D- R8 q) T

    注解:3 t) o; B0 z4 f0 P% F0 O, Q Description:用户自定义描述字符串(Description中不可有@符号); % l" J! l6 E7 o# w! E% o n: 总插值点个数;/ ^6 V0 U3 }0 ^" P0 { nsel:实际参与插值计算的插值点个数; " o$ e( B. U: S. \ MinX=0.7,MaxX=0.9 取值范围; $ a V* G* `) O5 N OverRangeAlm=1 越限报警 1:报, 0:不报;! O" ~& W2 H$ P, c( p X=电压,XUnit=mv,变量名称,单位。

    $ h% w/ D2 l* I

    ****结论:! v, ^, b; S+ R- n# _ l)图形化界面的插值函数数据文件生成器 LCZMaker 方便快捷生成单曲线或曲线组插值函数数据文件。 . T4 Z2 i9 q0 O# E" S; R- Y, T& x 2)应用EXCEL自定义插值函数,在EXCEL中进行工程计算编程极为便利,比专业编程语言程序设计更易学易用、直观明了,用EXCEL编制的工程计算应用程序更易维护、修改、升级。" x* q' v" S8 S9 ~; A; }* d8 I* s 3) EXCEL本身长于表格制作,在EXCEL中进行工程计算编程人机界面友好,输入前、输出后处理方便简单。 + s: d2 @ u5 O9 V% o 4)在某大型锅炉厂电站锅炉性能设计计算中已显神力。

    / v' n2 x0 e$ Y

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

    1 h4 U0 @+ n+ N* y) f0 A

    [分享]插值软件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. ( j* w0 u5 O. C& c1 n; I# {: d6 ~
    2. /* TODO: Lagrange interpolating
      8 @\" A4 _! n8 G* i2 t
    3. *\" b# `. {* l  q3 N5 Y  I\" b& r; Q
    4. * For example, if lg2.71 = 0.4330, lg2.72 = 0.4346, then lg2.718 = ?0 d' }* g! V: z! y. D5 P& x
    5. * In this situation, it could be solved via lagrange interpolating
      \" z+ v+ f\" ^6 |
    6. *7 |/ X; i  K( R+ n) x6 A. d
    7. * */
        F: S! Z8 y: [; d4 r6 _* ~

    8. 0 H8 V$ U2 ]5 u\" p
    9. #include <stdio.h>8 s* ~2 S& w/ S5 t% C
    10. #include <stdlib.h>
      7 e8 N0 d1 W, S% E* S7 T
    11. #include <string.h>
      0 L1 G' T' W2 ~2 [$ z% b7 B

    12. * e7 |+ @7 R) W) R9 v# p
    13. #define DEBUG 0
      & H: J$ p9 W. r3 q6 w

    14. ; N  U7 j) F4 @3 @+ e2 M
    15. static float m_p = 0.5635;2 l' a) f\" C8 u% p
    16. static char *m_xi = NULL;
      ; Q( s# ]+ O; F  S9 l2 S% O
    17. static char *m_yi = NULL;7 \1 Q# B5 D3 _\" d8 v8 L
    18. static float m_arr[] = {};
      + }$ `/ q3 U; z3 O7 b
    19. static unsigned int m_n = 0;
      # k* Y' C# Y/ z: q2 \) F' W
    20. . }) b$ ?& e5 {7 h3 \  x5 L
    21. static void m_lagrange_interpolating_usage();7 T7 ]5 |/ ]- \' g- J
    22. static int m_lagrange_interpolating_set_n_arr();4 r: d% ~6 m5 `( e8 x3 L\" [
    23. static float m_lagrange_interpolating();
      , I# I3 [; y9 }; e; w% ?4 `7 p+ |
    24. 1 x# _6 F7 F, G
    25. static void 9 j1 n\" E1 h9 z8 E- y
    26. m_lagrange_interpolating_usage() 9 K6 J- F) i6 }7 j7 E
    27. {! E; R0 i! o, G- x) C+ Z
    28.   printf("Lagrange Interpolating Usage:\n");$ h5 A1 r3 H4 _\" [! z7 I) G: j
    29.   printf("bin/li -p ** -x ** -y **\n");
      # I( g4 G\" ]' J3 v8 m; F4 i& A
    30.   printf("-p 0.5635\n");
      \" d* [0 E8 {. G: G; q2 I
    31.   printf("-x 0.56160,0.56280,0.56401,0.56521\n");
      # f; A3 ^: l) x
    32.   printf("-y 0.82741,0.82659,0.82577,0.82495\n");+ m; ?$ J; A! D& d
    33. }( V' S, Y3 B$ Y4 v3 g4 j# S( S

    34. 1 F: g) q* d! N6 q( ~1 v
    35. static int / M) a8 n, G$ Q
    36. m_lagrange_interpolating_set_n_arr() . Q\" Z\" Z1 k* c- a, r+ D
    37. {\" l5 _) [9 W3 [3 D\" P+ A2 b, V
    38.   int xi_n = 0;. L: ^& L6 l6 ?6 ^  h5 g
    39.   int yi_n = 0;
      5 o3 X7 ~2 x3 v2 e8 o6 S9 U
    40.   int n = 0;
      . M) `- Y\" R# |/ O6 B
    41.   char *token = NULL;
      ' ~7 r; L. C. b! `+ `% n
    42.   const char *delim = ",";1 x* f6 _1 \. K

    43. 1 e  B& R# ~9 d; ]* @
    44.   token = strtok(m_xi, delim);
      9 `7 a& d2 `, h
    45.   while (token)1 K\" Y) {5 d- I$ E8 l4 A\" U3 T+ I; C# h
    46.   {
      1 k/ G# K4 L( y5 g3 w7 s8 P
    47.     xi_n++;
      ( n+ n1 ]9 n+ M/ E* d1 O
    48.     n++;+ H/ F2 \* z; G, o0 q+ X
    49.     m_arr[n] = (float) atof(token);
      6 k' ^  l7 ~* A1 K% w
    50.     token = strtok(NULL, delim);6 Q5 J- n$ Q3 `+ `7 d
    51.   }
      ' s# D2 C  f* ]) Y8 ^

    52. \" |6 V/ H8 ]4 m% V9 N* N% T. j
    53.   token = strtok(m_yi, delim);
      4 y0 R, y( }' l$ M: o
    54.   while (token)
      - Y( `6 W+ l& m0 F8 F
    55.   {\" r6 S$ G- N' |/ N$ {
    56.     yi_n++;
      9 J. f/ w/ m0 @  ~  L) H, R/ ~/ r
    57.     n++;
      $ c+ R2 H! B) a9 Z  V1 i
    58.     m_arr[n] = (float) atof(token);0 r, x3 n7 h2 ?# m* B$ g0 C3 _7 ]\" W
    59.     token = strtok(NULL, delim);
      - O6 T+ y' A$ r5 X\" }9 O& J
    60.   }, Y7 ]3 G0 ~1 r' J5 l- X; m
    61.   
      % E8 N$ m7 y, ~
    62.   if (xi_n != yi_n) % k% ~- @) u' k; a$ [
    63.   {: F, o8 {: D  L3 Y0 v1 c5 Y
    64.     return 0;* a: b- n6 f8 L9 W3 G
    65.   }
      ( `+ C* ]% J$ q+ ?; V

    66. 1 y8 i2 r, D3 W( v# }
    67.   m_n = xi_n = yi_n;
      0 n1 \, S$ b4 `3 P: Z3 l

    68. 8 _, j& b6 z) W( G3 d
    69.   return 1;) Z  L# U* P. g4 V4 ?& e( N/ y4 L
    70. }
      4 ^\" Y1 c% S+ }6 G! }9 ?( [

    71. + O' }+ ]5 O4 G, \! S  O
    72. static float 1 x7 J/ t( q- B
    73. m_lagrange_interpolating() ! z' Z4 t' i2 J/ j
    74. {
      4 {7 q  C5 y5 g5 u0 W
    75.   float l = 0.00000;
        R$ t! ]: u: P  y% {( W8 S6 |
    76.   float li;! [% ]) q4 l, Z! L% Q- t
    77.   int i;
      : M1 i) W5 g+ j% B\" E
    78.   int j;
      - [. |: _; w/ u* o' m: k; v
    79. , G$ l- v) ]* u
    80. #if DEBUG
      $ J; k6 `+ l3 l/ @! y
    81.   printf("DEBUG at %d: enable debug mode\n", __LINE__);1 {4 O4 K! @3 s( e5 v
    82.   unsigned int m_n = 3;
      0 X/ q  K+ R  q
    83.   float m_p = 0.5635;/ f* a/ w- P% C# O
    84.   float m_x[] = {0.56160, 0.56280, 0.56401, 0.56521};
      ' Z# y' A: C; W
    85.   float m_y[] = {0.82741, 0.82659, 0.82577, 0.82495};
      / |, O+ ?. r) r
    86.   / D3 ^6 W  S4 d3 Y. ~! e
    87.   for (i = 0; i < m_n; i++)
      7 M  \6 s8 a! ^; B% ?
    88.   {
      $ t  q# i6 X6 ^% i! E
    89.     li = 1.0000000;
      ! f0 l, ]8 ]- q5 o+ u
    90.     for (j = 0; j < m_n; j++)1 @( g6 v3 t1 v6 M
    91.     {
      4 a/ v5 S& e+ i' V7 s, w% @
    92.       if (j != i)( b- D* T- l% C, f4 Q4 o
    93.       {8 J( O# p( R, G: |9 [9 r' o
    94.         li = li * (m_p - m_x[j]) / (m_x[i] - m_x[j]);
      % |' F$ U/ b3 `# r2 f4 N* y
    95.       }
      ; b* b1 ~$ _' `, D/ \
    96.     }* `% x! R9 ^6 O* s  D( e
    97.     l = l + li * m_y[i];
      7 O! b4 V7 F, u5 e( F2 L- `
    98.   }+ }7 Q5 L$ d8 l2 o' O  J: A# O
    99. #else8 ~5 R0 ?1 E* A
    100.   if (!m_lagrange_interpolating_set_n_arr())
      4 `& S& j9 h7 [1 I5 v& N+ K
    101.   {9 f6 ?1 O) F. ]9 N% W
    102.     printf("Error: xi and yi counter is diff\n");$ k: S' d) e  [# B! c; v  L- ~
    103.    
      # V. ]! Z\" A, A4 S4 J6 O
    104.     return 0;
      , t. p/ f0 |! G; n# W
    105.   }. M( `$ M3 ~) ^# h. N( e: a# P. j# G
    106.   [7 R* P9 }: d+ _3 s+ o* B7 [
    107.   for (i = 0; i < m_n; i++) - L2 s& S\" i6 k  h
    108.   {
      : Z3 h: D# U\" V' @6 O- B4 J
    109.     li = 1.0000000;
      + @, _* u8 J7 r/ F  e# b* T
    110.     for (j = 0; j < m_n; j++) ) G: x$ J3 \1 g, o3 v5 ~
    111.     {. @% r8 M4 W0 }/ Z, k: _+ V
    112.       if (j != i) ! q9 Q. u; y! k$ l& |0 t9 C
    113.       {
        B. ]: \4 R# w9 P2 f
    114.         li = li * (m_p - m_arr[j + 1]) / (m_arr[i + 1] - m_arr[j + 1]);4 E# J1 Q4 ~' ?2 x+ ^+ f
    115.       }' O3 R) C0 S+ r9 _9 w
    116.     }2 k/ N& a0 E/ p6 k, H7 k1 w, g8 U
    117.     l = l + li * m_arr[i + m_n + 1];. {6 v9 \+ Z5 ]/ _) J# w
    118.   }
      ! `( H8 |0 r7 x3 m5 \1 @
    119. #endif; q9 I; A2 a. Z: ~1 ^\" X5 P

    120. # C. {. L* R3 c& j
    121.   return l;+ e5 \  |2 x8 Y% Y1 G
    122. }
      & ^* G5 q- V' Y- G; s* o
    123. 4 u, Q* S. J! R* `; k3 Z1 J
    124. int
      & a6 V1 p  J% h
    125. main(int argc, char **argv)
      8 n* ^8 Q' b5 \3 `) O% }; g& r* R4 m3 D
    126. {
      1 {& A% k2 t$ m9 |7 S$ Z
    127.   int c;
      % q/ h1 \7 F& a& `2 Q+ z9 \' w
    128.   extern char *optarg;
      ; o\" z- G' w; ~9 q- C  i
    129.   float res;+ `2 E' G2 ]/ G\" Q. u3 W

    130. \" R0 k/ Y4 q( A$ ?  g# D- ]9 W- K2 M  d) X
    131.   if (argc < 2)
      + y+ ^7 ]7 k5 z! T
    132.   {
      5 R! |6 \; P) r5 M\" f6 K. B) F
    133.     m_lagrange_interpolating_usage();) m2 p) Q+ h6 D- W4 g; l
    134.    
      0 h* t$ N0 f6 X\" u0 N1 @
    135.     return -1;8 R1 S$ }- M! Z7 Q( ]
    136.   }
      & K+ y9 v$ V5 q+ u. \6 l# f/ d
    137. : _, t9 q, Q5 L2 D
    138.   while ((c = getopt(argc, argv, "p:x:y:")) != -1)
        a2 T0 E2 z5 K+ g* W* z0 j2 q! A
    139.   {
      + h, ~# S0 y. ^8 e. z& W# [
    140.     switch (c)
      0 R# P, w% U+ V- B+ h  x
    141.     {# v6 u$ d& `/ T
    142.       case 'p':
      3 N+ R7 h: J& p; q1 F& f; ~1 @
    143.               m_p = (float) atof(optarg);
      2 q\" ^& r4 P/ ^+ ^) N
    144.       case 'x':2 j: d. P) c5 j; [! ]
    145.         m_xi = optarg;9 U0 u9 T/ F8 L! p. x
    146.         break;0 R' D. h3 H\" d$ }5 }3 l3 ]5 G) t9 r
    147.       case 'y':. j3 R% v$ l/ t# v/ Q; c$ z5 r5 O
    148.         m_yi = optarg;
      / Q9 i( h\" {/ S% G2 H
    149.         break;
      6 q+ S) m; j/ C; {, J+ }4 N& t1 z
    150.     }, V% K9 d& G- ?$ n* L/ X
    151.   }
      ' o% `. S8 ?& o8 b( V, f0 T
    152. 4 U) D% y! k3 [3 d& `  k
    153.   res = m_lagrange_interpolating();/ `/ `, U\" N' {- Q
    154.   printf("Lagrange interpolating with %.4f result is %.7f\n", m_p, res);! i7 `4 @* c3 r# e1 E: v! M7 M2 n
    155.   - P  E' v# d7 @& x  h
    156.   return 0;
      ) i4 a  _  m2 d
    157. }. s6 P2 W: c6 w; E/ U$ y1 M
    复制代码
    回复

    使用道具 举报

    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 12:37 , Processed in 0.703669 second(s), 104 queries .

    回顶部