QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 22403|回复: 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自定义插值函数插值计算数值计算 7 c* h- j- l# A! M" }6 f版本号: 04y09m28 6 g y# @* z( q: n! }' U分类: 工程设计应用 ' u f0 o5 ?: C* C" M& @, M0 ?性质: 免费软件0 s, e5 u: g+ I 使用说明:

    % k* K. @$ @. t$ ?, T+ O

    人们对EXCEL普遍熟悉的功能是表图的处理,不太知道其在工程计算(如锅炉设计计算)中的应用。复杂的工程计算常常用专业编程语言(Fortran、C、Pascal 等)来编制计算程序解决,用专业编程语言编制工程计算程序往往有下面二个缺点:% {: R9 ~1 {0 O1 f, K% _% E0 s 0 M; W& E, K2 c: u2 B 1) 编程语言专业性强,一般工程技术人员难以掌握,由这些专业编程语言编制的计算应用程序的维护、修改、升级都比较困难。

    / N; E4 e6 B; m E" R0 @

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

    ; \9 @5 I1 Y- m3 N6 S0 V

    EXCEL每一个单元格就是一个电子表格,很容易进行一般的加、减、乘、除、乘方、开方,而三角函数、指数函数在EXCEL中可以直接引用内部函数。用EXCEL编制一般的工程计算程序还需解决的有以下两个问题:(1)循环计算,(2)表、单曲线、曲线组的查找(如:锅炉设计计算中的焓值)。对于问题(1)循环计算,EXCEL在工具菜单中提供了两个命令:单变量求解和规划求解,利用这两条命令很容易解决问题(1)。对于问题(2)表、曲线的查找,EXCEL没有提供现成的函数,但也可用VLOOKUP、MATCH、IF、OFFSET等函数的组合勉强近视解决,本文重点介绍表、曲线的查找自定义函数的定义及使用。6 @( ~- ]+ x9 }2 g# A # R+ c( b+ A) ~$ o" l1 c 为了更好地解决曲线查找的问题,应用C++程序设计语言,用拉格朗日插值计算法在EXCEL中建立了自定义函数,单曲线插值函数TWLQ(变量,"带路径的保存数据的文件名"),曲线组插值函数THLQ(变量1,变量2,"带路径的保存数据的文件名")。单曲线插值函数、曲线组插值函数的"带路径的保存数据的文件"包含着特定对映表、曲线的信息和计算精度的要求 (文件为Notepad编辑的txt文件) 。 1 r+ h" J8 s, E单曲线lagrange插值函数:double twlq(double x,char* filename);& Q& Z9 C# U# `1 f) R" ] double twlx(double q,char* filename);" t' l, v$ w- J# w& p0 A 曲线组lagrange插值函数:5 @3 R& k- Q3 [ double thlq(double x,double y,char* filename); 6 F! C7 Y* H3 | double thlx(double y,double q,char* filename); # j6 L$ j4 d5 }) |4 q double thly(double x,double q,char* filename);。

    ( ]7 z2 m; z* n7 D5 ]

    例:单曲线插值函数 "带路径的保存数据的文件"结构如下: & v( {4 k$ c: n3 d8 ]@ Description @ 6 ^- A( Q( W! x3 u1 T( l n, nsel; 6 p! w5 A+ F# Q/ j" kx[0],x[1], x[2],··, x[n-2],x[n-1];, O4 L3 \2 [% f7 y2 G q[0],q[1], q[2],··, q[n-2],q[n-1];3 P* _1 Y6 x; L! \) a4 C, C% y& @ MinX=0.7,MaxX=0.9,OverRangeAlm=1,X=电压,XUnit=mv,Q=电流,QUnit=mA

    5 p, v: D4 |6 s& j

    注解: 2 u( h/ f3 ]7 D3 G1 Z: C Description:用户自定义描述字符串(Description中不可有@符号);, e9 t- e* Y3 C& N% W' }' Q0 `1 ~ n: 总插值点个数; b' V; ]# Y6 [, Y( |: m nsel:实际参与插值计算的插值点个数; ) B3 \5 O& Y' H+ P! Z' y2 X MinX=0.7,MaxX=0.9 取值范围; ' r( p8 G7 f6 \5 A* G OverRangeAlm=1 越限报警 1:报, 0:不报;4 ~# A7 i$ y, b0 @& E; V X=电压,XUnit=mv,变量名称,单位。

    / S$ }5 m1 S* b8 l& F

    ****结论:7 v" ^" W7 w) K2 B l)图形化界面的插值函数数据文件生成器 LCZMaker 方便快捷生成单曲线或曲线组插值函数数据文件。 ! {3 \+ b3 F3 K* T9 C 2)应用EXCEL自定义插值函数,在EXCEL中进行工程计算编程极为便利,比专业编程语言程序设计更易学易用、直观明了,用EXCEL编制的工程计算应用程序更易维护、修改、升级。 k6 K5 [# D& n5 W/ D% B 3) EXCEL本身长于表格制作,在EXCEL中进行工程计算编程人机界面友好,输入前、输出后处理方便简单。 0 S' D4 X$ ?3 R% X 4)在某大型锅炉厂电站锅炉性能设计计算中已显神力。

    " _+ U# A* B( R7 ~ ^4 H2 M$ D

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

    ' I2 j" J7 o! {0 x4 `$ t" E' `

    [分享]插值软件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. $ @+ {. z& Z- m! ~3 ]
    2. /* TODO: Lagrange interpolating
      # S1 N! s  ?) n( c1 C
    3. *
      - f  p3 i: ^) r, u\" z
    4. * For example, if lg2.71 = 0.4330, lg2.72 = 0.4346, then lg2.718 = ?
      # d+ a: d, a+ O+ u
    5. * In this situation, it could be solved via lagrange interpolating1 d9 O2 j$ E$ J. _6 n( [# S) C
    6. *
      : ^' v) n& x8 x* x# H+ ~8 Z
    7. * */
      ! S\" u- |& Y! F/ P* T\" C9 @# Y

    8. + B' C9 D* E4 I' B! [
    9. #include <stdio.h>( p; N! D* v# A- u\" G9 h% r
    10. #include <stdlib.h>9 r\" G8 _6 x; {
    11. #include <string.h>& X+ @2 Q  s+ c7 ]
    12. ) \6 [) D* M# X$ P. q
    13. #define DEBUG 04 I/ L8 |0 ]6 u. [, q' q

    14. 1 K4 q4 J* h7 M\" G9 T# i
    15. static float m_p = 0.5635;
      * J$ x: T7 e8 R\" K
    16. static char *m_xi = NULL;
      0 e  {7 z( j/ P8 |. x3 P
    17. static char *m_yi = NULL;. O\" s8 p: H5 Q- g# s' t! F' _0 u
    18. static float m_arr[] = {};, f% _: O7 E, {
    19. static unsigned int m_n = 0;
      : g6 i\" u5 e; |\" V

    20. $ j) n* t! X! f' j
    21. static void m_lagrange_interpolating_usage();
      4 O! q; R3 y' F) X/ g' @  v- G' x
    22. static int m_lagrange_interpolating_set_n_arr();
      $ D& i/ e( b# T$ T
    23. static float m_lagrange_interpolating();
      # @: k: \( S7 U$ X+ N
    24. 3 P6 N( ?3 g. s\" m6 H
    25. static void ' _' Z, t% F; Y& F- ]# G- y
    26. m_lagrange_interpolating_usage() 1 g. O0 J$ C5 g8 P
    27. {. {+ s! o, S$ j1 ]
    28.   printf("Lagrange Interpolating Usage:\n");& `3 u& K( r2 Y* }3 z: Q
    29.   printf("bin/li -p ** -x ** -y **\n");
      $ V1 T' |' C# u* P7 N  Q
    30.   printf("-p 0.5635\n");8 ?5 F* V$ U  l  E5 t0 \
    31.   printf("-x 0.56160,0.56280,0.56401,0.56521\n");- Y8 m2 l+ R  S' W
    32.   printf("-y 0.82741,0.82659,0.82577,0.82495\n");2 l5 t2 {2 q+ d; w8 ?
    33. }
      ) `- `5 s' @3 _$ w0 s. A9 r7 i

    34. : D) X) f& P2 d
    35. static int
      - o; f  E# L  ?, C\" F( ?
    36. m_lagrange_interpolating_set_n_arr()
      $ D, R\" d: X4 i5 C) Q
    37. {5 k0 R' M! }5 |7 y' Z. C) _# F
    38.   int xi_n = 0;
      ; l8 g5 B5 ^2 S. g
    39.   int yi_n = 0;
        k8 b' ^$ |' m; R* I) Y. n8 s
    40.   int n = 0;
      ( }' A2 ~2 i- H& G7 d, i* P# X# c
    41.   char *token = NULL;
      % c3 {5 W, N0 e\" ?) c/ }
    42.   const char *delim = ",";
        z* \& m8 L; X. \\" m
    43. . z7 j, Y  e\" y) p9 t' t
    44.   token = strtok(m_xi, delim);
      1 p) i! M' A) L# ]! F8 D
    45.   while (token)9 L# W0 j5 w. a2 S8 R
    46.   {# p. z' y/ n  r- S* J! k- A0 C$ q
    47.     xi_n++;9 ]% b\" d\" g\" J% Z* ?
    48.     n++;) @7 E5 ^\" `/ S2 d+ J
    49.     m_arr[n] = (float) atof(token);
      8 }0 T- r. [5 \7 u
    50.     token = strtok(NULL, delim);
      : C8 h* B+ U0 U
    51.   }4 j5 v\" p2 I0 {  ^
    52. . C' W$ v% u2 z' n2 w: }) o
    53.   token = strtok(m_yi, delim);4 j* F3 Y/ ~1 X. D8 \
    54.   while (token)
      5 D, B, s% C5 v( N) z' o' e
    55.   {: _/ e6 Q  X2 X$ e9 x
    56.     yi_n++;- \9 {& O+ u1 t6 O
    57.     n++;# W+ C\" ~; A% z/ a. u- n5 A
    58.     m_arr[n] = (float) atof(token);6 Y) d8 x$ L+ T; _; \) d3 E( i
    59.     token = strtok(NULL, delim);# t* j2 O6 L. p' m
    60.   }& J* U/ ~6 @* _: P  u, |8 q
    61.   7 T0 W% O8 k1 L
    62.   if (xi_n != yi_n)
      7 P0 J0 O; X3 Z# G; g( d- x
    63.   {& F$ `2 i( }/ v# o- R3 _
    64.     return 0;
      + D\" w* g/ O! x\" ^. Q* u
    65.   }\" }7 @& h, X7 J) K\" a. S& J
    66.   p6 O2 R) \% A
    67.   m_n = xi_n = yi_n;
      0 I4 E- @: C- T: K

    68. ( q/ l8 F' L7 ~3 I( ^, ~
    69.   return 1;\" M/ X* T, b$ d: E; h3 B2 M4 {
    70. }
      7 n( i( q2 \9 f* P

    71. ; c- Y5 A+ g# ]7 H- Q
    72. static float
      / v& C& ?# W- k8 w) w
    73. m_lagrange_interpolating() , `0 a8 P7 @7 }0 S7 N5 k% }
    74. {0 j\" @* o7 [, m+ m$ ?' N
    75.   float l = 0.00000;: j: |) \* t# _/ u1 L: k2 y; R
    76.   float li;
      + @) t4 o; T  R: ~( X1 U. c0 C' Z7 Y) i+ K
    77.   int i;
      \" Z+ x8 B) E, f( ]: D# _
    78.   int j;! w! B* r: g: r

    79. ) [) y8 b# a) m$ J3 S( t
    80. #if DEBUG
      : @' ?2 f7 m$ T8 B3 r1 V
    81.   printf("DEBUG at %d: enable debug mode\n", __LINE__);' K6 k- v' k6 H: `
    82.   unsigned int m_n = 3;4 I$ U+ o) b+ @* W& b
    83.   float m_p = 0.5635;\" [- W) Y1 l7 Q* Q7 ]% n
    84.   float m_x[] = {0.56160, 0.56280, 0.56401, 0.56521};
      ! a# X( _, b8 ]- b) \* ]
    85.   float m_y[] = {0.82741, 0.82659, 0.82577, 0.82495};
      4 n) M+ c' J; n
    86.   
      4 [, _% ], H* l: f0 z
    87.   for (i = 0; i < m_n; i++)- K\" `, s6 }. A
    88.   {5 V  z1 S$ ^4 _
    89.     li = 1.0000000;7 w& B7 A\" d% N  A( n9 H5 |
    90.     for (j = 0; j < m_n; j++)- S% r3 m% X3 P& @5 D- ^( G0 l
    91.     {
      ) _* b% S$ o( _* z
    92.       if (j != i)/ Y' \1 h8 k  y1 T\" ]
    93.       {2 y\" W7 e5 ?! H! ~; ~+ y% R
    94.         li = li * (m_p - m_x[j]) / (m_x[i] - m_x[j]);
      ) r( a7 a7 z! f3 G4 O
    95.       }4 i; x+ `4 q1 _0 l2 q
    96.     }; R  g- q+ W- k! I7 a( \. Z
    97.     l = l + li * m_y[i];% X* G% {# Q3 O5 H+ i9 k
    98.   }
      1 K  I( r2 T  C/ w: O) N1 s
    99. #else
      : E2 @! J) x% C+ g
    100.   if (!m_lagrange_interpolating_set_n_arr())
      1 I0 ^5 q* e3 {0 d
    101.   {; P2 _( E3 `/ H/ a- }# [
    102.     printf("Error: xi and yi counter is diff\n");
        K  b: u& T! G$ h% u; O9 \- B7 Y
    103.    
        `, P! R. e( h' `3 T, T) m
    104.     return 0;
      % t7 E\" o  B$ r# l- l, _
    105.   }
        R3 t- ~7 k& g

    106. 1 e: K0 i% D( d
    107.   for (i = 0; i < m_n; i++) + K* p9 U0 w. ?' t/ j! Z7 M+ X- v
    108.   {: a$ r% t+ c8 ]  l) E9 h
    109.     li = 1.0000000;; ^( a: A; k2 O% j, R& n  {0 W5 u
    110.     for (j = 0; j < m_n; j++)
      ' @0 @+ D: F0 y& F- k: K7 o
    111.     {
      : ?! w6 V& ?6 [3 h1 s
    112.       if (j != i)
      9 _3 O/ k. @, Z- W! |: p9 S
    113.       {
      - X! z& m\" X7 l) {/ w! @! h
    114.         li = li * (m_p - m_arr[j + 1]) / (m_arr[i + 1] - m_arr[j + 1]);# g3 w/ b7 j% }5 h7 m- P
    115.       }
      7 T2 h' H2 b* v* j
    116.     }
      7 H1 w4 e, g: @. E, O: }2 N
    117.     l = l + li * m_arr[i + m_n + 1];* W\" q. M/ B8 h( l* a
    118.   }
        y3 e8 z- P( t% y8 C7 v
    119. #endif' w3 @3 ^7 G) B$ f- q1 T
    120. 2 y' A1 U, R# D( l% v
    121.   return l;
      # f: M2 M. y9 l9 q\" a1 d
    122. }/ J3 n* e. n5 ]- Q9 U9 S

    123. ; }  X& \0 e. P
    124. int 7 t5 o% P1 [) G. n
    125. main(int argc, char **argv)
      # Y; p8 p4 J. S
    126. {4 {4 U8 p* f! V! N- q: l0 X
    127.   int c;: ?: e. Q  m' [\" P
    128.   extern char *optarg;
      , g$ {  J& h\" z\" t  t8 F
    129.   float res;
      , D. K: G0 I' I% q- a; M

    130. . g; A$ ]2 q! ]\" R2 b
    131.   if (argc < 2)
      + o+ u' P3 `& k/ C
    132.   {$ }' q% Y! [4 w1 |8 d
    133.     m_lagrange_interpolating_usage();* V. [+ A* V1 W
    134.     % S& A5 M: D5 e, V7 D' R& i9 m9 W
    135.     return -1;3 e1 v0 i$ G\" @/ B0 i  ]
    136.   }
      ' C3 P& V/ G* {. D- A  p- e
    137. ( d. F, m6 @5 b4 o$ ~2 g! h
    138.   while ((c = getopt(argc, argv, "p:x:y:")) != -1)
      0 r* ?, j* l. o  [3 d2 ?# E
    139.   {
      2 E* e5 P- T5 l
    140.     switch (c)
      ; G) a  U' J; {
    141.     {
      ( E, h1 W  z+ t$ ?9 g- r6 N
    142.       case 'p':7 w3 v+ C' |7 X$ ?\" B
    143.               m_p = (float) atof(optarg);( J- @( z  H( `3 W
    144.       case 'x':5 t* |* H8 ^& @0 E7 H; ?! c
    145.         m_xi = optarg;: g\" k6 T6 K$ Z- L\" E) k\" u
    146.         break;
      . B/ O6 _0 c2 e
    147.       case 'y':. K9 p- f8 y# j+ d
    148.         m_yi = optarg;\" G% E! B\" q- f3 g/ P/ O( d3 Z\" U
    149.         break;
      . f  k3 q$ Z( U& k3 Y5 M8 m
    150.     }
      + q/ M* j6 j\" ^# S) n: \) J; z1 ^
    151.   }
      - Q9 ?( r& b& _/ `- n5 H8 ~) T8 C

    152. $ h4 M0 i, v! n* s8 o
    153.   res = m_lagrange_interpolating();
      + f8 b\" z, Q9 [$ J/ h, l/ p: e
    154.   printf("Lagrange interpolating with %.4f result is %.7f\n", m_p, res);- m, \! ?, l- L- b, c
    155.   
      ' F6 ]  Q& Z7 O# A/ M# }
    156.   return 0;
      * e2 T/ v) D* @! m) \. ^
    157. }
      ! @( m0 d( r* d. U& Y
    复制代码
    回复

    使用道具 举报

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

    回顶部