QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 22604|回复: 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自定义插值函数插值计算数值计算4 c+ [9 N! D* W: |8 V$ M4 n 版本号: 04y09m28% B$ U$ F. V/ x9 C/ N 分类: 工程设计应用) V& j6 d4 T1 S% u 性质: 免费软件 ! w5 K6 u/ Q9 K' k+ @! F使用说明:

    * k$ }* }; p6 T* G8 l" a

    人们对EXCEL普遍熟悉的功能是表图的处理,不太知道其在工程计算(如锅炉设计计算)中的应用。复杂的工程计算常常用专业编程语言(Fortran、C、Pascal 等)来编制计算程序解决,用专业编程语言编制工程计算程序往往有下面二个缺点: ) G6 X! v7 J1 a/ u" b; s ) _' y3 R; H. _1 @ 1) 编程语言专业性强,一般工程技术人员难以掌握,由这些专业编程语言编制的计算应用程序的维护、修改、升级都比较困难。

    * b* o+ |) [' X8 B/ p

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

    3 |4 ?+ j, F+ f6 n

    EXCEL每一个单元格就是一个电子表格,很容易进行一般的加、减、乘、除、乘方、开方,而三角函数、指数函数在EXCEL中可以直接引用内部函数。用EXCEL编制一般的工程计算程序还需解决的有以下两个问题:(1)循环计算,(2)表、单曲线、曲线组的查找(如:锅炉设计计算中的焓值)。对于问题(1)循环计算,EXCEL在工具菜单中提供了两个命令:单变量求解和规划求解,利用这两条命令很容易解决问题(1)。对于问题(2)表、曲线的查找,EXCEL没有提供现成的函数,但也可用VLOOKUP、MATCH、IF、OFFSET等函数的组合勉强近视解决,本文重点介绍表、曲线的查找自定义函数的定义及使用。 ! e& e3 @) D: d$ f9 }5 l- ^ 5 ~6 p. k. g( ?5 P 为了更好地解决曲线查找的问题,应用C++程序设计语言,用拉格朗日插值计算法在EXCEL中建立了自定义函数,单曲线插值函数TWLQ(变量,"带路径的保存数据的文件名"),曲线组插值函数THLQ(变量1,变量2,"带路径的保存数据的文件名")。单曲线插值函数、曲线组插值函数的"带路径的保存数据的文件"包含着特定对映表、曲线的信息和计算精度的要求 (文件为Notepad编辑的txt文件) 。 * K# u1 P( }$ D) o v单曲线lagrange插值函数:double twlq(double x,char* filename); 0 M1 R" E G4 m# i6 @ double twlx(double q,char* filename);' i7 O# n; ]0 U& M 曲线组lagrange插值函数: . a7 h+ K) N; k8 r% r double thlq(double x,double y,char* filename);3 k) L% a" t; _9 k* L) j double thlx(double y,double q,char* filename); 9 W6 m6 y) u. B9 T8 P! {6 \9 l& V double thly(double x,double q,char* filename);。

    , S k3 \, I4 [

    例:单曲线插值函数 "带路径的保存数据的文件"结构如下:9 C5 O: w, M/ O8 Z# { @ Description @ ' A. {5 F& t+ u3 `* h: y' R n, nsel;- J) n. e. ?4 e) ` x[0],x[1], x[2],··, x[n-2],x[n-1];* I% B* j; `* h* W4 X8 O q[0],q[1], q[2],··, q[n-2],q[n-1];, z3 y4 Z9 z$ p" r MinX=0.7,MaxX=0.9,OverRangeAlm=1,X=电压,XUnit=mv,Q=电流,QUnit=mA

    6 P+ j* L$ F0 |1 J- S# [

    注解: * Z p, ^$ K9 W, \# a4 S U Description:用户自定义描述字符串(Description中不可有@符号);$ k, M. W) e+ B& M n: 总插值点个数; 3 P; A& r8 ?$ t8 \- t nsel:实际参与插值计算的插值点个数; 9 _7 O- ?# Q$ p9 @9 F2 V) \ MinX=0.7,MaxX=0.9 取值范围;% M7 R7 Q6 Q* C$ u" d. {. @ OverRangeAlm=1 越限报警 1:报, 0:不报; * X: v, {! f4 v, x+ D" { b X=电压,XUnit=mv,变量名称,单位。

    " k$ ~6 a$ N" N

    ****结论:1 X# ]& h. |, T$ _% b } l)图形化界面的插值函数数据文件生成器 LCZMaker 方便快捷生成单曲线或曲线组插值函数数据文件。9 R) u o4 \8 w6 I J' l y 2)应用EXCEL自定义插值函数,在EXCEL中进行工程计算编程极为便利,比专业编程语言程序设计更易学易用、直观明了,用EXCEL编制的工程计算应用程序更易维护、修改、升级。 9 f' l# @0 u( R' n- u0 v 3) EXCEL本身长于表格制作,在EXCEL中进行工程计算编程人机界面友好,输入前、输出后处理方便简单。 - y3 |3 r4 _$ {8 g0 [1 c& ]% X: [5 x 4)在某大型锅炉厂电站锅炉性能设计计算中已显神力。

    3 f) x, O# M9 t& f+ Y

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

    ! d6 b0 }" g- Z/ @4 }/ f

    [分享]插值软件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. 0 |6 K4 g) q% ]/ @
    2. /* TODO: Lagrange interpolating 6 N% Y6 q. u. {$ j4 @6 Y6 T2 L
    3. *
      8 q0 m+ j( p/ d, `% l
    4. * For example, if lg2.71 = 0.4330, lg2.72 = 0.4346, then lg2.718 = ?' w9 H8 `5 U8 x% D6 q6 U
    5. * In this situation, it could be solved via lagrange interpolating
      6 a+ I+ S: y- P7 _
    6. *
      ' E6 T. t$ f7 x$ x3 `3 h
    7. * */# C0 [8 }3 C4 L/ k' H% n. t6 y
    8. 5 J7 k  L* ~7 U
    9. #include <stdio.h>7 ]9 B+ T4 i) B: V; i
    10. #include <stdlib.h>- }6 r\" Y* L+ p8 G$ K3 }
    11. #include <string.h>$ o9 r3 [! X  v

    12. 2 m9 N& Q8 z5 @9 t
    13. #define DEBUG 0, Q3 J9 l) b( {0 H, L! X5 h- x

    14. $ u( S$ X2 Q- @) E, n4 o
    15. static float m_p = 0.5635;5 O* p, t0 O0 v  {
    16. static char *m_xi = NULL;4 M- t! }# F\" v
    17. static char *m_yi = NULL;
      / K4 N9 K: a. R\" J/ B$ g( M, L
    18. static float m_arr[] = {};+ l7 g9 c3 D* }- j( \2 \2 \/ l3 w# p
    19. static unsigned int m_n = 0;# O7 T2 |* {, G: m0 Q6 B. s
    20. : O6 Y4 h8 D# r6 `* L$ O  p( u- i
    21. static void m_lagrange_interpolating_usage();
      % [3 h8 h8 d& A
    22. static int m_lagrange_interpolating_set_n_arr();0 u( X$ `1 C) H/ S9 c4 e
    23. static float m_lagrange_interpolating();
      6 V. k; v) N\" [0 o1 o
    24. : S5 a4 T& Z3 p- f
    25. static void ( \% w- `' ^% }: f! c/ I  d3 Y6 j
    26. m_lagrange_interpolating_usage()
      # g- @9 ?  k( O5 }7 d& W
    27. {* S+ J, z. a+ s( \1 L8 j+ I
    28.   printf("Lagrange Interpolating Usage:\n");
      ! B! m; ~\" i. y; R4 q8 u) e
    29.   printf("bin/li -p ** -x ** -y **\n");
      - u8 I/ a# ]! J! x/ I: q, @
    30.   printf("-p 0.5635\n");: ^, P6 I  Y( i
    31.   printf("-x 0.56160,0.56280,0.56401,0.56521\n");8 k& `8 _) _% o, j* l7 r
    32.   printf("-y 0.82741,0.82659,0.82577,0.82495\n");
      - a( _$ M& F, o5 J5 J
    33. }& b* M: `: F. H/ @% L

    34. 7 g9 z6 e4 M$ E- Z- K
    35. static int
      ! [) l, e# ]5 O6 V$ d9 K
    36. m_lagrange_interpolating_set_n_arr()   q5 x3 C  `! P) P
    37. {# F: R0 |+ r, J9 p0 N# ~0 L
    38.   int xi_n = 0;
      ; q7 G2 l0 D6 R7 I  }! z
    39.   int yi_n = 0;$ {# r/ L5 Y1 H# |* Y
    40.   int n = 0;- |+ K5 c1 B0 n' F- h* r
    41.   char *token = NULL;, g% L& B: m, a/ L# y$ z
    42.   const char *delim = ",";6 N9 x6 e* H, t# n1 C8 H
    43. 0 z& ]3 J* M. m# s
    44.   token = strtok(m_xi, delim);4 e' k% Z/ ^  x  T8 H/ A8 A- S* }
    45.   while (token)) c# s+ h1 Y3 }: O, f. v% y8 b/ f7 b
    46.   {\" g$ W. D6 [- v( `- ?% ^+ E
    47.     xi_n++;* B* L/ n7 }$ }3 d9 d
    48.     n++;9 z\" u5 I& P\" ~) H  ]+ y+ `0 S\" O6 p
    49.     m_arr[n] = (float) atof(token);! E) G& o7 a# o' W( N7 d\" x
    50.     token = strtok(NULL, delim);
      - n1 p7 W# O* T8 l9 W! ^9 |
    51.   }/ s- |! b! y; e5 [+ T3 N

    52. - J. f, p\" X! u# z+ R; Y% s2 W\" T
    53.   token = strtok(m_yi, delim);
      1 A2 h' `* ]) t  t9 J
    54.   while (token)/ k\" P\" G7 _$ C. o# w' [
    55.   {9 b4 a5 s- ?0 ~! }* r: v6 n7 [
    56.     yi_n++;8 A  j( m3 {1 _5 V7 `
    57.     n++;9 }# o\" u, E$ ]( }\" D
    58.     m_arr[n] = (float) atof(token);
      8 G6 m* r8 H; N' C, a8 u* s0 t8 _
    59.     token = strtok(NULL, delim);
      1 G3 t% v. q5 v
    60.   }
      ' f( M$ i# \& e  \
    61.   
      ( m% @- ~# o2 @& e1 F, T
    62.   if (xi_n != yi_n) 1 f) a* O4 N% J\" D3 a8 r
    63.   {# j! q* {- c& Y5 ^. m
    64.     return 0;
      8 U# F' G( b3 g\" G4 y% v- V3 L
    65.   }; b  Q1 Q\" p4 E* N0 C$ G
    66. ; V/ Q5 a1 U) z  p
    67.   m_n = xi_n = yi_n;6 G5 s- ]6 U9 w0 ~( J
    68. 9 Z5 r5 M6 t4 Q8 p: _1 z' [
    69.   return 1;1 Q! u# {3 j3 o# d' Y\" g
    70. }5 e5 P2 T) Q0 Z+ N; r+ f7 k
    71. ) |: I% n/ U8 ?
    72. static float
      $ F* H6 s! d5 J\" N, K. X. c5 l1 s
    73. m_lagrange_interpolating() 5 f; }* D- q& o' K7 A1 ]. Q
    74. {
      9 |; o- A, C% w+ ?
    75.   float l = 0.00000;+ [: T: c8 m\" @9 Z
    76.   float li;7 z: v4 l/ M* r% q; z- E& H% E
    77.   int i;
        S+ F! g# }- Z( x$ |9 R/ Z
    78.   int j;& Z3 b- ^3 f3 e

    79.   v3 T4 _6 f5 u& n7 S& g6 v
    80. #if DEBUG5 F' l  U; R+ f
    81.   printf("DEBUG at %d: enable debug mode\n", __LINE__);% c. }; l8 X; f7 X+ I9 O. P' }5 z
    82.   unsigned int m_n = 3;( A# z5 W& c* f5 `) X3 z4 O
    83.   float m_p = 0.5635;# S/ D& w; |7 v
    84.   float m_x[] = {0.56160, 0.56280, 0.56401, 0.56521};+ D0 s; ?/ g0 _) K
    85.   float m_y[] = {0.82741, 0.82659, 0.82577, 0.82495};
      0 i9 K\" F7 h2 v/ W
    86.   
      2 U) \% C& w6 Z) {# u9 N
    87.   for (i = 0; i < m_n; i++)4 P8 |1 T6 O) i* K\" D4 @
    88.   {
      0 L. V( D( V  j* B$ b5 @1 v; A% c
    89.     li = 1.0000000;* y  D+ b4 k$ s5 [\" Q0 p$ t
    90.     for (j = 0; j < m_n; j++)\" ]4 A- ^& O! X* h2 u1 a+ |
    91.     {) A+ o9 H* D: n
    92.       if (j != i)
      5 ~. Q* _0 Z- X2 c6 t. W
    93.       {
      0 x) T/ @; f' b- ~
    94.         li = li * (m_p - m_x[j]) / (m_x[i] - m_x[j]);
      % J+ y% t* R, I# o9 U% h
    95.       }- L+ |# Q9 P5 u\" U
    96.     }
      - Y: v9 n; {$ T0 ~\" p  |. g3 p* N
    97.     l = l + li * m_y[i];
      9 D7 z+ K5 j- z& Q4 w6 K/ O
    98.   }
      ) m# V3 N; M. J
    99. #else
      4 b6 H* I/ K& m) F9 V
    100.   if (!m_lagrange_interpolating_set_n_arr()) 5 O* Z1 L) U/ K  i
    101.   {7 W* M5 J\" h/ s. b
    102.     printf("Error: xi and yi counter is diff\n");, h% R* c& E9 G; s5 B6 c
    103.     * K. o% U, A' @! S/ n) ?
    104.     return 0;) O, _9 J) P1 w) e2 s
    105.   }
      & o/ z% I7 Q& m' ?
    106. 4 {5 I7 P6 q9 O3 e1 T) P  W* C
    107.   for (i = 0; i < m_n; i++)
      2 |' O( {; n2 @3 W
    108.   {
      + L1 ~1 E! P4 y# d( I3 _- v# h
    109.     li = 1.0000000;
      6 g; Q9 A# c1 n) N
    110.     for (j = 0; j < m_n; j++) 5 j/ g$ r7 n; P
    111.     {- g1 l1 H9 x7 ]) v
    112.       if (j != i)
      # f. s$ ?+ o! `- ?* {
    113.       {$ v7 m8 W  t* @
    114.         li = li * (m_p - m_arr[j + 1]) / (m_arr[i + 1] - m_arr[j + 1]);
      ; H  ^: C9 `+ v( S, n7 Z
    115.       }  M2 j- i0 @$ T0 W' l) {4 M7 y( e
    116.     }
      & a7 @\" H' W! t- S  u
    117.     l = l + li * m_arr[i + m_n + 1];( Y. n; x& t/ a! Q5 ~2 L
    118.   }\" {7 H\" Z  |, M
    119. #endif8 k- i7 l; [5 V' N
    120. + _! ^; j1 Z2 z
    121.   return l;+ V; i( L' O4 A2 e9 {! j, {
    122. }
      , K5 Y/ K  j9 p6 b
    123. % P/ b\" R$ \6 L* A; z
    124. int - i. b1 F7 @9 U
    125. main(int argc, char **argv)
      2 O/ y9 y\" g! X) p/ a; V
    126. {
      & k. F  e' a8 D& F3 M: d
    127.   int c;
      \" |2 A3 S7 ^+ H\" V9 k
    128.   extern char *optarg;
      3 a3 h! M, I: N/ X' v& W# F
    129.   float res;( ~4 J3 Z6 \! J5 y/ v& j

    130. 5 }( d8 W+ [; w, _6 A) \
    131.   if (argc < 2) 7 T1 b\" @\" h4 U9 q+ `% U9 _  S
    132.   {% A( v- C0 ~+ a$ T; r+ k1 W
    133.     m_lagrange_interpolating_usage();9 }5 b* ?. ]6 _' o0 S7 m# y$ U
    134.     + @1 ^) E; K0 W4 Q+ B
    135.     return -1;6 J) f0 P% y: c. r\" [/ U% z5 M
    136.   }
      / ]0 o* ]* Q5 f/ W- u. r- s

    137. - g( \/ Q- h\" a\" _
    138.   while ((c = getopt(argc, argv, "p:x:y:")) != -1)
      & M* d  K: T3 x: F6 {9 k) w
    139.   {
      5 F9 C$ u& k6 y: z, Q+ [
    140.     switch (c) : ~$ E) b  ?+ P3 M
    141.     {
      6 N6 i/ q4 \% H, ~$ s# B9 F9 j
    142.       case 'p':
      \" x- O3 i\" O1 ?0 i4 H7 h- q
    143.               m_p = (float) atof(optarg);
      \" G  A* ~; }1 r; _- `* ?+ g
    144.       case 'x':
      - S1 b) ]+ ~6 c# [+ b
    145.         m_xi = optarg;
      / A8 d: Y. b1 B' q( K, }- i
    146.         break;: n2 G/ X$ i0 n4 {* F! p! b
    147.       case 'y':) t* {6 r- x8 y2 M2 Q
    148.         m_yi = optarg;
      8 o$ d, w) C& q\" D; c' J
    149.         break;
      , x- p0 x9 w$ S) e1 y7 Q
    150.     }
      % J2 r/ N, J5 ?4 x
    151.   }( I+ z$ |2 E. A) n$ z
    152. + t: `7 [3 c/ u# E
    153.   res = m_lagrange_interpolating();) ~( C$ ~' `+ s' K- |$ r3 l) @/ `
    154.   printf("Lagrange interpolating with %.4f result is %.7f\n", m_p, res);. q$ V, a6 F# v7 [! s: @
    155.   $ g/ ], r5 j) J\" H! G
    156.   return 0;1 u\" T2 q# @' h' x8 W4 v
    157. }9 X9 \7 I8 e# Y) F7 i/ \
    复制代码
    回复

    使用道具 举报

    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 20:03 , Processed in 0.421903 second(s), 104 queries .

    回顶部