QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 22158|回复: 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自定义插值函数插值计算数值计算 + p2 T4 N1 x! Z: x/ P版本号: 04y09m28 . R& K* h* |6 }% W( Z+ Z分类: 工程设计应用7 d. @( ]. K* B1 F; ~/ v7 ? 性质: 免费软件 * x; `9 }" r. ~2 T9 Y9 f使用说明:

    ' [5 @! g9 m. O( L% }8 ]

    人们对EXCEL普遍熟悉的功能是表图的处理,不太知道其在工程计算(如锅炉设计计算)中的应用。复杂的工程计算常常用专业编程语言(Fortran、C、Pascal 等)来编制计算程序解决,用专业编程语言编制工程计算程序往往有下面二个缺点:# D# a/ {5 m* d 2 f$ \1 Q7 J: v3 d 1) 编程语言专业性强,一般工程技术人员难以掌握,由这些专业编程语言编制的计算应用程序的维护、修改、升级都比较困难。

    2 `- d; Y0 W }# Q: k* H) c

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

    + g; w2 o/ F! h" C+ n

    EXCEL每一个单元格就是一个电子表格,很容易进行一般的加、减、乘、除、乘方、开方,而三角函数、指数函数在EXCEL中可以直接引用内部函数。用EXCEL编制一般的工程计算程序还需解决的有以下两个问题:(1)循环计算,(2)表、单曲线、曲线组的查找(如:锅炉设计计算中的焓值)。对于问题(1)循环计算,EXCEL在工具菜单中提供了两个命令:单变量求解和规划求解,利用这两条命令很容易解决问题(1)。对于问题(2)表、曲线的查找,EXCEL没有提供现成的函数,但也可用VLOOKUP、MATCH、IF、OFFSET等函数的组合勉强近视解决,本文重点介绍表、曲线的查找自定义函数的定义及使用。 ; W: p5 x, ?: o 4 X, b& X% v1 k! H- d3 U r 为了更好地解决曲线查找的问题,应用C++程序设计语言,用拉格朗日插值计算法在EXCEL中建立了自定义函数,单曲线插值函数TWLQ(变量,"带路径的保存数据的文件名"),曲线组插值函数THLQ(变量1,变量2,"带路径的保存数据的文件名")。单曲线插值函数、曲线组插值函数的"带路径的保存数据的文件"包含着特定对映表、曲线的信息和计算精度的要求 (文件为Notepad编辑的txt文件) 。 ; P- S6 L5 _8 p( i, C1 b G单曲线lagrange插值函数:double twlq(double x,char* filename); 9 d, k* @& K/ Q4 A( S2 x- A$ R double twlx(double q,char* filename);: r- ]/ v6 d2 N' _ 曲线组lagrange插值函数: , o6 @" V F/ u# I- f; g' G double thlq(double x,double y,char* filename);1 L, V4 k9 Y$ A5 m; | W! J double thlx(double y,double q,char* filename);, }1 q) c9 \ I) K double thly(double x,double q,char* filename);。

    . g7 ?- b6 P' e' v# u' d

    例:单曲线插值函数 "带路径的保存数据的文件"结构如下: ( s0 R$ t! d- d& Q@ Description @ 5 y. d6 Z' I0 v7 e1 n( ?1 o2 x* T; Q n, nsel; % a' s M; U7 ux[0],x[1], x[2],··, x[n-2],x[n-1]; ! C V; P6 o( F9 w/ A6 \9 j' Mq[0],q[1], q[2],··, q[n-2],q[n-1];' d6 c; p! i6 y, ?1 }0 G! V MinX=0.7,MaxX=0.9,OverRangeAlm=1,X=电压,XUnit=mv,Q=电流,QUnit=mA

    7 m7 c: |4 y& T8 R& \! r

    注解:7 n' A( F2 c9 x, ^: G2 u7 @ Description:用户自定义描述字符串(Description中不可有@符号); $ x6 t! [: ^/ Z( s8 f3 [5 A( j n: 总插值点个数;7 Y/ D2 t* M& k# [* U. Y9 v nsel:实际参与插值计算的插值点个数; ! h% F# v5 R1 s: Q& X MinX=0.7,MaxX=0.9 取值范围; 9 r1 Q: x# p% W$ l" w5 k% F9 E# y OverRangeAlm=1 越限报警 1:报, 0:不报;8 j* L0 l+ X/ K5 C2 y s2 P8 _ X=电压,XUnit=mv,变量名称,单位。

    5 W$ x8 F7 K9 L# Q4 K

    ****结论: " D: V4 u9 T1 ` l)图形化界面的插值函数数据文件生成器 LCZMaker 方便快捷生成单曲线或曲线组插值函数数据文件。. R! Y( y( ^5 _/ {. d4 R+ c9 N; I; j 2)应用EXCEL自定义插值函数,在EXCEL中进行工程计算编程极为便利,比专业编程语言程序设计更易学易用、直观明了,用EXCEL编制的工程计算应用程序更易维护、修改、升级。) } P+ J" E- K) K4 ^. U 3) EXCEL本身长于表格制作,在EXCEL中进行工程计算编程人机界面友好,输入前、输出后处理方便简单。2 r. ]4 @4 @7 z& Y, V5 X3 ? 4)在某大型锅炉厂电站锅炉性能设计计算中已显神力。

    % ^+ [+ ]" s7 c' W: F

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

    - O" Z9 l1 [- k, F9 L- 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. & R' k( m! j4 N\" q
    2. /* TODO: Lagrange interpolating 4 e4 N; b1 ^9 U0 x3 B
    3. *
      + e1 A3 M  ?/ q; f
    4. * For example, if lg2.71 = 0.4330, lg2.72 = 0.4346, then lg2.718 = ?
      ' f, v+ v5 @* H* w4 V) d
    5. * In this situation, it could be solved via lagrange interpolating
      5 f! f/ p\" \1 u, N( t
    6. *& {; G- v\" X. _6 y2 Y
    7. * */
      ' w+ E+ B9 r# k- j$ T$ M) B

    8. # b: X  i7 u+ f& ]) n, p
    9. #include <stdio.h>
      9 [9 h1 `8 ]% ?- K1 G3 [5 x% g
    10. #include <stdlib.h>
      6 }3 x, I  y4 c, c- r
    11. #include <string.h>7 k5 o  |0 i\" l. v. e, F\" b

    12.   ~$ J: S# x) n9 Z: L- A
    13. #define DEBUG 0
      + B) e# v  Q, N- N7 w

    14. ) ~  Q( B5 D  Q: o
    15. static float m_p = 0.5635;
      6 b. c2 N- @4 s: N& W8 w
    16. static char *m_xi = NULL;
      , U- P4 j# o% R- R# g; N3 p
    17. static char *m_yi = NULL;
      7 K; A) Q7 ?\" i5 A) T, _
    18. static float m_arr[] = {};
      ' e4 ~0 L( W/ |( Y# ~0 d
    19. static unsigned int m_n = 0;
      3 c/ x: m6 r, X0 y

    20. 9 K2 J+ B8 B* k; q  t
    21. static void m_lagrange_interpolating_usage();
      0 P; s: e/ K  q' [! e# @
    22. static int m_lagrange_interpolating_set_n_arr();8 g, X  Q4 n9 j# v& u+ U& B2 |
    23. static float m_lagrange_interpolating();
      , i- [( q* k) i9 z: z2 B

    24. - u* t9 J' N) |% |  L+ M7 T+ ?
    25. static void \" w6 |6 `' q2 C5 N
    26. m_lagrange_interpolating_usage()
      $ [' R& D; e0 x6 w5 e$ i
    27. {  H9 \) i& g' D
    28.   printf("Lagrange Interpolating Usage:\n");4 j. ]5 G6 S- ?3 E
    29.   printf("bin/li -p ** -x ** -y **\n");
      . ]* K$ `( d3 P' W6 ^# \
    30.   printf("-p 0.5635\n");) {$ e  \: `1 `2 q0 k3 l$ J
    31.   printf("-x 0.56160,0.56280,0.56401,0.56521\n");
      0 t; {+ m! C& Y) p4 t' V. O% I- y
    32.   printf("-y 0.82741,0.82659,0.82577,0.82495\n");
      . ]! q( N) b, W( a- B1 S
    33. }
      1 O, S4 V8 G* o& U
    34. # p' m6 [2 J  Z+ ]- M; D
    35. static int ) E! m) P# z7 v. p+ h0 f
    36. m_lagrange_interpolating_set_n_arr()
      1 h! v* j0 C) u- n
    37. {
      & B8 G+ S5 u\" C1 _\" o; A+ S
    38.   int xi_n = 0;
      / d. i, ~: @4 O$ O
    39.   int yi_n = 0;$ I: Y7 N9 ~0 s7 L0 q
    40.   int n = 0;& ]; l& h8 c. O$ A0 c3 U
    41.   char *token = NULL;
      2 {) M  p( Z+ E  C\" @
    42.   const char *delim = ",";
      \" h% F  H) d/ n

    43. ( {: s9 S% P3 F/ G+ |- V6 T6 g6 a
    44.   token = strtok(m_xi, delim);* G& f\" ]  b0 k1 E
    45.   while (token)# J) U& E! s  X; c$ U& d
    46.   {3 a$ G3 T5 P1 b4 N' b
    47.     xi_n++;+ a7 d3 K. ~! W! p
    48.     n++;2 i/ \: o1 f% Y5 N7 I
    49.     m_arr[n] = (float) atof(token);$ f8 ?5 f2 }+ u! d+ h* S0 S
    50.     token = strtok(NULL, delim);1 n& p. @, `# i1 x
    51.   }
      : W8 D\" ?* c$ l# \1 t0 Y8 @; T( ~! {

    52. . k( L% B% R7 A\" u
    53.   token = strtok(m_yi, delim);
      \" j: E7 ?8 n/ u3 a3 m
    54.   while (token)8 }5 ]* l, [8 V8 @8 K+ }( C7 n$ T, O/ {
    55.   {7 U6 B9 S4 x# O9 m
    56.     yi_n++;, ?! C6 F( p# E, }
    57.     n++;9 I' u: M- ?2 v\" H6 T6 c
    58.     m_arr[n] = (float) atof(token);5 i+ c2 J7 k6 k! c, p9 k; a
    59.     token = strtok(NULL, delim);+ t  x2 C1 ?& I) T7 e
    60.   }
      # \4 y: V7 [4 ~& d7 P$ K1 H
    61.   
      9 M: h; t7 N4 Z) G4 [\" @7 S' D
    62.   if (xi_n != yi_n) : K5 g) u/ V% j: X4 e  u
    63.   {2 ^. o+ D- P+ B' m- |
    64.     return 0;7 ]6 q2 F  ~. ]& w
    65.   }
      & ~' ^. b. l/ i# N( C
    66. ( C; i! g: u, d% g$ r
    67.   m_n = xi_n = yi_n;: t4 X3 h1 E7 {4 d+ A$ H

    68. ! Z# I) h7 l3 {/ i0 |/ W: x; ]! T' E
    69.   return 1;
      . y( j4 q\" A, z6 L) }
    70. }
      7 ?, z6 z- F. C1 \: p
    71. ! B) N\" R/ E  N2 k6 U
    72. static float ' p2 ^5 Y* W0 S2 j
    73. m_lagrange_interpolating()
      0 x! E( {6 @8 v6 n& P
    74. {
      + y\" b8 G, p) I) Y  p; B\" e4 t
    75.   float l = 0.00000;2 ?4 q2 ~/ j% L& ^, V6 x
    76.   float li;2 {6 J- s& C7 m1 H- y9 K
    77.   int i;' m2 i- U- {$ P4 U% G! F4 A
    78.   int j;# R( }) C. m$ ^+ a8 }6 B7 s2 x1 m
    79. * L, Q, K9 `& X
    80. #if DEBUG% a1 S6 t8 o7 L
    81.   printf("DEBUG at %d: enable debug mode\n", __LINE__);
      9 D7 T3 O: b; f+ p+ J4 E& s; K
    82.   unsigned int m_n = 3;
      ; F\" t1 Q2 o$ j\" t( A# N\" k
    83.   float m_p = 0.5635;
      ! z8 T1 r2 |2 |# T' a( M
    84.   float m_x[] = {0.56160, 0.56280, 0.56401, 0.56521};
      - B9 ^8 k: B$ f9 O1 I! w% n
    85.   float m_y[] = {0.82741, 0.82659, 0.82577, 0.82495};
      ! w' ~6 l+ v% A% l; N% e6 q
    86.   & K/ K* m' K8 `% b! K- S
    87.   for (i = 0; i < m_n; i++)
      $ B& [* i\" e. Y, r) X) |
    88.   {
      $ P0 v7 o* f4 n, l2 z9 R! ]! _
    89.     li = 1.0000000;3 U: L+ e+ y- ~' f
    90.     for (j = 0; j < m_n; j++)/ y7 V\" [. J0 \\" R0 t9 u
    91.     {
      # O( N  C; g0 h% |1 m! u9 |
    92.       if (j != i)
      4 x, f& d* y0 N6 V9 [7 J# ?
    93.       {
      5 `$ I3 J7 Y, j( V0 S
    94.         li = li * (m_p - m_x[j]) / (m_x[i] - m_x[j]);
      1 b. N3 ~9 S# s2 P\" I& L7 v
    95.       }
      . }' Q! T, b) e' e; a2 d
    96.     }
      * O\" H! t, A9 ?6 F; b) c
    97.     l = l + li * m_y[i];
      ; J# _\" l; Y8 X/ h% p5 ?
    98.   }
      3 O5 `\" S; g0 P) R* R
    99. #else
      / d7 m/ `+ M) J  G' D
    100.   if (!m_lagrange_interpolating_set_n_arr())
      . L! _% e- N& y: E& Q9 D7 I
    101.   {4 J  v4 ~& y# Q- i
    102.     printf("Error: xi and yi counter is diff\n");+ N0 X& B3 l9 t2 m. S& F
    103.    
      4 v; I2 @4 B+ C: \+ C) K* {) }
    104.     return 0;, \5 U: Y9 C5 ~% C7 N% w5 U
    105.   }
      2 h; j2 q: E* [) g3 [
    106. & h( m; k! h/ h+ J/ \7 K
    107.   for (i = 0; i < m_n; i++)
        C0 p6 @' l# d, S5 H% ], M
    108.   {
      , V6 y: u5 X) S  F
    109.     li = 1.0000000;
      # W! o; v4 H. v4 x: a, W+ X
    110.     for (j = 0; j < m_n; j++)   p9 {; l: s. C7 g
    111.     {
      7 [2 u: u! t* |# L' r
    112.       if (j != i)
      8 C* C9 S, p: }7 G3 A' E) r
    113.       {3 O6 W- P: O* X! z( S$ a9 X; ~
    114.         li = li * (m_p - m_arr[j + 1]) / (m_arr[i + 1] - m_arr[j + 1]);
      # `- l. `8 e7 p; e
    115.       }: y( y, h* |5 _; O  h4 b
    116.     }- Q6 |% S+ ~( B- w6 W; r
    117.     l = l + li * m_arr[i + m_n + 1];
      4 v; V3 a; I* w) a7 N; H
    118.   }/ o4 h5 T  a4 w$ M5 w- m
    119. #endif
      4 }2 S/ l4 y5 N1 q; u
    120. : J7 E( `5 b& ]
    121.   return l;3 L5 R/ M/ M# @0 A& f7 U4 p
    122. }
      , k/ W$ f0 U; z& Z# i
    123. ; V/ O  R0 X5 W# p1 u
    124. int
      5 q+ b- @+ Y$ I$ e# _3 I) B5 n
    125. main(int argc, char **argv) 1 T2 k: U& }8 I( m# @
    126. {% h- F' v& Z, N7 O1 U, H- \
    127.   int c;% W9 w# Q7 c/ }( [0 R! P7 r
    128.   extern char *optarg;
      % X+ G8 s; b5 V2 k
    129.   float res;7 w  e& Z4 L) T6 i2 H5 [5 W: T
    130. - `! s( J, B4 h% e
    131.   if (argc < 2) 9 P$ {2 m/ O! p/ Z/ }7 a
    132.   {
      / v  S4 A+ p! S3 J' ?7 e/ L
    133.     m_lagrange_interpolating_usage();
      / l( {! W; i$ |4 o/ l' {
    134.     # {, G- @5 x7 b$ c
    135.     return -1;
      ( |3 N5 v( t, o- i( h4 u# |2 \: t
    136.   }
      ( Z  d6 |2 E\" n7 t1 r# m
    137. 4 ^( y9 `6 W; g; M
    138.   while ((c = getopt(argc, argv, "p:x:y:")) != -1)
        y1 B- y$ H( q% s2 h  T4 {
    139.   {
        e: P( R! t+ t+ _5 }: j' v. Q
    140.     switch (c)
      ) z# w+ w- N' a7 L: O- w
    141.     {+ N4 t& L1 |& p. s! R  s/ r( @3 y
    142.       case 'p':- u5 ]/ P4 A- d& j% O/ p6 \
    143.               m_p = (float) atof(optarg);
      7 H) \7 s8 t. R4 z! x; N
    144.       case 'x':( ^1 u' v\" R3 u; u
    145.         m_xi = optarg;
      ! P, @% G# {* K9 d
    146.         break;5 E; B$ T\" s$ B3 r& ^4 t$ z( t* |
    147.       case 'y':9 _( l, V/ c* {3 j
    148.         m_yi = optarg;
      , p$ I# _( n4 z, u! Q1 F
    149.         break;
      # y& {# j! K4 P8 P- ^& Y& L- k9 l
    150.     }: ~, Y+ @\" e# ^7 O
    151.   }/ u' y) F/ G) o6 ]) _. R# p+ h: R
    152. ; H6 M# `8 {/ r3 Y8 J- `
    153.   res = m_lagrange_interpolating();5 M* }) o. Z3 |& O8 J
    154.   printf("Lagrange interpolating with %.4f result is %.7f\n", m_p, res);( l; d\" x9 J$ p. x
    155.   5 |) E5 z- E* G, x- b- S! ?
    156.   return 0;
      8 T8 z/ _& A0 q) r2 A0 P
    157. }
      ! e% K( N. _9 z& b1 [
    复制代码
    回复

    使用道具 举报

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

    回顶部