QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 22602|回复: 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自定义插值函数插值计算数值计算 ( Z6 ~! k2 ^0 x% e3 P8 F! g版本号: 04y09m28' t+ Y" B# I) _9 W; P8 g: I2 ] 分类: 工程设计应用1 m- ?- ]" u; V- L6 l 性质: 免费软件 2 f- u! A2 w' B! P- n5 n' y4 b使用说明:

    1 B- e" ^+ H$ @

    人们对EXCEL普遍熟悉的功能是表图的处理,不太知道其在工程计算(如锅炉设计计算)中的应用。复杂的工程计算常常用专业编程语言(Fortran、C、Pascal 等)来编制计算程序解决,用专业编程语言编制工程计算程序往往有下面二个缺点:/ P" B/ J' l7 ~1 N ! f4 U. h! r! K) Q% h4 E 1) 编程语言专业性强,一般工程技术人员难以掌握,由这些专业编程语言编制的计算应用程序的维护、修改、升级都比较困难。

    ! s: [& V, G& C5 n( R

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

    " z* o5 c& H [+ `) G

    EXCEL每一个单元格就是一个电子表格,很容易进行一般的加、减、乘、除、乘方、开方,而三角函数、指数函数在EXCEL中可以直接引用内部函数。用EXCEL编制一般的工程计算程序还需解决的有以下两个问题:(1)循环计算,(2)表、单曲线、曲线组的查找(如:锅炉设计计算中的焓值)。对于问题(1)循环计算,EXCEL在工具菜单中提供了两个命令:单变量求解和规划求解,利用这两条命令很容易解决问题(1)。对于问题(2)表、曲线的查找,EXCEL没有提供现成的函数,但也可用VLOOKUP、MATCH、IF、OFFSET等函数的组合勉强近视解决,本文重点介绍表、曲线的查找自定义函数的定义及使用。# O h$ {5 }* c# s+ |3 o 0 o. ]% F! d! g 为了更好地解决曲线查找的问题,应用C++程序设计语言,用拉格朗日插值计算法在EXCEL中建立了自定义函数,单曲线插值函数TWLQ(变量,"带路径的保存数据的文件名"),曲线组插值函数THLQ(变量1,变量2,"带路径的保存数据的文件名")。单曲线插值函数、曲线组插值函数的"带路径的保存数据的文件"包含着特定对映表、曲线的信息和计算精度的要求 (文件为Notepad编辑的txt文件) 。 . b7 [; c5 f: z" c7 Q单曲线lagrange插值函数:double twlq(double x,char* filename);% J8 v( p4 B/ }7 y' B double twlx(double q,char* filename); & u' @1 {. w, z) w% O6 d6 x. N: [: R* t曲线组lagrange插值函数:' O: ^2 ~$ a4 r5 n3 V2 Q double thlq(double x,double y,char* filename);) u& F# [( |7 ^/ V2 L$ c# d* [ double thlx(double y,double q,char* filename);1 p* E: l9 K* o9 I' Z3 C5 w+ b6 ]" ~ double thly(double x,double q,char* filename);。

    0 i: E/ \( B5 E* r2 A; u8 f

    例:单曲线插值函数 "带路径的保存数据的文件"结构如下: % f+ ?5 `$ |# ~' }- d8 f/ J" K@ Description @ ( H2 U" Q2 j2 U# M n, nsel; 3 V* ]7 @# ~. N( B9 u/ k5 rx[0],x[1], x[2],··, x[n-2],x[n-1]; * _# L- ?0 }, p, e* bq[0],q[1], q[2],··, q[n-2],q[n-1];5 M5 f5 Z# V0 f: h MinX=0.7,MaxX=0.9,OverRangeAlm=1,X=电压,XUnit=mv,Q=电流,QUnit=mA

    7 A* i$ f8 U8 |5 J- h

    注解: I% G4 ~, Y! z Description:用户自定义描述字符串(Description中不可有@符号); " u" H; n/ z$ n$ u2 g& @ n: 总插值点个数; ; W; a3 m! }" q( q3 l nsel:实际参与插值计算的插值点个数; & |8 f' U1 Y, m9 j0 K! @ MinX=0.7,MaxX=0.9 取值范围; 2 H2 d) b: A) }% E1 A7 ^% W, b OverRangeAlm=1 越限报警 1:报, 0:不报;9 F, y7 B1 b: [ f% i w1 `2 n0 V6 { X=电压,XUnit=mv,变量名称,单位。

    5 {9 @4 f, t) d9 @

    ****结论:& r" l( p1 o0 p# O5 g* ~0 [ l)图形化界面的插值函数数据文件生成器 LCZMaker 方便快捷生成单曲线或曲线组插值函数数据文件。 ; _" e2 s, R% g( y3 l 2)应用EXCEL自定义插值函数,在EXCEL中进行工程计算编程极为便利,比专业编程语言程序设计更易学易用、直观明了,用EXCEL编制的工程计算应用程序更易维护、修改、升级。 F( U3 I7 \6 N 3) EXCEL本身长于表格制作,在EXCEL中进行工程计算编程人机界面友好,输入前、输出后处理方便简单。4 g0 b* h) ?) m 4)在某大型锅炉厂电站锅炉性能设计计算中已显神力。

    . Z2 }9 p7 V0 q& p

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

    & s/ u. n ^, t4 \

    [分享]插值软件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. % c2 H. @1 n; E% }# J' f* i: U
    2. /* TODO: Lagrange interpolating , `% ~3 F! n9 i2 p7 f9 i* F# v, ?
    3. *5 i% p# B5 i, K) g
    4. * For example, if lg2.71 = 0.4330, lg2.72 = 0.4346, then lg2.718 = ?6 [, v9 z- u\" R1 ?# F+ |$ a9 n
    5. * In this situation, it could be solved via lagrange interpolating
      $ f% {* B9 @- S% T
    6. *5 i+ s/ t% `! U
    7. * */* ^% O' [% V. q8 J

    8. 8 A4 E% Z! n% K: I- B% ?
    9. #include <stdio.h>
      0 N% t- B5 _! D
    10. #include <stdlib.h>+ T( J; x& M$ I\" [' f/ H- b& w8 ~
    11. #include <string.h># R( X7 l+ g* T9 W$ o. w
    12. # J4 j; w, w8 C- L1 c5 H; b$ F
    13. #define DEBUG 0* {6 X7 k. Y2 P- H/ @. Y  ?\" E
    14. ; X- m8 f+ l2 L$ r
    15. static float m_p = 0.5635;% E/ O( r3 I0 f' K
    16. static char *m_xi = NULL;
      # Z8 F; ^, V$ J8 U$ l  g) H
    17. static char *m_yi = NULL;
      . F7 H; ~: ^* R% Q\" C
    18. static float m_arr[] = {};) C4 s; A$ Y5 _' I+ @' ~9 w  @
    19. static unsigned int m_n = 0;
      ( m/ M6 P6 y# w: ]7 n5 `
    20. 4 d1 C1 G. W* p5 W$ W5 I' T
    21. static void m_lagrange_interpolating_usage();% ~\" g/ L3 c& B% e& I$ i
    22. static int m_lagrange_interpolating_set_n_arr();& T# p! f; r+ s3 q( J/ G) l
    23. static float m_lagrange_interpolating();5 v# o! O' h# L7 E) u: p4 l
    24. % L% }! |% U4 ?1 j  n* Q
    25. static void 8 U2 i/ \- Y7 H1 R
    26. m_lagrange_interpolating_usage() \" i! g, }5 l; L& j  W& Y2 {8 p
    27. {0 l7 T7 a1 V/ h: w4 c: n8 {
    28.   printf("Lagrange Interpolating Usage:\n");8 v, l+ _- h$ }0 S1 @1 I
    29.   printf("bin/li -p ** -x ** -y **\n");
      0 ~, @* ], h& L* x8 h* A
    30.   printf("-p 0.5635\n");
      ( o5 @( ~$ |; a
    31.   printf("-x 0.56160,0.56280,0.56401,0.56521\n");! d8 H1 n5 T  b; a: [
    32.   printf("-y 0.82741,0.82659,0.82577,0.82495\n");
      5 C) ?  p, K; F  J. {
    33. }' D  @/ M( K9 o4 I

    34. ' K( m4 @0 K) ~# r% D
    35. static int
        R7 V% y; [% |/ X8 p2 t
    36. m_lagrange_interpolating_set_n_arr()
      6 h; E0 ^  X2 F, o( p7 ~0 I1 z* ]
    37. {
      ! o  L7 U6 N4 d2 l0 L
    38.   int xi_n = 0;3 y3 t- k' h3 Z: f/ g6 e) ?) K/ _
    39.   int yi_n = 0;2 f; D0 G/ y! Z( c: D8 t. N: n
    40.   int n = 0;# U9 d- b; x+ S- w
    41.   char *token = NULL;
      & G0 }/ c7 l$ c3 N
    42.   const char *delim = ",";& J' F) q6 s' A5 w2 L; [( z. j
    43. 5 i$ G1 ?) k2 x$ J5 T9 L; c\" \& _
    44.   token = strtok(m_xi, delim);
      6 ]* H\" _9 [, q
    45.   while (token)5 U5 J% p! x, q- K' F
    46.   {2 G& u1 a/ }2 X% U
    47.     xi_n++;' c* P5 F- K1 F: J* J4 O
    48.     n++;9 [+ m- j' l$ v
    49.     m_arr[n] = (float) atof(token);
        `7 d6 ?' c+ r+ S8 M
    50.     token = strtok(NULL, delim);( Z/ r4 @7 R& B. B
    51.   }
      ) n9 @3 f6 F, r* U. ]

    52. . e& h9 M' I- j8 T6 {- k
    53.   token = strtok(m_yi, delim);
      ; g/ R8 K' Y0 T$ [6 @1 V. I; Q- `
    54.   while (token)- ~; [) S8 h( T( R. f/ S$ j
    55.   {
      % b5 B6 R5 D3 \/ @& I$ P' K& y
    56.     yi_n++;, Q/ @/ U8 ]7 \0 a
    57.     n++;; n: b! ~8 k4 }% a: P
    58.     m_arr[n] = (float) atof(token);
      # J' h. r; s0 N) }  M* m
    59.     token = strtok(NULL, delim);6 d3 J5 |. t2 D* L* l\" i
    60.   }7 z$ p) \2 K1 O
    61.   
      9 s/ K6 e: }( L7 ^7 A5 }
    62.   if (xi_n != yi_n)
      # O2 Q! A- M: l% C
    63.   {
      * e( T6 ~, @7 j! M\" I
    64.     return 0;# g# ~# s0 X) U, @3 E! z
    65.   }6 F' E6 z. |0 q1 g
    66. 8 {2 S' v5 X( W* C& H9 M& C
    67.   m_n = xi_n = yi_n;
      , C# ]8 T' V5 j

    68. ' C7 Z0 l: W5 l& [& m
    69.   return 1;
      ) i6 O, W; r. d1 E3 n* L) P4 y
    70. }
      # E5 s7 H) Q! B( O7 L4 I

    71. + t. }\" C' }- u& m' x& E
    72. static float
      , A# A7 e7 i/ f0 Z% L  I* E
    73. m_lagrange_interpolating()
      9 `\" H9 S  @4 ~) w
    74. {9 Q\" P4 U* d# G- o# R$ D
    75.   float l = 0.00000;( `; L2 E8 q2 V/ |\" L% ^
    76.   float li;
      9 ?( f\" R  L5 @* m$ ?' w0 q
    77.   int i;
      - u1 s/ q- z\" t* _: x  x
    78.   int j;  ?1 P9 C& i! ?  v; G8 ~
    79. ; F5 |+ S7 M3 d# W
    80. #if DEBUG/ z2 g' ^$ P1 c: n; k, E
    81.   printf("DEBUG at %d: enable debug mode\n", __LINE__);
      9 L  U7 Z+ y9 ]! `+ k5 v$ h
    82.   unsigned int m_n = 3;7 S7 Z  E1 V/ q: R' _( c. E
    83.   float m_p = 0.5635;+ R7 k, S$ j) d: l+ Z
    84.   float m_x[] = {0.56160, 0.56280, 0.56401, 0.56521};$ X: G5 T0 ^8 C+ P! D* h
    85.   float m_y[] = {0.82741, 0.82659, 0.82577, 0.82495};* P9 K$ J1 |( Z. c# ^2 Q
    86.   
      - u\" u6 Z6 y% D/ C: |
    87.   for (i = 0; i < m_n; i++); `; x/ Y6 h5 i4 L; p* q
    88.   {4 l3 |% n1 z! N# n$ L
    89.     li = 1.0000000;' N7 H3 w0 f& o7 U, t
    90.     for (j = 0; j < m_n; j++)
      % [; Z' p6 Y( ^/ [9 e& G
    91.     {' t, v/ s4 j4 h; u
    92.       if (j != i)
      1 j. v4 w. W( c\" V7 g2 {4 e
    93.       {
        G9 O  F/ V; b7 S
    94.         li = li * (m_p - m_x[j]) / (m_x[i] - m_x[j]);5 ~4 Y- s# s( F' c7 Z\" }/ b+ ?& q2 Q
    95.       }; G  ~3 ]- B) }7 \; V
    96.     }
      ) f+ O+ t3 v4 g+ h' y# Q
    97.     l = l + li * m_y[i];0 F( t4 Q# v2 \: ?1 W% s5 M8 t' E
    98.   }
      6 b% r3 E\" }6 R8 `* T2 x
    99. #else
      / u) B' r' p# F
    100.   if (!m_lagrange_interpolating_set_n_arr())
      5 B) \4 B! C. l$ Y4 g
    101.   {
      4 p: T! N$ |. c7 z8 B
    102.     printf("Error: xi and yi counter is diff\n");1 x+ ?$ x( B2 g1 X& P& X3 B
    103.    
      5 N+ }1 Q: e\" g& O( w: J2 X2 A
    104.     return 0;
      ! T- h$ }5 o3 R
    105.   }
      3 I5 E' d& ?' Y& B

    106. 6 [* [* k# g8 a\" L
    107.   for (i = 0; i < m_n; i++)
      3 P. E5 ^5 {* `* C6 x3 R
    108.   {7 ?7 K) M; H6 Q5 h1 T% S  F
    109.     li = 1.0000000;3 a# K! k/ H$ H5 J3 V
    110.     for (j = 0; j < m_n; j++)
      * c/ U' B4 D# |
    111.     {
      ) y  O/ {7 m5 b* X( @
    112.       if (j != i) 6 d+ E2 \0 |6 j+ @
    113.       {
      4 `2 Q. Y' x4 E  D. C
    114.         li = li * (m_p - m_arr[j + 1]) / (m_arr[i + 1] - m_arr[j + 1]);
      ) l! H8 c, s. ]
    115.       }( j# c1 ?5 W. M' D1 v; L. @
    116.     }* B# v+ Y- X% C3 R1 P  f# V
    117.     l = l + li * m_arr[i + m_n + 1];
      7 N* c+ _: ]+ U$ f
    118.   }
      \" v8 W1 w3 i3 I# y! G
    119. #endif
      # Q6 T% I. [' D  H; X+ P0 C
    120. , n4 w1 y7 G; F; {* s) |, b) i
    121.   return l;
      % k( \3 B7 u! p3 o# R
    122. }
      ' H  u8 p# ~- @& d. p) }4 D+ H+ z4 X) W$ q
    123. - }( _- K: {4 X, [9 K4 b
    124. int
      6 ]9 B4 _: r% U( v2 w9 t5 t* J! m6 y
    125. main(int argc, char **argv) ) o% W+ ?0 K- d  ?$ x
    126. {0 ]% N2 p\" H) E# P$ {
    127.   int c;
      4 s/ H9 p3 q/ ]& C# }8 R
    128.   extern char *optarg;
      : h. p, j- h+ m* \
    129.   float res;$ V! s% {. }2 k# I+ z) M
    130. % l' `! ]! z( C7 Z1 m( o3 z3 S
    131.   if (argc < 2) 5 y8 z. Z: P* [  ~7 j
    132.   {* N1 [* D  r1 Q! d$ I
    133.     m_lagrange_interpolating_usage();) ?7 W  g1 V7 H8 K3 A/ Q
    134.     # O: ~2 o! I! [9 z, }
    135.     return -1;
      , z8 Z4 u1 _3 F1 o# G& ]% z
    136.   }
      7 ~\" p5 i& K: T

    137. 4 Z7 @/ o9 r% p5 |
    138.   while ((c = getopt(argc, argv, "p:x:y:")) != -1) 2 Q: |! z! X+ U( N. u0 x* c
    139.   {
      2 Q7 X( i! L% H2 l+ P$ p1 k4 P
    140.     switch (c) 1 X\" f3 m3 U( v4 M4 x8 j) X8 }+ c$ |3 w+ O
    141.     {
      % p( O- V: U; M: H  S9 H/ v) ~1 S\" R- [
    142.       case 'p':$ X3 _7 P6 A' H. h' `0 ]
    143.               m_p = (float) atof(optarg);
      ; O5 _9 s( @\" ]( _, K' D
    144.       case 'x':! R4 B; p* l2 Y) |3 j
    145.         m_xi = optarg;9 T: M& v8 E8 ^# `9 m7 I- Q1 M
    146.         break;
      9 s$ _( i5 W% A
    147.       case 'y':) N8 a8 w/ G3 P$ Y* L
    148.         m_yi = optarg;# T& m2 ?7 t2 \8 Z5 Q4 m8 `7 W
    149.         break;: j\" N, E- }! Y$ }0 f
    150.     }5 M5 Z. S; ]& U. e3 F
    151.   }
      # D3 _' U, s( W: j0 b

    152. + S/ l4 d& F. G
    153.   res = m_lagrange_interpolating();
      ' {- N0 S) }8 s) R# h
    154.   printf("Lagrange interpolating with %.4f result is %.7f\n", m_p, res);
      # u$ ^/ O. c  h1 p5 u; _; e
    155.   
      # ]5 _. B! @+ m% P  S
    156.   return 0;: {' f# f3 v' _! e
    157. }
      5 a  ?) j/ h. q# n
    复制代码
    回复

    使用道具 举报

    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-9-13 18:06 , Processed in 0.925854 second(s), 104 queries .

    回顶部