QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 22146|回复: 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自定义插值函数插值计算数值计算 ' I" K- O: X. j, K版本号: 04y09m28 & I# g0 w; B5 K( ^* z分类: 工程设计应用: k8 t/ n. n# c 性质: 免费软件 / f/ o3 x7 G- u- H, ^使用说明:

    * j7 {* a$ I) y, P' P

    人们对EXCEL普遍熟悉的功能是表图的处理,不太知道其在工程计算(如锅炉设计计算)中的应用。复杂的工程计算常常用专业编程语言(Fortran、C、Pascal 等)来编制计算程序解决,用专业编程语言编制工程计算程序往往有下面二个缺点:- ]9 ~; T0 x' w- d 1 _( ~! A! I5 c3 G, r) \ 1) 编程语言专业性强,一般工程技术人员难以掌握,由这些专业编程语言编制的计算应用程序的维护、修改、升级都比较困难。

    8 |8 K& g, }0 L- G/ w

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

    & H0 B. R4 X- @/ x' m8 d' S0 ?0 k4 \

    EXCEL每一个单元格就是一个电子表格,很容易进行一般的加、减、乘、除、乘方、开方,而三角函数、指数函数在EXCEL中可以直接引用内部函数。用EXCEL编制一般的工程计算程序还需解决的有以下两个问题:(1)循环计算,(2)表、单曲线、曲线组的查找(如:锅炉设计计算中的焓值)。对于问题(1)循环计算,EXCEL在工具菜单中提供了两个命令:单变量求解和规划求解,利用这两条命令很容易解决问题(1)。对于问题(2)表、曲线的查找,EXCEL没有提供现成的函数,但也可用VLOOKUP、MATCH、IF、OFFSET等函数的组合勉强近视解决,本文重点介绍表、曲线的查找自定义函数的定义及使用。 & r) M6 {# w8 Z: d1 m; B/ C" E( c ! Y" y% R, a. ~8 B! C 为了更好地解决曲线查找的问题,应用C++程序设计语言,用拉格朗日插值计算法在EXCEL中建立了自定义函数,单曲线插值函数TWLQ(变量,"带路径的保存数据的文件名"),曲线组插值函数THLQ(变量1,变量2,"带路径的保存数据的文件名")。单曲线插值函数、曲线组插值函数的"带路径的保存数据的文件"包含着特定对映表、曲线的信息和计算精度的要求 (文件为Notepad编辑的txt文件) 。 N: W- s) k- z单曲线lagrange插值函数:double twlq(double x,char* filename);7 \1 e, {4 C, n, D% ^+ P4 z$ e double twlx(double q,char* filename); 3 Q$ o4 ^# B7 _, O! o6 D$ ]曲线组lagrange插值函数: 0 F$ i v/ s; l) ]# u3 z# G. a% K double thlq(double x,double y,char* filename); ) [: ]& v6 U3 x: j/ x double thlx(double y,double q,char* filename);6 q; D# J* m7 F3 \ double thly(double x,double q,char* filename);。

    7 H! n: ]1 t- @2 v, I# q

    例:单曲线插值函数 "带路径的保存数据的文件"结构如下: ) k, Q$ ?4 R& ]. u. C2 g@ Description @* P( N, A) k, G X# ` n, nsel;8 b H0 |) F: s/ l9 e x[0],x[1], x[2],··, x[n-2],x[n-1];9 g2 N2 N9 D% g! ?8 q$ U" a7 g q[0],q[1], q[2],··, q[n-2],q[n-1];5 G; j3 `. S: m- Y/ I MinX=0.7,MaxX=0.9,OverRangeAlm=1,X=电压,XUnit=mv,Q=电流,QUnit=mA

    , f* G! s# [3 L

    注解: / `" d: C/ B! r. N8 m Description:用户自定义描述字符串(Description中不可有@符号); $ b9 W1 u$ z9 y$ P n: 总插值点个数; 5 t$ l% A* P5 K8 d9 z nsel:实际参与插值计算的插值点个数; ( Y7 C3 ^, A+ Y9 S MinX=0.7,MaxX=0.9 取值范围;! w+ p R- [, Z0 ^) H OverRangeAlm=1 越限报警 1:报, 0:不报;/ u+ ^+ E0 [9 F: S# n X=电压,XUnit=mv,变量名称,单位。

    `* e. r: F0 r4 r9 D+ W5 J

    ****结论: 5 s# U- i. N% K/ U) G% Y) m5 A l)图形化界面的插值函数数据文件生成器 LCZMaker 方便快捷生成单曲线或曲线组插值函数数据文件。 6 ]3 l( r3 }$ O* a2 [ 2)应用EXCEL自定义插值函数,在EXCEL中进行工程计算编程极为便利,比专业编程语言程序设计更易学易用、直观明了,用EXCEL编制的工程计算应用程序更易维护、修改、升级。 ' t0 r+ }% }2 e; O* p1 r! n 3) EXCEL本身长于表格制作,在EXCEL中进行工程计算编程人机界面友好,输入前、输出后处理方便简单。% C4 U% I: J' ^- E' u, G 4)在某大型锅炉厂电站锅炉性能设计计算中已显神力。

    " u* G& x$ ~1 r& N

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

    : B! W, X: E" x% Y

    [分享]插值软件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. * |. r( s( E% b& U# a9 c\" {) f, [
    2. /* TODO: Lagrange interpolating
      * _- O8 ]/ r/ ?+ s- X7 N) s8 a
    3. *. O  @5 W% N9 X! q% Y. A4 v8 ~
    4. * For example, if lg2.71 = 0.4330, lg2.72 = 0.4346, then lg2.718 = ?' \2 b; y& v7 F, Q' W% Z' B
    5. * In this situation, it could be solved via lagrange interpolating4 O+ B9 P  d/ z8 G# l* [: L
    6. *) V6 n' X- P& i; N
    7. * */% b0 D; X; U; R- R% }

    8. 3 ~6 v, _3 R\" R+ m: W$ y
    9. #include <stdio.h>6 v; s1 P6 o6 U% T( k% s9 y+ j
    10. #include <stdlib.h>
      # z. `7 {4 {% g7 s; V/ o0 U
    11. #include <string.h>2 P& d! z\" ^' z7 T9 _( }9 E: i$ ?
    12. 1 ^0 x: o; H4 e, s9 B
    13. #define DEBUG 0
      $ e& w\" Z  D4 d5 n
    14. $ E  x: x$ Z! C3 |. G
    15. static float m_p = 0.5635;8 S, Z; m; E* ?8 j/ C9 U; ]\" U
    16. static char *m_xi = NULL;
      % M# m0 V- B2 y1 s
    17. static char *m_yi = NULL;  d: Q0 D8 J) Y9 Y: z) U
    18. static float m_arr[] = {};
      9 E- n: V/ a+ |2 r5 ]: Y
    19. static unsigned int m_n = 0;
      . k6 _1 |$ q% {+ ~8 c

    20. 1 {  n. g0 ], c3 Y
    21. static void m_lagrange_interpolating_usage();
        S% H  }; P# ~  A5 B1 ^
    22. static int m_lagrange_interpolating_set_n_arr();
      * w' N3 O! W, m9 c
    23. static float m_lagrange_interpolating();
      / W  ^5 ^8 v! u/ a

    24. $ D2 R0 ~+ e) l8 j) H8 T7 @
    25. static void + h4 y: V  m' v# G
    26. m_lagrange_interpolating_usage() * ^2 c9 J\" z& l4 z) T
    27. {
      ; k/ h6 U# B0 P4 ~
    28.   printf("Lagrange Interpolating Usage:\n");
      ) i* I0 y2 `$ i# j; g! \
    29.   printf("bin/li -p ** -x ** -y **\n");\" R9 F: M\" ~5 `% w3 g/ S
    30.   printf("-p 0.5635\n");7 x$ C1 z/ K8 y5 e8 o\" }  C! Q
    31.   printf("-x 0.56160,0.56280,0.56401,0.56521\n");
      9 W0 L3 [/ q/ ^4 y- R6 x: a
    32.   printf("-y 0.82741,0.82659,0.82577,0.82495\n");3 I- q( G! _; e/ _; b
    33. }+ y+ @( o* ?; y/ x  P) D1 V

    34. 4 H) Q- n0 t! E
    35. static int
      8 [( I2 k4 z2 T' a0 `
    36. m_lagrange_interpolating_set_n_arr() * E! p0 K5 @7 v4 P0 K) O
    37. {
      $ J! R1 u( g5 o+ F0 T: s7 k/ y0 k3 N
    38.   int xi_n = 0;1 g2 A- _! W8 D9 k5 q0 m5 i' \
    39.   int yi_n = 0;
      ( z, e! r; s9 v8 H
    40.   int n = 0;
      & ?9 l0 C6 y* W
    41.   char *token = NULL;
      + N& d; N' h$ |; z2 D% ~  a# n( l
    42.   const char *delim = ",";# q\" b% U3 u/ Y7 q6 G

    43. ; v8 z' D# R& H$ Z! _9 W
    44.   token = strtok(m_xi, delim);8 V' v2 b( y& O+ w9 v9 N' o
    45.   while (token)
      2 }3 U+ v3 O$ z
    46.   {4 R6 x; I$ |6 D
    47.     xi_n++;! L\" ~: C  b' P. Z% R
    48.     n++;0 `6 k- y: l4 f& f9 U$ C
    49.     m_arr[n] = (float) atof(token);' _0 q& P: x4 j* e
    50.     token = strtok(NULL, delim);
      # X8 l0 D+ n6 [& X6 a2 `\" r
    51.   }( V- C/ [8 i; y7 T! s0 X

    52. \" b0 q! J8 n$ D. z& m
    53.   token = strtok(m_yi, delim);
      : M. S4 e7 ~) Q7 l$ V( M- w
    54.   while (token)
      - l7 i\" n( t, t9 n$ b& c2 U, t* ]
    55.   {$ C- @$ _6 P) z3 B, c
    56.     yi_n++;8 N& O* q' m) ]+ I4 p, S
    57.     n++;4 e4 J. y6 b# f9 p7 J% F+ n
    58.     m_arr[n] = (float) atof(token);
      ( }; r7 y- Z9 y) v( h. Y
    59.     token = strtok(NULL, delim);1 c' Q& b# E0 c. X6 h9 K4 I6 C
    60.   }
      8 z# Y/ M' G& M3 ?
    61.   6 K, A4 X. L9 [/ C9 H. f
    62.   if (xi_n != yi_n) 3 R* _8 `6 k* k1 u5 g; l
    63.   {\" N6 ~( l- u8 V, f\" F8 H# ?$ }2 D
    64.     return 0;7 {# ]! Y' f  V
    65.   }
      : y: q8 x8 Q! j8 W8 g( V
    66. - P& d# p( H, d
    67.   m_n = xi_n = yi_n;
      \" r* ?4 J9 C) l

    68. ) ~# x* x/ E1 ~' `+ N( r5 `
    69.   return 1;* o$ V+ f) f8 b) }4 M& U2 W
    70. }, ~% _6 B( m  {; X8 _4 I
    71. * K0 M( {/ x) q1 @0 o  i  \
    72. static float
      5 s& \9 Z& N4 q+ c0 u5 b
    73. m_lagrange_interpolating() ( v4 e3 [/ q) K, }
    74. {) D% h* {7 }, V$ W: b( h8 }: ^
    75.   float l = 0.00000;
      . z4 J) m( e7 H5 [2 B
    76.   float li;& C- c: {$ Q' m  D
    77.   int i;) T# m) I& B7 k& G7 ?) {
    78.   int j;
      / |; U4 L( Z# |9 P

    79. 0 l' W* ~4 B- D- N1 Y+ _\" E\" D
    80. #if DEBUG0 l8 G5 R; m# K1 T
    81.   printf("DEBUG at %d: enable debug mode\n", __LINE__);
      8 \$ U3 P. L+ h! U; Q: `8 v3 L
    82.   unsigned int m_n = 3;4 t. m/ o; _2 R1 M) {  B
    83.   float m_p = 0.5635;
      % w& ^7 E\" W& M- K, ?$ G0 K9 N
    84.   float m_x[] = {0.56160, 0.56280, 0.56401, 0.56521};
      . g: t. X- h- i+ i9 c' Y
    85.   float m_y[] = {0.82741, 0.82659, 0.82577, 0.82495};! b# i6 B. X, d1 _- [& w
    86.   
      , |% L2 `7 v2 T0 K1 z6 r' L
    87.   for (i = 0; i < m_n; i++): `% m! r# }8 v) T& [
    88.   {
      % d; u* W5 v# M\" J, o( t
    89.     li = 1.0000000;
      ) X& `# n* o0 B% Q
    90.     for (j = 0; j < m_n; j++)
      \" c8 g0 i# ~5 R- G# X4 P2 {- g- b
    91.     {# N\" S' U) W* E9 s& T# T
    92.       if (j != i)) ~8 t5 Z# f\" B$ m; b% E# L/ o
    93.       {% v- s\" ]\" J8 f% [% Y* [; o
    94.         li = li * (m_p - m_x[j]) / (m_x[i] - m_x[j]);
      0 q( @( `- P# s4 l
    95.       }3 H0 D' U: h- n: s: |- N9 {
    96.     }
      ' E2 ^% v  \/ l# o& W( d7 K
    97.     l = l + li * m_y[i];
      \" {/ P( `  M) c5 w) c+ V
    98.   }
      5 a( O& `& X$ H$ g/ y/ C
    99. #else' t+ w5 ]\" s' }1 B6 Z) P4 K
    100.   if (!m_lagrange_interpolating_set_n_arr())
      ( W7 E. F4 C) y. n
    101.   {
      - `, r, v\" t# \7 g6 t6 t: a
    102.     printf("Error: xi and yi counter is diff\n");) c: ~  j6 F% [1 N6 }3 G
    103.     ( w6 P. [' _% {5 a
    104.     return 0;
      7 l\" q$ o. U  |- m9 x% m1 c! `
    105.   }
      % R7 C3 @& C( y' J. n

    106. 5 v2 H+ l( Q/ x$ m8 _; e
    107.   for (i = 0; i < m_n; i++) : v$ ]# k7 X\" U7 \8 Y8 l
    108.   {
      3 ~5 M* C+ g5 q) W6 o  [
    109.     li = 1.0000000;
      7 I' W\" H7 b7 Q  i# ]2 j
    110.     for (j = 0; j < m_n; j++)
      * ^- z. p  q/ c( S: y% Y0 N& @$ t
    111.     {, j# P$ h/ ^4 x! r5 N1 l
    112.       if (j != i)
      5 k6 }$ l9 m' z9 ?9 x2 F
    113.       {- |% \. R1 X\" `( y
    114.         li = li * (m_p - m_arr[j + 1]) / (m_arr[i + 1] - m_arr[j + 1]);2 g& x* I& _' u$ D9 H
    115.       }
      - S% K( K% A/ F* o6 o' f# X! X+ w
    116.     }
      6 }7 @+ A2 {) |) ?, v- D. H2 n+ U) Z( D
    117.     l = l + li * m_arr[i + m_n + 1];
      4 o! n6 F7 ?\" R; r- j* m, q
    118.   }
      6 c  f5 z9 i8 B: O0 j5 T- |( V2 h
    119. #endif. e# B1 q# K( ?2 Q+ e0 [: I2 ~% v) ]

    120. 0 b4 m- A9 P& }/ v6 X
    121.   return l;! P/ E, u/ I$ S* o
    122. }4 f  W$ ~# O% M. _6 N( N0 j

    123. $ U/ J, @/ s/ m- V6 \
    124. int ; U1 G# r2 V0 A# r# a4 v+ t6 f
    125. main(int argc, char **argv)
      6 v$ `/ ^( R9 k( f
    126. {& n$ u2 W, S$ R, g
    127.   int c;
      ; N6 B- |( n9 K+ b
    128.   extern char *optarg;' l9 ~8 Q( D; h( ?, X, F- t
    129.   float res;
      1 y9 V\" Q' z, J; A( l
    130. 6 A\" `5 a* q8 x+ q5 ^( v- ]* e0 b
    131.   if (argc < 2) - i\" n' F3 f5 W- j* x8 T7 a$ |  n
    132.   {
      ; h! W0 |9 f! \; p9 ^: r
    133.     m_lagrange_interpolating_usage();
      ' I/ R. f, I4 i1 S0 b  Y
    134.    
      3 w+ E; A# R! r\" X7 s0 k$ x: z
    135.     return -1;) J' a% v9 r$ e3 m  \% M\" x
    136.   }
      \" |5 j+ X5 `( X# }& ?
    137. # _$ W/ g# `' T5 N3 X! F5 Z) R
    138.   while ((c = getopt(argc, argv, "p:x:y:")) != -1)
      / J5 [\" _1 z' T2 o4 o
    139.   {
      \" d2 x8 z' @1 _, K/ ~& P. }
    140.     switch (c) + I5 q/ K2 l. T7 |! z7 [7 {0 j
    141.     {
        H$ Y3 R  Y( ]
    142.       case 'p':8 z/ O) P% ?7 [4 ?, e9 r6 ^
    143.               m_p = (float) atof(optarg);
      / s8 ?/ T+ @  H7 V+ X; _
    144.       case 'x':. p& H) j8 m8 R# E* J$ Y
    145.         m_xi = optarg;0 I4 Z$ F) s8 b' }% o6 B) M
    146.         break;2 D# y/ N3 E0 r# c/ ]( t
    147.       case 'y':6 M( J; `5 u% Y
    148.         m_yi = optarg;
      8 T+ i7 \) D* h  {! G. h1 m
    149.         break;
      : K5 v9 L: X: {# Z+ n. w  {\" O# N
    150.     }
      9 D: `9 Z0 j! e. ]; G
    151.   }, I! G: c( r& |& e* R+ F2 O4 W) e! ^

    152. * ]: n, c( u# J6 i/ q. a7 b+ J
    153.   res = m_lagrange_interpolating();& k3 n! a, O- U
    154.   printf("Lagrange interpolating with %.4f result is %.7f\n", m_p, res);
      ; j* w% y. \- V! I% R/ a# [$ X$ Q! H
    155.   ' b5 N2 M. ~/ z5 [- }9 ]% U
    156.   return 0;
      $ m# |. r4 y$ t, n\" F* F3 r* m1 `
    157. }% W4 B& b2 w; ^! z: v1 l
    复制代码
    回复

    使用道具 举报

    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 07:52 , Processed in 0.495851 second(s), 105 queries .

    回顶部